iOS端FirebaseMessaging:如何获取消息发送所用的主题?
iOS Firebase Messaging 获取推送主题名称的可行方案
方案1:发送推送时自定义字段携带主题名
在发送主题推送的payload里,手动在data字段添加主题标识,示例如下:
{ "to": "/topics/your_topic_name", "data": { "topic": "your_topic_name", // 其他业务自定义数据 }, "notification": { "title": "推送标题", "body": "推送内容" } }
接收消息时,直接从userInfo["topic"]中取出主题名称即可。
方案2:使用Firebase Messaging专属回调方法
从Firebase Messaging 10.0+版本开始,iOS提供了MessagingDelegate的messaging(_:didReceiveRemoteMessage:)回调,该方法接收的MessagingRemoteMessage对象包含from属性,和Android的getFrom()逻辑一致,能直接拿到格式为/topics/your_topic_name的主题地址,示例代码:
func messaging(_ messaging: Messaging, didReceiveRemoteMessage remoteMessage: MessagingRemoteMessage) { if let from = remoteMessage.from, from.hasPrefix("/topics/") { let topicName = from.replacingOccurrences(of: "/topics/", with: "") // 处理获取到的主题名称 } }
注意需要先设置Messaging.messaging().delegate = self,且确保Firebase Messaging版本满足要求。
补充说明:旧的
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)属于UIKit层面的通用推送回调,本身不包含FCM主题相关的元数据;而Firebase提供的专属回调是针对FCM消息设计的,能获取更完整的消息上下文信息。
内容的提问来源于stack exchange,提问作者algrid
相关产品推荐
相关产品推荐

