在《接入指南:一文带你理解华为帐号服务》中曾经给大家介绍了华为帐号服务有哪些劣势,如一键受权登录华为全场景共享、共享华为帐号所有用户资源、帐号安全可靠、接入方便快捷等,以及为什么能帮忙开发者进步获客量,文章最初还提供了Demo App的下载二维码让大家下载体验华为帐号的登录受权流程,Demo非常简单,集成了3个华为帐号服务SDK接口(总共4个),本文通过领导大家疾速开发此Demo,让大家相熟华为帐号服务。
如何你还没有下载Demo,请应用浏览器扫描如下二维码下载体验:
(注:Demo中会收集相干操作信息用于用户数量统计)
Demo开发筹备
1、 装置Android Studio 3.5及以上版本;
2、 装置JDK 1.8 及以上;
3、 应用SDK Platform 19及以上;
4、 应用Gradle 4.6及以上;
5、 在华为开发者联盟注册成为华为开发者,如已注册,请跳过此步骤;
6、 将github上的demo源代码下载至本地;
Demo源码地址:https://github.com/HMS-Core/h...
运行环境配置(2min左右)
1、 应用Android Studio关上demo工程;
2、 在安卓插件市场下载HMS Toolkit插件并装置,版本5.2.0.300或以上;
如何装置插件也可参考:如何装置HMS Toolkit
3、 在工程中新创建本人的包名,例如com.hxb.account,把demo包com.huawei.hms.accountsample原有代码移动到新建包下;批改工程中波及的Package Name和利用ID为本人新建的包名。(不能间接应用Demo中的包名,该包名曾经被其余用户在华为利用市场注册过)
新建本人的包名(新建后留神把相应的Activity等类移到您定义的新包下),便于编译过程中查找相干文件:
批改AndroidManifest.xml文件中的package为com.hxb.account
批改build.gradle中的applicationId为com.hxb.account.
4、 关上HMS菜单下的Configuration Wizard进行环境配置查看,如果没有登录华为开发者帐号,Toolkit会疏导先进行登录,登录后再点击Configuration Wizard。
弹出如下页面,页面中红×局部阐明Toolkit检测到华为开发者联盟对应开发帐号下没有对应包名的利用。
点击Link可间接跳转至开发者联盟,进行相干利用的创立,这部分须要手动实现,步骤如下:
A、点击利用公布
B、点击增加我的项目
C、创立我的项目
D、点击增加利用
E、增加我的项目
利用创立完后,点击Configuration Wizard面板中的Retry,从新进行配置查看,查看胜利:
7、 增加Account kit
点击Configuration Wizard面板中Add Kits,抉择Account kit进行增加
增加完后果:
8、 抉择证书,以后抉择Android debug certificate 选项,点击Generate生成指纹证书,如下图
9、 点击Next,主动进行其余配置,包含在华为开发者联盟上开明Account Kit服务开关、配置利用的指纹证书、下载agconnect-services.json文件到工程目录下、混同配置、在build.gradle文件插入接入Account SDK所须要的依赖、apk签名等操作,胜利后会显示Success,如果中途查看出问题,可依照指引解决。
应用Toolkit近程真机进行打包测试
环境配置完后,调用Toolkit的Cloud Debugging进行打包测试
抉择须要应用的机型:
抉择对应设施,点击运行,即可进行App测试:
Demo外围代码详解
1、 界面设计
帐号的交互接口次要波及登录、静默登录、退出帐号、勾销受权,Demo中展现了登录、静默登录、勾销受权三个接口的应用。
其中“华为帐号登录”图标应用的是曾经封装好的规范控件,理论应用时请依照华为帐号登录图标应用标准应用华为图标:
<com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton android:layout_width="wrap_content" android:layout_height="wrap_content" />
1、 帐号受权性能外围代码
(1) 帐号登录
场景介绍:帐号登录基于OAuth 2.0协定规范和OpenID Connect协定,反对Authorization Code和ID Token两种登录模式,Authorization Code模式仅实用于有本人服务器的利用,ID Token模式同时实用于单机利用和有本人服务器的利用,您可依据理论状况抉择其中一种模式实现。
private void signIn() { mAuthParam = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM) .setIdToken() .setAccessToken() .createParams(); mAuthManager = AccountAuthManager.getService(AccountActivity.this, mAuthParam); startActivityForResult(mAuthManager.getSignInIntent(), Constant.REQUEST_SIGN_IN_LOGIN); }
代码中setIdToken()示意应用ID-Token形式进行受权,另一种形式为setAuthorizationCode(),两者的区别后续文章会具体介绍,getSignInIntent()为帐号登录受权接口。
登录受权实现后处理登录后果:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == Constant.REQUEST_SIGN_IN_LOGIN) { //login success //get user message by parseAuthResultFromIntent Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data); if (authAccountTask.isSuccessful()) { AuthAccount authAccount = authAccountTask.getResult(); Log.i(TAG, authAccount.getDisplayName() + " signIn success "); Log.i(TAG, "AccessToken:\n" + authAccount.getAccessToken()); Log.i(TAG, "OpenId:\n" + authAccount.getOpenId()); Log.i(TAG, "Email:\n" + authAccount.getEmail()); Log.i(TAG, "UnionId:\n" + authAccount.getUnionId());
//download avatar use AsyncTask NetService = new NetService(new URLPostHandler() { @Override public void PostHandler(Bitmap bitmap) { imageView.setImageBitmap(bitmap); textView.setText(authAccount.getDisplayName()); } }); netService.execute(authAccount.getAvatarUriString()); } else { Log.i(TAG, "signIn failed: " + ((ApiException)
authAccountTask.getException()).getStatusCode()); } } }
(2) 静默登录
场景介绍:用户首次应用帐号登录利用后,再次登录时,无需反复受权
private void silentSignIn() { Task<AuthAccount> task = mAuthManager.silentSignIn(); task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() { @Override public void onSuccess(AuthAccount authAccount) { Log.i(TAG, "silentSignIn success"); } }); task.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { //if Failed use getSignInIntent if (e instanceof ApiException) { ApiException apiException = (ApiException) e; signIn(); } } }); }
代码中调用silentSignIn()进行帐号静默登录。
(3) 勾销受权
场景介绍:为了晋升利用隐衷平安,利用能够提供入口,供用户勾销对利用的受权。
private void cancelAuthorization() { Task<Void> task = mAuthManager.cancelAuthorization(); task.addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) {
imageView.setImageDrawable(null); textView.setText(""); Log.i(TAG, "cancelAuthorization success"); } }); task.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { Log.i(TAG, "cancelAuthorization failure:" + e.getClass().getSimpleName()); } }); }
代码中调用cancelAuthorization()勾销利用受权。
华为帐号服务相干链接:
华为帐号服务具体领导文档
codelab接入领导
视频解说(请参考HMS 4.0视频解说)
原文链接:https://developer.huawei.com/...
原作者:胡椒