AccountKit
目标
使用AccountKit提供的服务,获取华为账户的基本信息
步骤
- 在华为AppGallery中创建项目和应用,安装HMS Tookit
- 在Android本地创建与AppGallery中对应的应用程序,并签名,使用HMSToolkit集成AccountKit
- 设置布局界面,创建三个按钮:华为账户认证,登出,取消授权
- 编写授权事件代码,完成功能验证
实现
1. 创建项目和应用,开启AccountKit权限
创建项目
华为的AppGallery是应用程序的橱窗,需要在华为应用市场上上架应用,必须在其上创建项目和应用。上架应用的包名需要和AppGallery中申明的包名一致。
创建应用
安装HMS Tookit
2. 在Android本地创建与AppGallery中对应的应用程序,并签名
签名
点击菜单Build->Generate Signed Bundle/APK,在打开的对话框中选择apk。在Generate Signed Bundle or APK对话框中选择Create New…创建新的app key file。请记住你创建的签名文件的位置和名字。后面的配置需要是应用。
使用HMSToolkit集成AccountKit
HMSToolKit为开发者提供了快速继承各种HMS Kit的途径。选择HMS->Configuration Wizard。这时会弹出一个授权页面,因为HMSKit需要获取开发者在AppGallery中所创建的项目和应用的信息,因此需要输入华为开发者账户的用户名和密码,完成登录授权。授权完成后关闭网页。这时就可以看到Configuration Wizard的窗口,如下图所示。点击Add Kit 继承AccountKit项目中。
选择签名文件, 输入密码,密钥别名,密钥密码,然后点击Generate,生成项目签名。点击下一步,就可以看到集成完成了。
3.设置布局界面,创建三个按钮:华为账户认证,登出,取消授权
布局和事件代码
在Activity的布局文件中创建布局,使用华为账户按钮,提示用使用华为认证授权登录。为他们添加事件代码
布局文件:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="10dp"
tools:context=".MainActivity">
<com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton
android:id="@+id/btnHuaweiIdAuthButton"
android:layout_width="match_parent"
android:layout_margin="10dp"
android:layout_height="wrap_content"></com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton>
<Button
android:id="@+id/btnSingOut"
android:text="登出"
android:layout_width="match_parent"
android:layout_margin="10dp"
android:layout_height="wrap_content"></Button>
<Button
android:id="@+id/btnUnAuth"
android:layout_margin="10dp"
android:text="取消授权"
android:layout_width="match_parent"
android:layout_height="wrap_content"></Button>
</LinearLayout>
package com.hnevc.myaccountdemo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private HuaweiIdAuthButton btnHuaweiIdAuthButton;
private Button btnSingOut;
private Button btnUnAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
btnHuaweiIdAuthButton = (HuaweiIdAuthButton) findViewById(R.id.btnHuaweiIdAuthButton);
btnSingOut = (Button) findViewById(R.id.btnSingOut);
btnUnAuth = (Button) findViewById(R.id.btnUnAuth);
btnHuaweiIdAuthButton.setOnClickListener(this);
btnSingOut.setOnClickListener(this);
btnUnAuth.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnHuaweiIdAuthButton:
break;
case R.id.btnSingOut:
break;
case R.id.btnUnAuth:
break;
}
}
}
认证
认证主要使用HuaweiIdAuthService类的getSignInIntent()方法调起授权界面。其中AccountService类的对象,需要通过HuaweiIdAuthManager来创建,在创建过程中需要HuaweiIdAuthParams对象来设置认证的参数信息。而HuaweiIdAuthParams可以通过HuaweiIdAuthParamsHelper来构建。
HuaweiIdAuthParams params
= new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
.createParams();
HuaweiIdAuthService service = HuaweiIdAuthManager.getService(this, params);
Intent signInIntent = service.getSignInIntent();
startActivityForResult(signInIntent, 8888);
在回调方法中可以获取华为账户的信息。使用HuaweiIdAuthManager解析返回的数据为Task类型对象,然后通过getResult()方法获取华为账户信息,通过getXxx()获取账户的具体信息,比如名字,头像等。
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 8888){
Task<AuthHuaweiId> authHuaweiIdTask = HuaweiIdAuthManager.parseAuthResultFromIntent(data);
AuthHuaweiId result = authHuaweiIdTask.getResult();
Log.e("TAG", "onActivityResult: "+result.getDisplayName() );
Log.e("TAG", "onActivityResult: "+result.getAvatarUriString() );
Log.e("TAG", "onActivityResult: "+result.getOpenId() );
}
}
在用户授权后可以在日志信息中看到输入的账户信息
以上的代码可以通过AccountKit中Codeing Assistant中找到样例
登出
登出调用HuaweiIdAuthService的signOut方法即可,把service提升为成员变量,然后调用signOut方法完成。
service.signOut();
取消授权
取消授权调用service.cancelAuthorization();即可
service.cancelAuthorization();
小结
主要使用HuaweiIdAuthService,HuaweiIdAuthManager,HuaweiIdAuthParamsHelper,HuaweiIdAuthParams四个类完成。