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

一、业务简介

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

【荣耀帐号服务】手把手教你快速Android应用接入_第1张图片

二、授权码模式登录

1. 业务简介

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

2. 业务流程

【荣耀帐号服务】手把手教你快速Android应用接入_第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 登录授权完成后处理登录结果, 得到授权码

@Override
protected 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 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 接口获取用户信息。

3.7 Refresh Token 刷新 Access Token

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

注意: grant_type=refresh_token

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

你可能感兴趣的:(android,服务器,运维,前端,小程序)