《接入指南:一文带你了解华为帐号服务》中已经给大家介绍了华为帐号服务有哪些优势,如一键授权登录华为全场景共享、共享华为帐号所有用户资源、帐号安全可靠、接入方便快捷等,以及为什么能帮助开发者提高获客量,文章最后还提供了Demo App的下载二维码让大家下载体验华为帐号的登录授权流程,Demo非常简单,集成了3个华为帐号服务SDK接口(总共4个),本文通过指导大家快速开发此Demo,让大家熟悉华为帐号服务。


如何你还没有下载Demo,请使用浏览器扫描如下二维码下载体验:

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core

(注: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/huawei-account-demo/tree/quickstart

运行环境配置(2min左右)

1、 使用Android Studio打开demo工程;

2、 在安卓插件市场下载HMS Toolkit插件并安装,版本5.2.0.300或以上;

如何安装插件也可参考:如何安装HMS Toolkit


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_02

3、 在工程中新创建自己的包名,例如com.hxb.account,把demo包com.huawei.hms.accountsample原有代码移动到新建包下;修改工程中涉及的Package Name和应用ID为自己新建的包名。(不能直接使用Demo中的包名,该包名已经被其他用户在华为应用市场注册过)

新建自己的包名(新建后注意把相应的Activity等类移到您定义的新包下),便于编译过程中查找相关文件:


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_03


修改AndroidManifest.xml文件中的package为com.hxb.account


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_04


修改build.gradle中的applicationId为com.hxb.account.


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_05


4、 打开HMS菜单下的Configuration Wizard进行环境配置检查,如果没有登录华为开发者帐号,Toolkit会引导先进行登录,登录后再点击Configuration Wizard。


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_06

弹出如下页面,页面中红×部分说明Toolkit检测到华为开发者联盟对应开发帐号下没有对应包名的应用。


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_07

点击Link可直接跳转至开发者联盟,进行相关应用的创建,这部分需要手动完成,步骤如下:

A、点击应用发布

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_08

B、点击添加项目


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_09


C、创建项目

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_10

D、点击添加应用

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_11

E、添加项目


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_12

应用创建完后,点击Configuration Wizard面板中的Retry,重新进行配置检查,检查成功:


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_13


7、 添加Account kit

点击Configuration Wizard面板中Add Kits,选择Account kit进行添加


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_14

添加完结果:

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_15

8、 选择证书,当前选择Android debug certificate 选项,点击Generate生成指纹证书,如下图


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_16


9、 点击Next,自动进行其他配置,包括在华为开发者联盟上开通Account Kit服务开关、配置应用的指纹证书、下载agconnect-services.json文件到工程目录下、混淆配置、在build.gradle文件插入接入Account SDK所需要的依赖、apk签名等操作,成功后会显示Success,如果中途检查出问题,可按照指引处理。


【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_17

使用Toolkit远程真机进行打包测试

环境配置完后,调用Toolkit的Cloud Debugging进行打包测试

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_18


选择需要使用的机型:

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_19

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_20


选择对应设备,点击运行,即可进行App测试:

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_21


Demo核心代码详解

1、 界面设计

帐号的交互接口主要涉及登录、静默登录、退出帐号、取消授权,Demo中展示了登录、静默登录、取消授权三个接口的使用。

【接入指南】一个Demo带你玩转华为帐号服务_HMS Core_22



其中“华为帐号登录”图标使用的是已经封装好的标准控件,实际使用时请按照华为帐号登录图标使用规范使用华为图标

<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/consumer/cn/forum/topic/0201524776948490132?fid=18

原作者:胡椒