You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:03:17