tencent cloud

腾讯云超级应用服务

动态与公告
【2025年1月2日】关于腾讯云小程序平台更名为腾讯云超级应用服务的公告
控制台更新动态
Android SDK 更新动态
iOS SDK 更新动态
Flutter 更新动态
IDE 更新动态
基础库更新动态
产品简介
产品概述
产品优势
应用场景
购买指南
计费概述
按量计费(后付费)
续费指引
停服说明
快速入门
套餐管理
概述
控制台账号管理
存储配置
加速配置
品牌化配置
平台功能
控制台登录
用户和权限体系
小程序管理
小游戏管理
应用管理
商业化
平台管理
用户管理
团队管理
运营管理
安全中心
代码接入指引
Demo 及 SDK 获取
Android
iOS
Flutter
App 服务端接入指南
GUID 生成规则
小程序开发指南
小程序介绍与开发环境
小程序代码组成
指南
框架
组件
API
服务端
JS SDK
基础库
IDE 使用指南
小游戏开发指南
指南
API
服务端
实践教程
小程序登录实践教程
小程序订阅消息实践教程
支付相关实践教程
广告接入实践教程
小游戏订阅消息实践教程
相关协议
数据处理和安全协议
文档腾讯云超级应用服务实践教程小游戏订阅消息实践教程

小游戏订阅消息实践教程

PDF
聚焦模式
字号
最后更新时间: 2025-06-03 18:00:37

前言

基于 superapp 的通知渠道,我们为开发者提供了订阅消息能力,以便实现服务的闭环,带给 superapp 用户更优的体验。
开发者在游戏内,可向用户发起消息订阅。开发者需在后台自行记录用户是否订阅成功及订阅成功的次数。
用户在小游戏中订阅指定的消息内容后,开发者可以在后台通过下发消息的 send 接口把一条模板消息发送给用户。用户成功订阅一次,开发者可在游戏内认为场景适合的时机,向该用户下发一条模板消息。
针对上述场景,您可通过以下方案来实现订阅消息功能:

流程说明

前提条件

为实现 superapp 和小游戏的订阅消息功能,您的 superapp 需要开通推送服务,否则小游戏订阅消息无法通过 superapp 的推送渠道触达用户。

添加消息模版

开发者需在控制台-小游戏管理-订阅消息,从公共模板库中选择适用的消息模板,配置推送的字段后,添加为“我的模板”。详细流程可参考 小游戏管理-订阅消息

小游戏实现订阅消息触发

第 1 步:获取模版 ID

按上述添加消息模板成功后,可以获取到已经配置的模板 ID,用于后续消息订阅操作。

第 2 步:获取下发权限

在小游戏中一次性订阅消息通过 wx.requestSubscribeMessage 调起 superapp 订阅消息界面,用户操作后返回用户订阅消息的操作结果,结果为"accept"时表示用户同意订阅模板 ID 对应的模板消息且模板可用。

示例代码如下:

JAVASCRIPT
// tmplIds:Array of template IDs that need to be subscribed
requestSubscribeMessage(tmplIds) {
wx.requestSubscribeMessage({
tmplIds,
success: (res) => {
console.log('wx.requestSubscribeMessage success', res)
const keysWithAccept = Object.entries(res)
.filter(([key, value]) => value === "accept")
.map(([key]) => key);
if (keysWithAccept.length > 0) {
// Send subscription message
this.orderSubscribe(keysWithAccept)
} else {
wx.showModal({
title: 'No available message templates',
confirmText: 'Confirm',
showCancel: false
})
}
},
fail: (res) => {
console.log('wx.requestSubscribeMessage fail', res)
wx.showModal({
title: 'wx.requestSubscribeMessage fail',
confirmText: 'Confirm',
content: `${res.errMsg}【${res.errCode}】`,
showCancel: false
})
}
})
}

第 3 步:调用接口下发订阅消息

当用户在小游戏中触发了需要接收消息的操作后,小游戏通过自定义接口调用小游戏服务端并传递可用的模板 ID,再由小游戏服务端调用 SAS 服务端(OpenServer)提供的 send 接口发送订阅消息。

小游戏服务端下发订阅消息

小游戏发送订阅消息的前提是小游戏服务端需要接入 getAccessToken 接口。
通常情况下,小游戏服务端需要获取小游戏的订阅关系,如上述 示例代码 中的 this.orderSubscribe() 接口,小游戏服务端需要将用户订阅成功的模版、订阅时间、订阅者(openid) 持久化。
一般情况下订阅消息这个动作完成以后,发消息的动作是一个未来行为;小游戏服务端需要根据自身的需求提供一个消息发送的平台,或者通过其它中间件、接口去触发消息发送。
这里小游戏订阅消息的时候入参 tmplIds 可以通过 后台接口 去校验模版 ID 的有效性。
目前后台发送订阅消息的接口请参考如下 接口,需要特别注意 data 字段的格式, 下面给出参考示例。
若订阅消息模版如下:
name: {{name01.DATA}}
amount: {{amount01.DATA}}
journey: {{thing01.DATA}}
date: {{date01.DATA}}
那么对应的发送消息的 data 数据结构则如下:
{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"page": "index",
"data": {
"name01": {
"value": "who "
},
"amount01": {
"value": "$100"
},
"thing01": {
"value": "from beijing to shanghai"
} ,
"date01": {
"value": "2018-01-01"
}
}
}

Supeapp 接收并展示订阅消息



在上一个步骤中,小游戏后台通过 SAS 平台向 superapp 后台推送订阅消息,superapp 需要通过 接受订阅消息 接口接收消息并完成后续自定义业务逻辑。 通常 superapp 后台需要向 superapp 提供一个拉取消息列表的接口,以便让 superapp 可以获取到从小游戏推送过来的订阅消息数据,并给 superapp 的用户展示。
注意:
Superapp 拉取消息列表的接口需要 superapp 后台自行开发。
以下是我们建议 superapp 接收并展示订阅消息的方式。
如果您的 superapp 是具备社交聊天功能,我们建议您将订阅消息的通知入口放置在聊天列表中,方便用户实时查看。

此外,如果您的 superapp 有系统消息功能,也可以将系统消息的入口作为订阅消息的入口。

当然,您也可以根据自己的喜好来决定订阅消息的入口,我们建议将入口放置在较为显眼的位置。
有了订阅消息入口后,接下来,您需要自定义一个订阅消息列表页面,我们称呼为“消息卡片”页面,用来展示订阅消息,可以参考下方图片来实现 UI。

以下是订阅消息列表和“消息卡片”的实现方法,供参考。
进入消息卡片页面时,调用 superapp 后台拉取订阅消息。示例代码:
// 定义一个数组变量 jsonDatas,用于存储获取到的数据,初始值为 nil
BLOCK_ARRAY jsonDatas = nil;

// 调用单例 SubscriptionManager 的 getMessage 方法获取消息数据
// 参数:
// - token: 获取登录用户 token
// - appId: 配置文件(tcmpp-ios-configurations.json或tcmpp-android-configurations.json) 中的appKey
// 成功回调:
// - message: 获取到的消息数据数组
// 失败回调:
// - error: 错误信息
[SubscriptionManager.sharedInstance getMessage: UserInfo.sharedInstance.token
appId: MiniAppSDKManager.sharedInstance.configAppKey
success:^(ARRAY message) {
// 检查 message 是否为数组类型,如果不是则直接返回
if (![message isArray]) {
return;
}

// 检查 message 数组是否为空,如果为空则直接返回
if ([message isEmpty]) {
return;
}

// 将获取到的消息数据数组赋值给 jsonDatas 变量
jsonDatas = message;

// 创建一个可变数组 arrayDatas,用于存储解析后的数据模型
MUTABLE_ARRAY arrayDatas = [NSMutableArray array];

// 遍历 jsonDatas 数组
for (DICTIONARY json in jsonDatas) {
// 将每个 json 数据解析成 SubscribeInfoModel 模型对象
SubscribeInfoModel *model = [[SubscribeInfoModel alloc] initWithJsonDatas: json];

// 将模型对象添加到 arrayDatas 数组中
[arrayDatas addObject: model];
}

// 将 arrayDatas 数组赋值给 self.modelDatas 属性
self.modelDatas = [NSArray arrayWithArray: arrayDatas];

// 在主线程上异步执行 tableView 的 reloadData 方法,刷新表格数据
[self.tableView performSelectorOnMainThread: @selector(reloadData)
withObject: nil
waitUntilDone: YES];
}
failure:^(ERROR error) {
// 处理获取消息数据失败的情况,这里可根据业务场景进行失败提示
}];
在示例代码中,我们通过 superapp 封装的 getMessage 接口,传入了用户 token 和 AppKey 参数来获取订阅卡片的数据,获取成功回调中,将对应的订阅数据进行反序列化,设置在视图容器中,最后进行刷新。
点击卡片后,可进入对应的小游戏,示例代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
// 获取当前点击卡片对应的订阅模型对象
SubscribeInfoModel *model = self.modelDatas[indexPath.row];
// 传入订阅模型对象的参数,调用SDK的打开小游戏接口
[[TMFMiniAppSDKManager sharedInstance] startUpMiniAppWithAppID:model.MnpId verType:model.vertype scene:0 firstPage:model.Page paramsStr:nil parentVC:self completion:^(NSError * _Nullable error) {
if(error) {
// 打开失败,可根据业务场景进行提示
return;
}
// 打开成功,可根据业务场景进行提示
}];
}
在示例代码中,我们通过点击的列表元素来获取对应的订阅对象,通过调用 startUpMiniAppWithAppID 方法,传入小游戏 appid、小游戏状态、小游戏入口页面等参数来实现打开小游戏。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈