评论

收藏

[Android] 【FAQ】接入华为帐号服务过程中常见问题总结

移动开发 移动开发 发布于:2022-06-02 10:38 | 阅读数:677 | 评论:0

华为帐号服务(Account Kit)为开发者提供简单、安全的登录授权功能,用户不必输入帐号、密码和繁琐验证,就可以通过华为帐号快速登录应用,即刻使用App。这篇文章收集了开发者们集成华为帐号服务中会遇到的典型问题,并给出了解决方法,希望为其他遇到类似问题的开发者提供参考。
1 .redirect_url是什么,如何配置回调地址
(1)回调地址redirect_rul不需要是真实的页面地址,redirect_rul是OAuth2.0协议定义的一个用来做以下用途的虚拟地址,用户配置一个https://xxxx类似的自定义字符串就好了。
(最好根据自己业务属性定义一个有意义的字符串)
(2)在OAuth2.0协议中redirect_url的用途如下:
如果是web应用,OAuth服务器授权后,会回调跳转到这个地址。web应用需要拦截这个回调地址来接收Auth Code。获取AT的时候,要把回调地址作为参数传回,OAuth服务器会校验回调地址和code是匹配的,否则返回错误码。
(3)如何设置redirect_url?  参见官网文档说明
2 .openId、unionId有什么区别?
openId:同一个用户,不同应用,openId值不同,单个应用内唯一。
unionId:开发者帐号ID,同一个用户,同一个开发者帐号下管理的不同应用,unionId相同。
应用接入华为帐号登录可以获取到OpenId(同一个用户的不同应用,OpenId值不同),使用OpenId标识用户,多个应用之间同一个华为帐号用户在开发者系统内会被标识为多个用户。如果开发者希望在多个应用之间标识用户的唯一性,可以使用UnionId(对于同一个用户,同一个开发者帐号下管理的不同应用,UnionId值相同)。特别注意的是,标识用户唯一性的应用必须是在同一个开发者帐号下管理,一个应用转移到另外一个帐号后,UnionId值也会变化。
3. 怎样判断帐号是否已登录?
通过silentSignIn接口,调用到onSuccess里面并且拿到的authAccount不为空则说明回调成功,帐号是已登录状态。
Task<AuthAccount> task = service.silentSignIn();
    task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
      @Override
      public void onSuccess(AuthAccount authAccount) {
        if(null != authAccount) {
          showLog("success ");
        }
      }
    });
4 .调用服务端接口user.getTokenInfo接口报错invalid session
(1)排查传参是否正确
(2)access_token需要UrlEncode一下,不然里面有特殊符号的解析就会报invalid session
DSC0000.png

接口文档:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References/account-gettokeninfo-0000001050050585
5.调用oauth2/v3/token接口,redirect_uri是否必传
(1)使用Authorization Code换取Access_Token、Refresh Token、ID Token,这个参数是必须要传入的
DSC0001.png

DSC0002.png

(2)使用Refresh Token获取新的Access Token,redirect_url不需要传
DSC0003.png

参考官网文档
6. Authorization Code 、Access Token、Refresh Token的有效期分别是多久?
Authorization Code的有效期是5分钟,该code是一次性的,申请后使用一次之后就会失效。
Access Token的有效期是1小时。
Refresh Token Token当前默认有效期180天。
7. 常见错误码分析
7.1 错误码:907135700
该错误码说明调用网关查询应用scope失败,可以排查下面几项:
1.排查设备网络是否有问题,一般是当前网络不可用或者当前网络无法正常访问scope下载站点,比如防火墙限制等。
2.检查自己的appId是否在开发者联盟上面已经注册
3.可能是手机时间错误,误认为SSL证书过期,从而无法下载scope以致鉴权失败。
7.2 错误码:907135701
该错误码说明openGW没有配置scope,appid没有申请权限,或者环境和appid不匹配导致,可以排查下面几项:
1.检查自己的appId是否在开发者联盟上面已经注册
2.查看agconnect-services.json 文件中的app_id是否跟AGC平台上的appid一致;
3.查看agconnect-services.json文件是否在工程的app目录下,agconnect-services.json文件必须在app目录下,如下图所示:
DSC0004.png

4.查看appId和HMS spk环境是否匹配,同是商用环境或者测试环境
7.3 错误码:907135702
该错误码说明openGW没有配置指纹证书,请在开发者联盟上配置指纹证书,可以排查以下几点:
1.检查自己的appId是否在开发者联盟上面已经注册
2.SHA256指纹是否在联盟上配置,可以参考官网文档
7.4 错误码:6003
该错误码说明证书指纹校验不匹配,需要检查当前客户端应用打包的证书签名是否与AppGallery Connect网站上配置的签名一致。
1.打开应用的APK,将其中“META-INF”文件夹解压出来,得到其中的“CERT.RSA”文件,通过keytool -printcert -file META-INF/CERT.RSA命令打印签名证书信息。
2.登录AppGallery Connect,单击“我的项目”,选择需要操作项目,进入项目页面后选择应用,然后在“项目设置 >常规”中检查“SHA256证书指纹”配置的信息是否与步骤1)的指纹一致。
证书配置可以参考官网文档
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~


   
   
   
                        

关注下面的标签,发现更多相似文章