如何在OneSignal中为应用用户注册/订阅对应分类主题?
OneSignal多分类主题订阅实现方案
OneSignal没有提供和Firebase Messaging.messaging().subscribe(toTopic:) 完全同名的接口,对应的主题订阅功能可以通过其自带的标签(Tags)系统实现,具体方案如下:
核心逻辑
你可以为每个分类主题定义专属标记,用标签存储用户的订阅列表,后续推送时通过标签筛选即可定向触达订阅了对应分类的用户。
端侧实现代码示例
iOS端
// 批量订阅多个主题 func subscribeToTopics(topicList: [String]) { // 直接将订阅列表作为标签值上传 OneSignal.sendTags(["subscribed_topics": topicList]) { success in if success { print("已成功订阅主题:\(topicList)") } } } // 调用示例:订阅天气、体育、科技三个分类 subscribeToTopics(topicList: ["weather", "sports", "technology"])
安卓端
// 批量订阅多个主题 fun subscribeToTopics(topicList: List<String>) { OneSignal.sendTags(mapOf("subscribed_topics" to topicList)) { success -> if (success) { Log.d("OneSignal", "主题订阅成功") } } } // 调用示例 subscribeToTopics(listOf("weather", "sports", "technology"))
取消订阅实现
如果用户需要取消单个主题的订阅,读取现有标签值移除对应分类后重新上传即可:
// iOS端取消订阅示例 func unsubscribeFromTopic(topicName: String) { OneSignal.getTags { tags in guard var currentTopics = tags?["subscribed_topics"] as? [String] else { return } currentTopics.removeAll { $0 == topicName } OneSignal.sendTag("subscribed_topics", value: currentTopics) } }
定向推送操作
在OneSignal后台创建推送任务时,在「受众」筛选栏选择subscribed_topics标签,设置匹配对应主题名称即可;如果通过服务端API推送,在请求参数中添加对应的标签筛选规则即可。
内容的提问来源于stack exchange,提问作者uzman
相关产品推荐
相关产品推荐

