借助AppGallery Connect(以下简称AGC)的认证服务,云函数,短信服务等服务,当用户注册成功后,便可以在注册的手机号或者邮箱地址中收到一条应用的欢迎短信或者欢迎邮件。以便让开发者更快地融入到应用中并第一时间知晓应用的热点内容。

实现流程

接入认证服务手机号码和邮箱认证方式

首先我们需要通过接入认证服务来打造应用的帐号系统。

启用认证服务

1、登录AppGallery Connect网站,点击“我的项目”。

2、在项目列表中点击您的项目。选择“构建 > 认证服务”,

3、进入认证服务页面,完成如下操作:

a. 开通认证服务

b. 启用手机号码和邮箱地址认证方式

开发手机号码认证方式

由于邮箱地址认证方式与手机号码认证方式的开发过程高度相似,我们这里就举手机号码认证方式为例。

1、首先我们需要调用sendVerifyCode方法获取验证码用于注册:

public void sendPhoneVerify(String accountNumber) {
String countryCode = "86";
VerifyCodeSettings settings = VerifyCodeSettings.newBuilder()
.action(VerifyCodeSettings.ACTION_REGISTER_LOGIN)
.sendInterval(30)
.locale(Locale.SIMPLIFIED_CHINESE)
.build();
if (notEmptyString(countryCode) && notEmptyString(accountNumber)) {
Task<VerifyCodeResult> task = PhoneAuthProvider.requestVerifyCode(countryCode, accountNumber, settings);
task.addOnSuccessListener(TaskExecutors.uiThread(), verifyCodeResult -> {
mAuthReCallBack.onSendVerify(verifyCodeResult);
}).addOnFailureListener(TaskExecutors.uiThread(), e -> {
Log.e(TAG, "requestVerifyCode fail:" + e.getMessage());
mAuthReCallBack.onFailed(e.getMessage());
});
} else {
Log.w(TAG, "info empty");
}
}

2、而后我们调用createUser方法进行用户注册

public void registerPhoneUser(String accountNumber, String verifyCode, String password) {
String countryCode = "86";
PhoneUser phoneUser = new PhoneUser.Builder()
.setCountryCode(countryCode)
.setPhoneNumber(accountNumber)
.setVerifyCode(verifyCode)
.setPassword(password)
.build();
AGConnectAuth.getInstance().createUser(phoneUser)
.addOnSuccessListener(signInResult -> {
mAuthReCallBack.onAuthSuccess(signInResult, 11);
}).addOnFailureListener(e -> {
mAuthReCallBack.onFailed(e.getMessage());
});
}

3、对于已注册过的用户我们就可以调用signin方法进行登录操作

public void phoneLogin(String phoneAccount, String photoPassword) {
String countryCode = "86";
AGConnectAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode(
countryCode,
phoneAccount,
photoPassword,
null);
AGConnectAuth.getInstance().signIn(credential).addOnSuccessListener(signInResult -> {
Log.i(TAG, "phoneLogin success");
mAuthLoginCallBack.onAuthSuccess(signInResult, 11);
signInResult.getUser().getToken(true).addOnSuccessListener(tokenResult -> {
String token = tokenResult.getToken();
Log.i(TAG, "getToken success:" + token);
mAuthLoginCallBack.onAuthToken(token);
});
}).addOnFailureListener(e -> {
Log.e(TAG, "Login failed: " + e.getMessage());
mAuthLoginCallBack.onAuthFailed(e.getMessage());
});
}

在云函数中设置认证服务注册成功触发器

上述操作完成后,您需在云函数中配置认证服务触发器。

1、登录AppGallery Connect网站,点击“我的项目”。

2、在项目列表中点击您的项目。选择“构建 > 云函数”,进入云函数页面,完成如下操作:

a. 启用云函数服务

b. 创建发送欢迎短信的函数(下一章节详细介绍)

c. 将发送欢迎短信的函数上传至云函数

d. 创建认证服务触发器:事件名称选择“用户注册”。

云函数中调用短信服务接口发送短信

在用户注册成功后需要对用户发送欢迎短信,此处短信我们使用AGC提供的短信服务发送。

开通短信服务并设置短信模板

登录AppGallery Connect网站,点击“我的项目”。

1、在项目列表中点击您的项目。

2、选择“增长 > 短信服务”,进入短信服务页面,完成如下操作:

a. 开通短信服务

b. 配置短信签名

c. 配置短信模板

d. 启用API调用

云函数调用短信服务Rest Api接口发送短信

1、通过触发器获取用户的手机号码及用户信息

var phoneNumber = event.phone.slice(4);
var userID = event.uid;
var userName = "认证用户ID" + phoneNumber.slice(11);

2、调用短信服务Rest Api发送短信

var requestData = {
"account": "AGC199",
"password":"Huawei1234567890!",
"requestLists": [
{
"mobiles":["" + phoneNumber],
"templateId":"SMS02_21090100001",
"messageId":"12345",
"signature":"【PhotoPlaza】"
}
],
"requestId": "" + curTime
};
logger.info("requestData: " + JSON.stringify(requestData)); var options = {
hostname: '121.37.23.38',
port: 18312,
path: '/common/sms/sendTemplateMessage',
method: 'POST',
headers: {
'Content-Type' : 'application/json'
},
rejectUnauthorized: false,
requestCert: false
}; var req = https.request(options, function(res) {
res.on('data', function(data) {
var response = JSON.parse(data.toString());
logger.info('All resultList: ' + JSON.stringify(response.resultLists));
}); res.on('end', function(){
logger.info('RequestResult: success');
let result = {"message":"Send Message Success"};
callback(result);
}); res.on('error', function(e) {
logger.info('request error, ' + e.message);
let result = {"message":"error:" + e.message}
callback(result);
});
}); req.on('error', function(error) {
logger.info('request error, ' + error.message);
let result = {"message":"error:" + e.message}
callback(result);
}); req.write(JSON.stringify(requestData));
req.end();

参考文档:

认证服务手机帐号注册:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-auth-android-phone-0000001053333941#section16952720551

云函数用户注册触发器:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudfunction-authtrigger-0000001127374643

短信服务开发指南:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-sms-getstarted-0000001072728865

更多精彩内容,请见华为开发者官方论坛→https://developer.huawei.com/consumer/cn/forum/home?ha_source=sanfang

AppGallery Connect场景化开发实战—注册订阅通知的更多相关文章

  1. AI应用开发实战 - 定制化视觉服务的使用

    AI应用开发实战 - 定制化视觉服务的使用 本篇教程的目标是学会使用定制化视觉服务,并能在UWP应用中集成定制化视觉服务模型. 前一篇:AI应用开发实战 - 手写识别应用入门 建议和反馈,请发送到 h ...

  2. Webpack+Vue+ES6 前端组件化开发mobile-multi-page应用实战总结

    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.写在前面 项目上线有一段时间了,一个基于webpack+vue+ES6的手机端多页面应用 ...

  3. 前端笔记之JavaScript面向对象(四)组件化开发&轮播图|俄罗斯方块实战

    一.组件化开发 1.1组件化概述 页面特效的制作,特别需要HTML.CSS有固定的布局,所以说现在越来越流行组件开发的模式,就是用JS写一个类,当你实例化这个类的时候,页面上的效果布局也能自动完成. ...

  4. Android项目实战(四十八):架构之组件化开发

    什么要组件化开发? 看一下普通项目的结构 , 一个项目下有多个Module(左侧图黑体目录),但是只有一个application,0个或多个library(在每个medel下的build.gradle ...

  5. Webpack+Vue+ES6 前端组件化开发mobile-multi-page应用实战总结和踩坑

    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.写在前面 项目上线有一段时间了,一个基于webpack+vue+ES6的手机端多页面应用 ...

  6. webpack4.5.0+vue2.5.16+vue-loader 实战组件化开发案例以及版本问题中踩的一些大坑!!!

    一 vue-loader 我们先不管脚手架,只说vue-loader,简单讲就是可将.vue文件打包,实现组件化开发,即一个.vue文件就是一个组件,开发中只需要引入这个.vue组件就可以了! 然后. ...

  7. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...

  8. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  9. 《Python开发实战》

    <Python开发实战> 基本信息 作者: (日)BePROUD股份有限公司 译者: 盛荣 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115320896 上架时 ...

随机推荐

  1. CF5E-Bindian Signalizing【单调栈】

    正题 题目链接:https://www.luogu.com.cn/problem/CF5E 题目大意 圆上有\(n\)个山,两个山之间可以看到当且仅当它们之间的两条弧中有一条满足所有山都不高于它们两个 ...

  2. YbtOJ#791-子集最值【三维偏序】

    正题 题目链接:http://www.ybtoj.com.cn/contest/123/problem/1 题目大意 给出\(3\)个长度为\(n\)的排列\(A,B,C\).然后一个下标集合\(S\ ...

  3. Social Networ

    http://hansheng.xiong99.com.cn/ Paper:Dynamic Networks in Large Financial and Economic Systems

  4. 使用Stargate访问K8ssandra,Springboot整合Cassandra

    1 简介 之前我们在文章<K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes>成功地在Ubuntu上安装了K8ssandra,现在我们来看看如何访问 ...

  5. c++ fstream feekg讨论

    #include <iostream> #include <fstream> using namespace std; int main() { std::ifstream f ...

  6. nGrinder 参数使用

    背景: 性能测试中为了更加接近真实模拟现实应用,对于提交的信息每次都需要提交不同的数据,或使用不同的值,最为典型的就是登录时的账号. 性能测试工具需要提供动态参数化功能,如商业化的LoadRunner ...

  7. 时序数据库InfluxDB的基本语法

    一 了解InfluxDB的必要性 时序数据库主要存放的数据 Time series data is a series of data points each associated with a spe ...

  8. dubbo-admin的使用

    目录 了解 dubbo-admin 下载 dubbo-admin 使用 dubbo-admin 1.dubbo-admin是什么 dubbo-admin是一个监控程序,可以通过web很方便的管理监控众 ...

  9. Hive SQL的底层编译过程详解

    本文结构采用宏观着眼,微观入手,从整体到细节的方式剖析 Hive SQL 底层原理.第一节先介绍 Hive 底层的整体执行流程,然后第二节介绍执行流程中的 SQL 编译成 MapReduce 的过程, ...

  10. verilog specify

    specify block用来描述从源点(source:input/inout port)到终点(destination:output/inout port)的路径延时(path delay),由sp ...