如何快速集成Android版Serverless认证服务-手机号码篇

Posted 华为开发者论坛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何快速集成Android版Serverless认证服务-手机号码篇相关的知识,希望对你有一定的参考价值。

大部分的应用都需要对用户的业务访问进行身份认证,以便为用户提供个性化体验。但是端到端完整构建一套用户认证系统会面临很多挑战。认证服务可以为应用快速构建安全可靠的用户认证系统,开发者只需在应用中访问认证服务的相关能力,而不需要关心云侧的设施和实现。今天就来教大家如何快速集成AGConnect的认证服务中的手机号码认证方式。

1、在AGC上开通认证服务并启用手机号码认证方式:

我的项目 下选择你的开发项目,在构建下面,找到认证服务服务,点击开通:

没有android项目的话,可以先自己创建一个。开通认证服务后,我们可以看到一列认证方式,找到手机号码认证方式,点击右侧的启用按钮将认证服务启用。

如何快速集成Android版Serverless认证服务-手机号码篇_ide

2、在Android项目里集成SDK

a) 集成SDK

1、在项目级的gradle文件中添加华为Maven,即配置下面标红的内容

buildscript 
repositories
google()
jcenter()
maven url https://developer.huawei.com/repo/

dependencies
classpath com.android.tools.build:gradle:4.0.1
classpath com.huawei.agconnect:agcp:1.5.2.300



allprojects
repositories
google()
jcenter()
maven url https://developer.huawei.com/repo/



task clean(type: Delete)
delete rootProject.buildDir

2、打开应用级的build.gradle文件,配置好华为认证服务的SDK,配置下面标红的内容即可。  注意别落了上面的agcp插件

apply plugin: com.android.application
apply plugin: com.huawei.agconnect
android ..

dependencies
implementation fileTree(include: [*.jar], dir: libs)
implementation androidx.appcompat:appcompat:1.1.0
implementation androidx.constraintlayout:constraintlayout:1.1.3
testImplementation junit:junit:4.12
androidTestImplementation androidx.test.ext:junit:1.1.1
androidTestImplementation androidx.test.espresso:espresso-core:3.2.0

implementation com.huawei.agconnect:agconnect-auth:1.5.2.300

b) 下载json文件,并且配置默认存储实例

1、在AGC界面上,选择 我的项目 -> 项目设置–> 常规 下面,下载agconnect-services.json文件到你的Android项目的app路径下。

如何快速集成Android版Serverless认证服务-手机号码篇_ide_02

3、功能开发:

对于手机号码认证,认证服务SDK提供了两个阶段的操作,一个是注册,另一个是登录。这两个操作都需要用到获取短信验证码的功能,所以认证服务SDK也提供了发送验证码的功能:

  1. 发送验证码的步骤如下:
VerifyCodeSettings settings = VerifyCodeSettings.newBuilder()

.action(VerifyCodeSettings.ACTION_REGISTER_LOGIN)

.sendInterval(30) //shortest send interval ,30-120s

.locale(Locale.SIMPLIFIED_CHINESE) //optional,must contain country and language eg:zh_CN

.build();

首先我们需要创建一个VerifyCodeSettings对象,里面包含了发送短信的相关设置,包括action,语言等

读取用户输入的国家码与手机号,调用RequestVerifyCode方法向认证服务服务器请求发送验证码,传入国家码,手机号以及刚刚我们创建的setting对象

String countCode = countryCode.getText().toString().trim();

String phoneNumber = phoneNumeber.getText().toString().trim();
if (notEmptyString(countCode) && notEmptyString(phoneNumber))
Task<VerifyCodeResult> task = PhoneAuthProvider.requestVerifyCode(countCode, phoneNumber, settings);
task.addOnSuccessListener(TaskExecutors.uiThread(), new OnSuccessListener<VerifyCodeResult>()
@Override
public void onSuccess(VerifyCodeResult verifyCodeResult)
Toast.makeText(MainActivity.this, "verify code has been sent.", Toast.LENGTH_SHORT).show();

).addOnFailureListener(TaskExecutors.uiThread(), new OnFailureListener()
@Override
public void onFailure(Exception e)
Toast.makeText(MainActivity.this, "Send verify code failed.", Toast.LENGTH_SHORT).show();
Log.e(TAG, "requestVerifyCode fail:" + e);

);
else
Toast.makeText(MainActivity.this, "Please enter the phone number and country code", Toast.LENGTH_SHORT).show();

     2. 用户获取验证码后就可以开始注册流程了

首先我们需要读取用户的输入并构建一个PhoneUser对象,里面存放了手机用户的相关信息,包括手机号,国家码,验证码和密码。这里用户在创建的时候可以选择是否设置密码,如果设置则后续在登录的时候就需要输入密码。PhoneUser创建成功后我们就可以调用CreateUser方法创建用户了

PhoneUser phoneUser = new PhoneUser.Builder()
.setCountryCode(countryCode)
.setPhoneNumber(accountNumber)
.setVerifyCode(verifyCode)
.setPassword(password)
.build();
AGConnectAuth.getInstance().createUser(phoneUser).addOnSuccessListener(signInResult ->
String phoneNumber = signInResult.getUser().getPhone();
String uid = signInResult.getUser().getUid();

Bundle data = new Bundle();
data.putString("phone", phoneNumber);
data.putString("uid", uid);
Intent intent = new Intent(RegisterActivity.this, ImageListActivity.class);
intent.putExtras(data);
startActivity(intent);
finish();
).addOnFailureListener(e ->
Log.e(TAG, "register error, " + e);
ToastUtils.showToast(RegisterActivity.this, "Register failed. "+e.getMessage());
);

用户创建完成后,SDK会自动为用户进行登录,无需再调用登录接口了

       3. 对于非首次使用的用户,我们就需要进行登录操作了,基于之前注册时的设置,登录分为两种,验证码登录和密码登录,如果是密码登录,我们调用的是CredentialwithPassword来创建一个credential,而验证码登录则是使用CredentialWithVerifyCode来创建credential。而后我们调用SignIn方法传入这个credential进行登录的操作。这里给大家展示一下验证码登录的示例

private void phoneLogin(String phoneAccount, String photoPassword) 
String countryCode = "86";
AGConnectAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode(
countryCode,
phoneAccount,
photoPassword,
null ); // password, can be null
AGConnectAuth.getInstance().signIn(credential).addOnSuccessListener(signInResult ->
String phoneNumber = signInResult.getUser().getPhone();
String uid = signInResult.getUser().getUid();
signInResult.getUser().getToken(true).addOnSuccessListener(new OnSuccessListener<TokenResult>()

@Override
public void onSuccess(TokenResult tokenResult)
String token = tokenResult.getToken();
Log.i("getToken", token);

);

如何使用 CocoaPods 将智能生活 App SDK iOS 版快速集成到项目中

智能生活 App 垂直品类- IPC SDK 架构及快速集成配置(安卓版)

如何快速开发 Serverless Devs Package ?

Android | 教你如何快速集成机器学习能力

AGC如何快速部署Serverless Url缩短模板

Serverless 的初心现状和未来