关于android:接入指南一个Demo带你玩转华为帐号服务

38次阅读

共计 4492 个字符,预计需要花费 12 分钟才能阅读完成。

在《接入指南:一文带你理解华为帐号服务》中曾经给大家介绍了华为帐号服务有哪些劣势,如一键受权登录华为全场景共享、共享华为帐号所有用户资源、帐号安全可靠、接入方便快捷等,以及为什么能帮忙开发者进步获客量,文章最初还提供了 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/…
原作者:胡椒

正文完
 0