HMS Core华为帐号注册用户量已达到10亿+,通过华为帐号可以一键登录应用,通过与华为帐号绑定,可以为应用快速引入新用户和登录。华为帐号开放遵循OAuth2.0以及OpenID Connect标准规范。
在这个codelab中,您将创建Demo Project实现对华为帐号开放服务的API调用,通过Demo Project您可以体验到:
集成HUAWEI HMS Core能力,需要完成以下准备工作:
至此,已经为创建的应用开通了"华为帐号"服务。
buildscript {
dependencies {
classpath 'com.huawei.ohos:hap:3.0.5.11'
// 添加agconnect服务依赖
classpath 'com.huawei.agconnect:agcp-harmony:1.3.0.300'
}
}
apply plugin: 'com.huawei.agconnect'
在"dependencies"中添加如下编译依赖。
dependencies {
implementation 'com.huawei.hms:jsb-ohos-adapter:6.4.0.301'
// agconnect依赖组件
implementation 'com.huawei.agconnect:agconnect-core-harmony:1.3.0.300'
}
"deviceConfig": {
"default": {
"allowComponentsProxy": true
}
}
import com.huawei.hms.jsb.adapter.har.bridge.HmsBridge;
import ohos.aafwk.ability.AbilityPackage;
public class MyApplication extends AbilityPackage {
private HmsBridge mHmsBridge;
@Override
public void onInitialize() {
// 注册HMS Core服务
mHmsBridge = HmsBridge.getInstance();
mHmsBridge.initBridge(this);
super.onInitialize();
}
@Override
public void onEnd() {
// 注销HMS Core服务
mHmsBridge.destoryBridge();
super.onEnd();
}
}
import {hmsjsb} from '@hw-hmscore/hms-js-base'
export default {
hmsData: {
eventCallbackMap: {}
},
onCreate() {
console.info('AceApplication onCreate');
hmsjsb.init(this.hmsData.eventCallbackMap);
},
onDestroy() {
console.info('AceApplication onDestroy');
}
}
npm install @hw-hmscore/hms-js-base
出现如下提示,说明下载成功:
npm WARN testtest@1.0.0 No description
npm WARN testtest@1.0.0 No repository field.
+ @hw-hmscore/hms-js-base@6.4.0-301
added 1 package from 1 contributor in 1.192s
npm install @hmscore/hms-jsb-account@6.5.300
"metaData": {
"customizeData": [
{
"name": "com.huawei.hms.client.appid",
// 这里需要把"OAuth Client ID"替换为OAuth 2.0客户端ID
"value": "OAuth Client ID"
}
]
}
点击右上角"Sync Now",完成"build.gradle"文件的同步,将相关依赖下载到本地。
帐号的交互接口主要涉及登录、静默登录、退出帐号、取消授权。本次codelab中您可以在HUAWEI DevEco Studio工程中创建一个布局页面,参照下图进行UI设计。
import {HuaweiIdAuthParamsHelper, HuaweiIdAuthManager} from '@hmscore/hms-jsb-account';
// 构造参数
var signInOption = new HuaweiIdAuthParamsHelper().setIdToken().setProfile().build();
// HuaweiIdAuthManager.getAuthApi方法返回huaweiIdAuth对象,调用huaweiIdAuth.getSignInIntent方法
HuaweiIdAuthManager.getAuthApi().getSignInIntent(signInOption).then((result)=>{
// 登录成功,获取用户的华为帐号信息
console.info("signIn success");
console.info(JSON.stringify(result));
console.info("ID Token:" + result.getIdToken());
this.signInResult = "signIn success: " + JSON.stringify(result);
}).catch((error)=>{
//登录失败
console.error("signIn fail");
console.error(JSON.stringify(error));
this.signInResult = "signIn fail: " + JSON.stringify(error);
});
帐号还支持使用Authorization Code授权登录。适用于拥有Server端的应用授权。
import {HuaweiIdAuthParamsHelper, HuaweiIdAuthManager} from '@hmscore/hms-jsb-account';
// 构造参数
var signInOption = new HuaweiIdAuthParamsHelper().setAuthorizationCode().setProfile().build();
// HuaweiIdAuthManager.getAuthApi方法返回huaweiIdAuth对象,调用huaweiIdAuth.getSignInIntent方法
HuaweiIdAuthManager.getAuthApi().getSignInIntent(signInOption).then((result)=>{
// 登录成功,获取用户的华为帐号信息
console.info("signIn success");
console.info(JSON.stringify(result));
console.info("昵称:" + result.getDisplayName());
console.info("头像url:" + result.getAvatarUri());
this.signInResult = "signIn success: " + JSON.stringify(result);
}).catch((error)=>{
//登录失败
console.error("signIn fail");
console.error(JSON.stringify(error));
this.signInResult = "signIn fail: " + JSON.stringify(error);
});
返回样例
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "CFyJ21sNODl16eV9y2vu3CwQk9DBr32BkOcxxgAd7MZUR5th1giyTk5\/kA+QDAyxou+\/5U2zzBRcf3qgLkkFdtbbC+mM3zFV7xj7CCEMHc5Tw92al0Y=",
"refresh_token": "CF13G0sRaGybtYt7SIyeUILNORtTFwMgz4ao5C7j7vtgLPt6ogmXKjdI8RS\/YlyS71z4DyP6kEMnOrRlmNK0KhdOUNWd+qVLLRsEEHkqRIKpuAkPvL8=",
"expires_in": 3600,
"id_token": "eyJraWQiOiI3YTNlYjRkNTJmMDdhODM0NDU4MmRhOGQ3MWE1MGQ5MDlmNWM0YmRiZTFkNDQ3MjQ2MDNhZTA2NGM0ZTlkZGYyIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjoiM0hPdFZYOEdMcG1GSDBWRVlSc1BjdyIsImF1ZCI6IjEwMDczNTE2NyIsInN1YiI6Ik1ERTlYaWFoc3MwaWFFNXU2c09PaEY5Mlhvell0Rkt4bUdtbWlhNGtTaEJ3dklLR2ciLCJhenAiOiIxMDA3MzUxNjciLCJpc3MiOiJodHRwczovL2FjY291bnRzLmh1YXdlaS5jb20iLCJuYW1lIjoi6Jab5oyv5Y2OIiwiZXhwIjoxNTczMDQ2NDI4LCJnaXZlbl9uYW1lIjoi6Jab5oyv5Y2OIiwiZGlzcGxheV9uYW1lIjoi5rKh5pyJ562U5qGIIiwiaWF0IjoxNTczMDQyODI4LCJwaWN0dXJlIjoiaHR0cHM6Ly91cGZpbGUtZHJjbi5wbGF0Zm9ybS5oaWNsb3VkLmNvbS9GaWxlU2VydmVyL2ltYWdlL2IuMDI2MDA4NjAwMDIzMjQ3MjUxMS4yMDE5MDgyMDExNTQ0Mi5tbmRjWTZyN2JUT0xNcVdiNVBhZDIzZExWNXh0b1Z2WC4xMDAwLkI0QkUyQTdEM0I3NkFGMzBCMkJDNjlBQ0JFNjg3NDIxMTQwMjhEQzYwREZFOTVCMjM5QkI0QzM2OUQwOUVEMkEuanBnIn0.mqy2C3ZNYEM8FKt8r1LX0VFosJjpqVl7E7mw2N-uEhnmAJq3blBco8fp2TCEyUzi1qFMN7-cjv87mQqCEpgfozyU7xV0VXMGdcd9ZhOxtabZtQGxUXRpIPiK5iysp68d95_QJAf2YZIdA4P_1zU8ZGxH57njIXRUVdQWDB8poeuB9gOc72bufe3DmSkqYD9aKvcibpA44Iln58aj-I9xs-FpcDwE6Y9hTfLGT5vk_5hXs32qwt54kEH1JjKbzZRW7B-OaELJIzzOM49oZKrdkViG6c2Tco1xX1WcKSz298Wckj4suLBAqkam4AprQgoSETC__ORTfy9OHIS1m4_8uQ",
"scope": "openid profile email",
"token_type": "Bearer"
}
POST /oauth2/v3/token HTTP/1.1
Host: oauth-login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&
client_id=12345&
client_secret=bKaZ0VE3EYrXaXCdCe3d2k9few&
refresh_token=CF2Mm03n0aos9iZZ8nIhfyDtoXy74CXeBi50gVVhMpB0IUzlv9ZwizEvTBhVoF820ZPim0JwNR9j2p1qgEQWnIVYZRlp4T6ezMgekUnsHBkvNev5rd2MdfQMLP
返回样例
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "CFyJ4J\/l6wuwcFqYOJG4maq2ca8RAV+g0i+mel6qCV5lvqH0PYtW0+BNwfHWg0AqMnW6ZdBvUgs7ijkxMFh1xVP\/B+vQXz3PWsivkKCuL78XtbLt7vs=",
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjExOGRmMjU0YjgzNzE4OWQxYmMyYmU5NjUwYTgyMTEyYzAwZGY1YTQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI3ODI0NTY2Njc4OTgtc2M0MzE3Y2l0NGEwMjB0NzdrbGdsbWo1ZjA4YWtnMWIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI3ODI0NTY2Njc4OTgtN2NkNGJpYWRkaGVwNGc4cnZic2VlOGtwcDA5Zm1hNzIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMDE3MTIxMzkwMzgwNDE2MDc0MTQiLCJlbWFpbCI6Inh1ZXpoZW5odWF0anVAc2luYS5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicGljdHVyZSI6Imh0dHBzOi8vbGg1Lmdvb2dsZXVzZXJjb250ZW50LmNvbS8tMm9lTTllT09zNTAvQUFBQUFBQUFBQUkvQUFBQUFBQUFBQkkvMVpOSC0xdmxxc3cvczk2LWMvcGhvdG8uanBnIiwiaWF0IjoxNTYxNDUxMTUyLCJleHAiOjE1NjE0NTQ3NTJ9.Eo9IHMkid596jvt1YYzNsRtDq9c9K9dbougkU41Noh7TXNiko86_RuWwHID6k1kDg398AwC3wwH-t2hLcUjgrXPNd9XYU96Jp4-UxdDszP6ywEJgvvBCyTHzsi2auvKt_MnfSrs3qOKfh7noJvXq8AY-Hi3vqSUks5kGqbZKVzCHhBDO3RD9Fs9YHsB6w0XVKZojPOBDaAT_TiijoChn-Q-e8NbSGUx52OgeH-Nw5lOj6JVb_7fb6ucWRzlhiQuzFjklevLVw2pjw1MxKbl1vfRp0X699uZBVjgl9hj1L7LSDObuPzLiXF7ojji5JKYC6zIwAtZQUZ_VUmSk01GDLQ",
"expires_in": 3600,
"scope": "openid profile email",
"token_type": "Bearer"
}
import {HuaweiIdAuthParamsHelper, HuaweiIdAuthManager} from '@hmscore/hms-jsb-account';
// 构造参数
var signInOption = new HuaweiIdAuthParamsHelper().setAuthorizationCode().setAccessToken().setIdToken().setId().setProfile().build();
// HuaweiIdAuthManager.getAuthApi方法返回huaweiIdAuth对象,调用huaweiIdAuth.silentSignIn方法
HuaweiIdAuthManager.getAuthApi().silentSignIn(signInOption).then((result)=>{
//登录成功,获取用户的华为帐号信息
console.info("signIn success");
console.info("昵称:" + result.getDisplayName());
console.info("头像url:" + result.getAvatarUri());
console.info(JSON.stringify(result));
}).catch((error)=>{
//登录失败
console.error("signIn fail");
console.error(JSON.stringify(error));
});
调用HuaweiIdAuthManager.getAuthApi().signOut方法向华为帐号SDK请求退出华为帐号。
import {HuaweiIdAuthManager} from '@hmscore/hms-jsb-account';
// HuaweiIdAuthManager.getAuthApi方法返回huaweiIdAuth对象,调用huaweiIdAuth.signOut方法
HuaweiIdAuthManager.getAuthApi().signOut().then((result)=>{
//帐号退出成功
console.info("signOut success");
console.info(JSON.stringify(result));
this.signOutResult = "signOut success: " + JSON.stringify(result);
}).catch((error) => {
//帐号退出失败
console.error("signout fail");
console.error(JSON.stringify(error));
this.signOutResult = "signOut fail: " + JSON.stringify(error);
});
import {HuaweiIdAuthManager} from '@hmscore/hms-jsb-account';
// HuaweiIdAuthManager.getAuthApi方法返回huaweiIdAuth对象,调用huaweiIdAuth.cancelAuthorization方法
HuaweiIdAuthManager.getAuthApi().cancelAuthorization(signInOption).then((result)=>{
//帐号取消授权成功
console.info("cancelAuthorization success");
console.info(JSON.stringify(result));
this.signOutResult = "signOut success: " + JSON.stringify(result);
}).catch((error) => {
//帐号取消授权失败
console.error("cancelAuthorization fail");
console.error(JSON.stringify(error));
this.signOutResult = "signOut fail: " + JSON.stringify(error);
});
开发完成后,点击图标,运行HUAWEI DevEco Studio工程打包生成HAP,并安装在测试手机上。运行界面如下图所示:
干得好,您已经成功完成了codelab并学到了:
帐号服务相关API介绍
您可以点击下方按钮下载源码。