借助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. P4173-残缺的字符串【FFT】

    正题 题目链接:https://www.luogu.com.cn/problem/P4173 题目大意 给出两个字符串\(S,T\),其中包含小写字母和一些\(?\),\(?\)可以匹配任何字符. 求 ...

  2. 13万字详细分析JDK中Stream的实现原理

    前提 Stream是JDK1.8中首次引入的,距今已经过去了接近8年时间(JDK1.8正式版是2013年底发布的).Stream的引入一方面极大地简化了某些开发场景,另一方面也可能降低了编码的可读性( ...

  3. [洛谷日报#204] StackEdit——Markdown 编辑器的功能介绍

    本文同时发表于洛谷日报,您也可以通过洛谷博客进行查看. 1.介绍与开始使用 1.1 这是什么? StackEdit是基于PageDown.Stack Overflow和其他堆栈交换站点使用的Markd ...

  4. 纯净Ubuntu16安装CUDA(9.1)和cuDNN

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. 开启Nginx代理HTTPS功能

    1.首先查看是否已经安装SSL openssl version -a 2.生成SSL证书 在nginx目录下创建ssl文件夹 cd /etc/pki mkdir nginx cd nginx 生成20 ...

  6. Spring Boot 如何热加载jar实现动态插件?

    一.背景 动态插件化编程是一件很酷的事情,能实现业务功能的 解耦 便于维护,另外也可以提升 可扩展性 随时可以在不停服务器的情况下扩展功能,也具有非常好的 开放性 除了自己的研发人员可以开发功能之外, ...

  7. Netty 了解

    1.1 Netty 是什么? Netty is an asynchronous event-driven network application framework for rapid develop ...

  8. 脚本注入2(post)

    终于写到非get类型的注入了. 不过,我懒得在这里搞代码审计了:留到存储型XSS原型的时候再来分析源码吧. 这次以Less-15为例. 框里随便输点东西,submit,抓包,发现包出现了一些改变: 同 ...

  9. 【Java虚拟机8】自定义类加载器、类加载器命名空间、类的卸载

    前言 学习类加载器就一定要自己实现一个类加载器,今天就从一个简单的自定义类加载器说起. 自定义类加载器 例1 一个简单的类加载器,从一个给定的二进制名字读取一个字节码文件的内容,然后生成对应的clas ...

  10. MAC 安装 apache ab 压力测试工具以及遇到的坑

    ab 是apache对 http服务器进行压力测试的工具,它可以测试出服务器每秒可以处理多少请求.本文记录mac版本安装 ab 的步骤以及遇到的坑. 下载 进入 apache ab官网 下载页面. 安 ...