业务场景

当用户打开应用时,系统发送Push消息给用户,向用户推荐博主信息。用户关注博主后,将保存用户的订阅信息,当关注的博主更新内容时,向订阅的用户发送短信,提醒用户及时查看最新内容。从而持续增强了用户的互动性。

向用户发送Push消息

1.在应用中集成推送服务。

2.接收透传的Push消息。

3.在AndroidManifest.xml配置PushService,用于接收通知消息。

<serviceandroid:name=".ui.PushService"android:exported="false"><intent-filter><action android:name="com.huawei.push.action.MESSAGING_EVENT" /></intent-filter></service><meta-dataandroid:name="push_kit_auto_init_enabled"android:value="true" /

4. PushService继承自HmsMessageService,处理接收到的消息后, 使用自定义通知显示消息。

private void processWithin10s(RemoteMessage message) {if (!TextUtils.isEmpty(message.getData())) {      JSONObject object = new JSONObject(message.getData());String title = object.optString("title") + "";String content = object.optString("content") + "";String articleId = object.optString("articleId") + "";String authorId = object.optString("authorId") + "";NotificationUtils.sendNotify(this, title, content, articleId, authorId); }

使用云数据库存储信息

1.开通云数据库服务。

2.新增和导出对象类型。新增Author、Article、SubscriptionRecord表,具体字段请下载Demo参考对应类名的实体类。

3.新增存储区。

4.集成云数据库SDK。

5.初始化云数据库。

public static void initAGConnectCloudDB(Context context) {
AGConnectCloudDB.AGConnectCloudDB.initialize(context);
}

6.调用getInstance(AGConnectInstance connectInstance, AGConnectAuth auth)方法获取对应数据处理位置的AGConnectCloudDB实例,并使用createObjectType创建对象类型。

mCloudDB = AGConnectCloudDB.getInstance(AGConnectInstance.getInstance(), AGConnectAuth.getInstance());
mCloudDB.createObjectType(ObjectTypeInfoHelper.getObjectTypeInfo());

7.创建Cloud DB zone配置对象,并打开该Cloud DB zone(以Cloud DB zone的同步属性为缓存模式、访问属性为公共存储区为例),详细请参考CloudDBZoneConfig。

public void openCloudDBZoneV2() {mConfig = new CloudDBZoneConfig(ZONE_NAME,CloudDBZoneConfig.CloudDBZoneSyncProperty.CLOUDDBZONE_CLOUD_CACHE,
CloudDBZoneConfig.CloudDBZoneAccessProperty.CLOUDDBZONE_PUBLIC);
mConfig.setPersistenceEnabled(true);
Task<CloudDBZone> openDBZoneTask = mCloudDB.openCloudDBZone2(mConfig, true);
openDBZoneTask.addOnSuccessListener(cloudDBZone -> {
mCloudDBZone = cloudDBZone;
addSubscription();}).addOnFailureListener(e -> {
callBack.onPhotoErrorMessage("OpenCloudDBZone Failed: " + e.getMessage());});}

8.插入更新数据,用于存储新增或者修改的文章信息。

public void upsertArticle(Article article) {
Task<Integer> upsertTask = mCloudDBZone.executeUpsert(article);
upsertTask.addOnSuccessListener(cloudDBZoneResult -> {
ArrayList<Article> articles = new ArrayList<>();
articles.add(article);
callBack.onUpdate(articles);
}).addOnFailureListener(e -> callBack.onPhotoErrorMessage("upsert Error: " + e.getMessage()));}

9.查询数据,用于查询所有文章信息。

public void queryAll() {
Task<CloudDBZoneSnapshot<Article>> queryTask = mCloudDBZone.executeQuery(
CloudDBZoneQuery.where(Article.class),
CloudDBZoneQuery.CloudDBZoneQueryPolicy.POLICY_QUERY_FROM_CLOUD_ONLY);
queryTask.addOnSuccessListener(snapshot -> {
processQueryResult(snapshot);
}).addOnFailureListener(e -> {
callBack.onPhotoErrorMessage("queryAll Error: " + e.getMessage());});}

触发记录用户的订阅信息

1.开通云函数服务。

2.本地编辑和打包操作云数据库的相关函数。

a.项目中引入AGC云数据库相关模块,并初始化认证信息。

const agconnect = require('@agconnect/common-server');
const clouddb = require('@agconnect/database-server/dist/index.js');
const SubscriptionRecord = require('./model/SubscriptionRecord.js');
let api_client_name = "./model/agc-apiclient-test.json";
let path = require('path');
let api_client_path = path.join(__dirname, api_client_name);
agconnect.AGCClient.initialize(agconnect.CredentialParser.toCredential(api_client_path));
let body = JSON.parse(event.body);//接收http触发器请求参数

b.初始化云数据库

try {
const agcClient = agconnect.AGCClient.getInstance();
clouddb.AGConnectCloudDB.initialize(agcClient);
const agconnectCloudDB = clouddb.AGConnectCloudDB.getInstance(agcClient);
const cloudDBZoneConfig = new clouddb.CloudDBZoneConfig('ArticleZone');
cloudDBZoneClient = agconnectCloudDB.openCloudDBZone(cloudDBZoneConfig);
let result = { "message": "openCloudDBZone success" };
logger.info(result);
} catch (error) {
let result = { "initDB message": error.message };
logger.info(result);
callback(result);
}

c.插入用户订阅信息到云数据库,用于存储用户订阅信息。

async function upsertSubscriptionRecord(SubscriptionRecord, callback, logger) {
if (!cloudDBZoneClient) {
console.log("CloudDBClient is null, try re-initialize it");
let result = { "message": "CloudDBClient is null" };
logger.info(result);
return;
}
try {
resp = await cloudDBZoneClient.executeUpsert(SubscriptionRecord);
console.log('The number of upsert record is:', resp);
let result = { "message": "upsertSubscriptionRecord success " };
logger.info(result);
} catch (error) {
let result = { "upsert err ": error.message };
logger.info(result);
callback(result);
}
}

d.查询订阅列表,用于判断用户是否订阅作者。

async function querySubscriptionRecordWithOrder(authorId, phone, callback, logger) {
try {
const cloudDBZoneQuery = clouddb.CloudDBZoneQuery.where(SubscriptionRecord.SubscriptionRecord).equalTo("authorId", parseInt(authorId)).equalTo("phone", phone);
const resp = await cloudDBZoneClient.executeQuery(cloudDBZoneQuery);
console.log('The number of query records is:', resp.getSnapshotObjects().length);
isSubscription = resp.getSnapshotObjects().length > 0 ? true : false;
if (isSubscription) {
// await sendSMS(phone);
}
} catch (error) {
let result = { "query err ": error.message };
logger.info(result);
callback(result);
}
}

3.创建云函数,将上一步打包的函数上传到该云函数中。

4.在上步创建的云函数中创建HTTP触发器。

5.在应用客户端集成云函数SDK。

6.初始化云函数,调用HTTP触发器获取云数据库相关操作结果。

function = AGConnectFunction.getInstance();
HashMap<String, String> map = new HashMap();
map.put("type", "1");
map.put("articleId", msg.getArticleId());
map.put("authorId", msg.getAuthorId());
map.put("phone", MainApplication.phone);
map.put("uid", MainApplication.uid);
function.wrap("insert-article-$latest").call(map)
.addOnCompleteListener(new OnCompleteListener<FunctionResult>() {
@Override
public void onComplete(Task<FunctionResult> task) {
if (task.isSuccessful()) {
String value = task.getResult().getValue();
JSONObject object = new JSONObject(value);
String message = (String) object.get("message");
//云函数返回成功
}          }
});

内容变更向关注用户发送短信

1.开通短信服务。

2.调试向用户发送短信

测试功能

1.应用中新发布一个文章。

2.在AGC推送服务页面新增一条推送消息,推送给测试手机,手机是否收到消息提示用户有新内容发布,点击通知栏,是否可以跳转至详情页。

3.在详情页关注作者,检查数据库中是否已经存入相关信息。

4.重新发布一个文章,检查是否收到更新内容的推送消息。

下载Demo

获取Demo

欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

【ACG】博主在专栏更新内容后,及时通知关注他的用户去阅读相关推荐

  1. CSDN产品公告:APP新增大厂在线刷题功能、博主排名规则更新、MD编辑器优化

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blogdev.blog.csdn.net/article/deta ...

  2. 2023·新星计划 - 为什么头部博主们写的内容有那么多人追捧?他们是掌握了什么流量密码?

    推荐: Python全栈白宝书专栏,免费阶段订阅数量4300+,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区. 福利:加入社区的小伙伴们,除了可以获取博主所有付费专栏的阅读权限之外,还有机 ...

  3. CSDN产品公告第1期:APP新增大厂在线刷题功能、博主排名规则更新、MD编辑器优化

    用户为本,让用户成为CSDN产品的主人,为此,我们特开设了CSDN产品公告栏,切实听取大家对新功能的反馈,定期抽取部分反馈用户赠送精美礼品一份! 在过去一周,CSDN研发团队又上线了哪些功能呢?一起看 ...

  4. 关于openstack 专业博主地址.后续更新

    首先官方文档要放的 https://docs.openstack.org/ 关于导入镜像方面说的很详细的. https://www.cnblogs.com/liawne/p/9322221.html ...

  5. 我的CSDN 目录,作为博主在CSDN上发布的文章类型导读

    此篇文章介绍我的整个CSDN目录,也就是介绍我在CSDN会发布的博客的目录,如果觉得找不到博主的文章从哪里开始的,请从这篇文章开始: 目录 1.linux模块 1.1.linux笔记-C/C++编码 ...

  6. CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

    CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 ...

  7. 我爬取了CSDN总榜TOP10博主的2万多篇文章,看看他们为什么这么火

    前言:受到明佬<CSDN文章漫游者>的启发(←造福C站全体用户,最新版文章漫游者v0.3开放下载,赶快体验吧!),笔者将 CSDN 总榜 TOP10 的大佬们的文章数据爬了下来,分析一波大 ...

  8. 在微博视频,见证“新”博主诞生

    今年除夕,当邓大头提着吃的去探望姥爷时,被老人家毅然决然地关在门外,"别进来,赶紧走",而后姥爷将几个口罩和过年红包从窗口投掷出来,没等大头多说话,又迅速关上了窗户. 这段祖孙间的 ...

  9. 合作小红书探店博主需要注意什么?流程是怎样的?

    小红书平台中的用户粘性高,消费能力强,受到了很多商家的青睐,而在小红书博主中,小红书探店博主能够帮助商家引流,所谓探店是指一些较有名气的达人博主对商家的店面进行实地考察,了解关于商家店面,产品.店内环 ...

最新文章

  1. Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用
  2. 数据仓库--基本概念
  3. C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
  4. apk 签名v1与v2的区别
  5. 【Codeforces - 1000C】Covered Points Count(思维,离散化,差分)
  6. 太棒了!PyTorch 1.7发布,支持CUDA 11、Windows分布式训练
  7. 谷爱凌惊“险”一跳,最少价值10个亿!
  8. Sound Grinder Pro for Mac(音频批量编辑转换工具)
  9. oracle学习笔记之pI/sql视频小结
  10. 光纤传输与网络技术作业(第一部分)
  11. 点晴oa系统搭服务器,免费OA办公系统的亮点所在
  12. 《小5自我推荐资源 | 寻找C站“宝藏》
  13. C语言实现15折线U律,Windows程序的设计(C语言)实训报告
  14. deepstream-测试发送kafka
  15. 身份证男女识别---进一步优化03
  16. DIY 2U 服务器
  17. 20 个 JS 工具函数助力高效开发
  18. 数据挖掘 第四篇:OLS回归分析
  19. 【二维码营销案例】圣诞促销活动如何设计二维码能拉新留存促活转化?
  20. R语言_电信客户流失数据分析

热门文章

  1. scrapy立面parse_立面模式在Swift
  2. 管理员页面的班级功能
  3. 计算机小高考,中考缘何成了“小高考”
  4. Rundeck部署安装
  5. Python中类的基本用法
  6. 用蒲公英实现app发布版本自动更新和Crash收集
  7. TAP_restart
  8. 软件测试如何冲击年薪50万+
  9. suse linux 开启telnet,SuSE Telnet的设置
  10. 随机ip案例_案例研究:IP电话集成