写点什么

【荣耀帐号服务】手把手教你快速 Android 应用接入

  • 2022 年 9 月 26 日
    北京
  • 本文字数:1694 字

    阅读完需:约 6 分钟

一、业务简介

荣耀帐号服务为开发者提供基于 OAuth2.0 标准协议的快捷登录服务和多样式服务授权能力,开发者的应用能支持终端用户使用荣耀帐号快捷、安全地一键授权登录,帮助广大开发者减少应用注册、登录环节的用户流失,提升用户使用体验。

二、授权码模式登录

1. 业务简介

授权码模式登录基于 OAuth 2.0 协议标准, 应用可以获取帐号临时授权码(Authorization Code), 使用户安全登录应用。首次登录时,要求用户同意授权,当身份验证信息到期时,只需要从服务器端通过刷新令牌刷新访问令牌,从而更快,更可靠,更方便。授权码模式仅适用于有自己服务器的应用。

2. 业务流程



整体流程:

  1) 用户选择帐号登录方式登录应用客户端。

  2) 应用客户端向 HonorID OpenSDK 发送请求,获取 Authorization Code。

  3) HonorID OpenSDK 向帐号服务器发送请求,获取 Authorization Code。

  4) HonorID OpenSDK 展示帐号服务器的用户登录授权界面,界面上会根据登录请求中携带的授权域(scope)信息,显式告知用户需要授权的内容。

  5) 用户允许授权。

  6) 帐号服务器返回 Authorization Code 信息给 HonorID OpenSDK。

  7) HonorID OpenSDK 返回 Authorization Code 信息给应用客户端。

  8) 应用客户端将获取到的 Authorization Code 信息发给应用服务器。

  9) 应用服务器向帐号服务器发送请求,获取 Access Token、Refresh Token 信息。

  10) 帐号服务器返回 Access Token、Refresh Token 信息。

3. 开发步骤

3.1 创建 SignInOptions 请求对象

SignInOptions signInOptions = new SignInOptionBuilder(SignInOptions.DEFAULT_AUTH_REQUEST_PARAM)            .setClientId(appid)            .createParams();
复制代码

3.2 初始化 HonorIDSignInService 对象

调用 HonorIdSignInManager.getService 方法初始化 HonorIDSignInService 对象

HonorIDSignInService service = HonorIdSignInManager.getService(this, signInOptions);
复制代码

3.3 展示帐号登录授权页面

调用 HonorIDSignInService.getSignInIntent 方法并展示帐号登录授权页面。

Intent signInIntent = HonorIdSignInManager.getService(this, signInOptions).getSignInIntent();    startActivityFromChild(this, signInIntent, 1001);
复制代码

3.4 登录授权完成后处理登录结果, 得到授权码

@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (1001 == requestCode) {        if (resultCode == ErrorStatus.ERROR_MCP_CHECK_FAIL) {            logPrintlnToMain("resultCode : " + resultCode + " ,msg : " + "mcp check fail");            return;        }        //跳转授权页面回调        Task<SignInAccountInfo> accountTask = HonorIdSignInManager.parseAuthResultFromIntent(data);        if (accountTask.isSuccessful()) {            SignInAccountInfo signInAccountInfo = accountTask.getResult();            mAccount = signInAccountInfo;            logPrintln(signInAccountInfo);        }    }}
复制代码

3.5 将 code 传给应用服务器调用 Code 换 Access Token

应用服务拿到 code 参数之后, 调用 /oauth2/v3/token 接口用 code 换取 Access Token, Refresh Token, id Token 等参数.

接口地址: https://hnoauth-login.cloud.hihonor.com/oauth2/v3/token

注意: grant_type=authorization_code

3.6 Access Token 获取用户信息

获取到 Access Token 之后, 可以通过 GOpen.User.getInfo 接口获取用户信息。

接口地址:https://account-drcn.platform.hihonorcloud.com/rest.php?nsp_fmt=JSON&nsp_svc=GOpen.User.getInfo

3.7 Refresh Token 刷新 Access Token

Access Token 的有效期是 1 小时, 如果过期了, 还需要使用到的话, 那可以调用 /oauth2/v3/token 接口用 Refresh Token 换取 Access Token。

接口地址:https://hnoauth-login.cloud.hihonor.com/oauth2/v3/token

注意: grant_type=refresh_token


ID Token 登录、静默登录等更多内容请上荣耀开发者服务平台官网查看。


用户头像

还未添加个人签名 2022.06.28 加入

第一时间发布荣耀开发者服务平台相关资讯,共享行业资源,合作共赢。荣耀开发者服务平台是荣耀面向开发者的统一生态入口,支持一站式接入荣耀软件、硬件生态合作,助力开发者商业成功。

评论

发布
暂无评论
【荣耀帐号服务】手把手教你快速Android应用接入_开发者_荣耀开发者服务平台_InfoQ写作社区