【AGC】博主在专栏更新内容后,及时通知关注他的用户去阅读系列二
【AGC】博主在专栏更新内容后,及时通知关注他的用户去阅读系列二 接前文博主在专栏更新内容后,及时通知关注他的用户去阅读系列一。
触发记录用户的订阅信息
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));
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);
}
}
}
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");
// 云函数返回成功
}
}
});
内容变更向关注用户发送短信
测试功能
- 应用中新发布一个文章。
- 在AGC推送服务页面新增一条推送消息,推送给测试手机,手机是否收到消息提示用户有新内容发布,点击通知栏,是否可以跳转至详情页。
- 在详情页关注作者,检查数据库中是否已经存入相关信息。
- 重新发布一个文章,检查是否收到更新内容的推送消息。
下载Demo
3 回复
学习了
在AGC(AppGallery Connect)中,博主可以通过“消息推送”功能,在专栏更新后及时通知关注他的用户。具体操作如下:进入AGC控制台,选择“增长”>“消息推送”,创建新推送任务,设置推送内容、目标用户(如关注该博主的用户),并选择推送时间。通过这种方式,博主可以有效提升用户阅读率,增强用户粘性。