Android:订阅 Firebase 云消息传递 (FCM) 主题

问题描述 投票:0回答:3

根据 Firebase 云消息传递文档,为了让用户订阅我需要调用的主题

FirebaseMessaging.getInstance().subscribeToTopic("news");
  1. 在我的应用程序中,我需要所有用户订阅我的云 消息主题。由于返回值是
    void
    ,问题是如何 我可以理解为订阅成功吗?
  2. 每次我打电话给
    subscribeToTopic
    是一个不好的习惯吗? 申请开始了吗?
android firebase firebase-cloud-messaging
3个回答
37
投票

1。怎么才能知道订阅成功了?

编辑:

您现在可以通过添加

addOnSuccessListener()

来检查订阅是否成功
FirebaseMessaging.getInstance().subscribeToTopic("news").addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Toast.makeText(getApplicationContext(),"Success",Toast.LENGTH_LONG).show();
        }
    });

原文:

文档中没有明确提及订阅成功时收到的响应。

但是,如果您需要强制所有用户订阅特定主题,则应在应用首次安装时调用

subscribeToTopic
。这很可能会确保连接到互联网(因为它可能是通过 Play 商店下载和安装的)并且订阅成功。

但是,如果您想确定,您也可以通过您自己的应用程序服务器进行检查。正如文档中所述:

您可以利用实例 ID API 从服务器端执行基本主题管理任务。给定客户端应用程序实例的注册令牌,您可以执行以下操作:

检查注册令牌,如果它们尚未成功订阅您的主题,请向其发送通知,它将触发您的客户端应用程序调用

subscribeToTopic

2。每次我的应用程序启动时调用 subscribeToTopic 是一个不好的做法吗?

编辑:从评论部分添加:在应用程序启动时订阅应该没问题。

感谢@FrankvanPuffelen 的验证。 :)


4
投票

我已经编写了这个函数并进行了测试。可能会有帮助。

    private void subscribeToMessaging(){
        SharedPreferences prefs = getSharedPreferences(SETTINGS_TITLE, MODE_PRIVATE);

// Getting value from shared preferences
        boolean isSubscriptionEnable = prefs.getBoolean(SETTING_NOTIFICATION, true);

// if "isSubscriptionEnable" is true then check whether its already subscribed or not
        if (isSubscriptionEnable){

            boolean alreadySubscribed = prefs.getBoolean(SETTING_ALREADY_SUBSCRIBED, false);
// if not already subscribed then subscribe to topic and save value to shared preferences
            if (!alreadySubscribed){
                FirebaseMessaging.getInstance().subscribeToTopic("global").addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Toast.makeText(getApplicationContext(),"Success",Toast.LENGTH_LONG).show();
        }
    });

                SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_TITLE, MODE_PRIVATE).edit();
                editor.putBoolean(SETTING_ALREADY_SUBSCRIBED, true);
                editor.apply();
                Toast.makeText(this, "Subscribed", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "Already subscribed", Toast.LENGTH_LONG).show();
            }
        }
    }

不要忘记在 onCreate() 上面写下这些行

    public static final String SETTINGS_TITLE = "settings";
    public static final String SETTING_NOTIFICATION = "notification_state";
    public static final String SETTING_ALREADY_SUBSCRIBED = "already_subscribed";

0
投票

初始化

val pubSub = FirebaseMessaging.getInstance();

                        pubSub.subscribeToTopic(Constants.ALL_USER)
© www.soinside.com 2019 - 2024. All rights reserved.