Android端FCM多主题订阅功能使用及实现示例咨询
FCM Android 多主题订阅问题解答
多主题订阅能力确认
Firebase Cloud Message(FCM)Android SDK 原生支持单应用实例同时订阅多个主题,没有单实例订阅主题的数量限制,你可以根据业务需求给同一设备上的应用订阅topic1、topic2等任意自定义主题,订阅生效后设备即可接收到所有已订阅主题下推送的消息。
注意:主题名称严格区分大小写,订阅操作和服务端发消息时必须保证主题名完全一致,否则会出现消息接收失败的问题。
实现代码示例
先确保项目已经完成FCM基础集成,之后可直接调用SDK提供的订阅API实现单/多主题订阅,以下提供Kotlin和Java两种语言的实现参考:
Kotlin 示例
import com.google.firebase.messaging.FirebaseMessaging import android.util.Log object FcmTopicHelper { // 订阅单个主题 private fun subscribeSingleTopic(topic: String) { FirebaseMessaging.getInstance().subscribeToTopic(topic) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d("FCM", "订阅主题$topic 成功") } else { Log.e("FCM", "订阅主题$topic 失败", task.exception) } } } // 批量订阅多个主题 fun subscribeTopics(topicList: List<String>) { topicList.forEach { subscribeSingleTopic(it) } } // 批量取消订阅 fun unsubscribeTopics(topicList: List<String>) { topicList.forEach { topic -> FirebaseMessaging.getInstance().unsubscribeFromTopic(topic) } } } // 业务侧调用示例 // 传入需要订阅的主题列表即可,比如同时订阅topic1、topic2 // val targetTopics = listOf("topic1", "topic2") // FcmTopicHelper.subscribeTopics(targetTopics)
Java 示例
import android.util.Log; import com.google.firebase.messaging.FirebaseMessaging; import java.util.List; public class FcmTopicUtil { // 订阅单个主题 private static void subscribeSingleTopic(String topic) { FirebaseMessaging.getInstance().subscribeToTopic(topic) .addOnCompleteListener(task -> { if (task.isSuccessful()) { Log.d("FCM", "订阅主题" + topic + "成功"); } else { Log.e("FCM", "订阅主题" + topic + "失败", task.getException()); } }); } // 批量订阅多个主题 public static void subscribeTopics(List<String> topicList) { for (String topic : topicList) { subscribeSingleTopic(topic); } } // 批量取消订阅 public static void unsubscribeTopics(List<String> topicList) { for (String topic : topicList) { FirebaseMessaging.getInstance().unsubscribeFromTopic(topic); } } // 业务侧调用示例 // List<String> targetTopics = Arrays.asList("topic1", "topic2"); // FcmTopicUtil.subscribeTopics(targetTopics); }
注意事项
- 主题订阅是异步网络请求,不要在调用订阅接口后立刻发送测试消息,建议等订阅成功回调触发后再做推送测试,避免因订阅关系未同步生效导致收不到消息。
- 应用卸载重装、清除应用数据后,原有订阅关系会失效,需要重新执行订阅逻辑。
- 新创建的主题最多可能需要1分钟左右才能在服务端生效,不要刚创建主题就立刻发消息。
内容的提问来源于stack exchange,提问作者Assist
相关产品推荐
相关产品推荐

