文档管理中心

FAQ

本文导读
展开章节

如果您在下面没有找到需要的问题,请加入Stack Overflow社区参与讨论。

登录相关问题

开发者有自己的帐号管理,是否可以接入华为帐号?

可以,很多应用都有三方帐号登录功能,这是个很常见的场景。

是否有办法在不下载HMS Core(APK)的情况下,实现华为帐号授权登录?

在没有HMS Core(APK)的手机上,如果您不想下载HMS Core(APK),可以通过AppAuth SDK,实现华为帐号授权登录,请参见通过AppAuth接入华为帐号。

开发者在非华为手机上安装了HMS Core(APK),是否支持登录华为帐号?

华为帐号支持在非华为的安卓手机上登录。

退出成功后重新登录,为什么没有提示输入登录凭据?

应用退出华为帐号后,设备上的华为帐号仍然处于登录状态,因为应用已经被授权,所以后续登录不提示输入登录凭据是正常情况。您可以尝试以下操作:

  • 从帐号中心注销设备上的华为ID(设置 > 帐号中心 > 退出帐号)
  • 撤销华为ID授权(设置 > 帐号中心 > 隐私中心 > 控制对您帐号的访问,选择应用并点击“取消授权”)

应用调用登录接口的时候是全屏页面,为什么在拉起登录页面的过程中顶部的状态栏会闪一下?应该如何解决?

原因是SDK中有个页面未做全屏适配。如果应用调用登录接口时的页面为全屏页面,则您需要按照以下的方法解决:

  1. SDK升级到6.1.0.302及以上版本
  2. 集成登录接口时参见如下的样例代码:
Java
public void accountAuthSignIn() {
    AccountAuthParams authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAuthorizationCode().createParams();
    AccountAuthService service = AccountAuthManager.getService(MainActivity.this, authParams);
    Intent intent = service.getSignInIntent();
    intent.putExtra(CommonConstant.RequestParams.IS_FULL_SCREEN, true);
    startActivityForResult(intent, 8899);
}

获取帐号个人信息相关问题

Access Token和Refresh Token最长会有多长?

Access Token和Refresh Token的长度与其中编码的信息有关,目前来讲Access Token和Refresh Token的长度不会超过1024字符。

调用获取Access Token的接口时,是否有次数和频率限制?

单个App在一小时内最多允许10000次调用,超过限制将获取Token失败。

为什么帐号中存在Email信息,但是服务端调用/oauth2/v3/tokeninfo接口后在响应中却没有Email信息?

问题描述

集成Account Kit,获取ID Token,调用服务侧的/oauth2/v3/tokeninfo接口后,发现不能在响应体中获取响应字段的Email信息。

得到的响应如下:

{
    "at_hash": "XXXXXX",
    "aud": "XXXXXX",
    "sub": "XXXXXX",
    "azp": "XXXXXX",
    "kid": "XXXXXX",
    "iss": "https://accounts.huawei.com",
    "typ": "JWT",
    "exp": 1579682457,
    "display_name": "136******53",
    "iat": XXXXXX,
    "alg": "RS256"
}

接口指导中的响应如下所示:

{
    "iss":"String",
    "sub":"String",
    "aud":"String",
    "exp":"Long",
    "iat":"Long",
    "nonce":"String",
    "at_hash":"String",
    "azp":"String",
    "email_verified":"Boolean",
    "email":"String",
    "picture":"String",
    "name":"String",
    "locale":"String",
    "family_name":"String",
    "given_name":"String",
    "display_name":"String"
}

可能原因

在获取ID Token前,未请求华为帐号用户授权应用获取Email地址。

处理步骤

在端侧的代码中提前添加请求华为帐号用户授权应用获取Email地址的操作。

3.0版本的授权请求接口为requestEmail();4.0版本授权请求接口为setEmail()。

  • HMS Core SDK 3.0版本
    HuaweiIdSignInOptions mSignInOptions = new HuaweiIdSignInOptions.Builder(HuaweiIdSignInOptions.DEFAULT_SIGN_IN).requestServerAuthCode().requestIdToken("").requestEmail().build();
  • HMS Core SDK 4.0版本
    HuaweiIdAuthParams authParams = new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setIdToken().setEmail().createParams();
说明

请求华为帐号用户授权应用获取相应信息的详情请参见HuaweiIdAuthParamsHelper的setEmail。

当使用jwt.io校验ID Token时,是否需要提供私钥?

解析ID Token不需要私钥,校验ID Token也不需要私钥。

示例代码中的ID Token客户端校验的代码运行后报错,提示:id Token validate failed.NoSuchMethodError?

ID Token能正常演示的最小版本为Android 9,请排查测试手机上的版本是否符合要求。

为什么配置正确,但是在端侧回调成功后的帐号信息里调用getEmail()获取不到Email信息?

Email信息并不是必填字段,请登录帐号中心确认用户的帐号信息中是否包含Email信息。

验证ID Token有效性中的公钥具体的更新策略是什么?什么时间点更新?更新后我缓存的旧公钥是不是就不能用了?

验证ID Token有效性中的公钥每天更新一次,应用服务器可以缓存公钥的值。若公钥失效,旧公钥不可用,请在certs网站上获取最新的公钥,并更新应用服务器缓存的旧公钥。

接入华为帐号,是否可以获取UID?

不可以,由于需要隐私保护,接入华为帐号后只能获取OpenID和UnionID。

OpenID和UnionID的格式?

长度

为减少开发者接入和迁移成本,Account Kit在2023年09月21日对OpenID、UnionID的长度做出了如下调整:
  • OpenID
    • 应用创建时间晚于(含)2023年09月21日 23:00:00,OpenID固定28位。
    • 应用创建时间早于2023年09月21日 23:00:00,OpenID长度不固定,最大256位。
  • UnionID
    • 开发者帐号注册时间晚于(含)2023年09月21日 23:00:00,UnionID固定29位。
    • 开发者帐号注册时间早于2023年09月21日 23:00:00,UnionID长度不固定,最大92位。

唯一性标识

  1. 开发者帐号下管理了多个应用时,针对同一个华为帐号,不同的应用返回的OpenID值不同,但返回的UnionID相同。
  2. 如果开发者帐号下管理了多个应用,并且这些应用需要共享同一个华为帐号的用户信息,可以使用UnionID作为用户标识。

数据类型

OpenID和UnionID均是字符串类型的数据。

大小写敏感

OpenID和UnionID严格区分大小写。

实际应用中的注意事项

在存储、查询或比较OpenID或UnionID时,请务必保持其原始的大小写格式。

Access Token和Refresh Token的有效时长是多久?

Access Token的有效时长是1个小时,Refresh Token的有效时长是180天。

其他问题

从Google Play下载的HMS Core(APK)为什么不能获得自动读取短信的权限?

根据Google Play的要求,从其下载的HMS Core (APK)没有读取短信的权限。

在Android 11上,已安装HMS Core(APK)最新版本,仍然提示升级,如何解决?

Android 11更改了应用查询用户在设备上已安装的其他应用以及与之交互的方式。您应用的targetSdkVersion是30或者更高版本,并且集成的Account Kit 6.1.0.300之前版本时,将无法访问HMS Core(APK),并且持续提示升级。

您可以通过以下两种方法解决。

  • 方法一:

    升级Account Kit的SDK版本至6.7.0.300,版本信息请参见版本更新说明。

  • 方法二:

    如果不升级SDK,需要在“AndroidManifest.xml”中manifest下添加<queries>标签。

    <manifest ...>
        ...
        <queries>
            <intent>
                <action android:name="com.huawei.hms.core.aidlservice" />
            </intent>
        </queries>
        ...
    </manifest>
    说明

    <queries>标签对工具的要求如下:

    • Android Studio需升级至3.3或更高版本。
    • Android Gradle插件需升级至3.3.3、3.4.3、3.5.4、3.6.4、4.0.1或4.1.0及更高版本。
在 指南 中进行搜索
请输入您想要搜索的关键词