根据Firebase cloud messaging documentation,订阅用户我需要调用的主题
FirebaseMessaging.getInstance().subscribeToTopic("news");
void
,问题是如何
我能理解订阅是否成功?subscribeToTopic
是不好的做法
申请开始了吗?答案 0 :(得分:17)
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商店下载和安装)并且订阅成功。
但是,如果您想确定,您还可以通过自己的App Server处理。如docs中所述:
您可以利用Instance ID API从服务器端执行基本的主题管理任务。给定客户端应用程序实例的注册令牌,您可以执行以下操作:
- 了解有关客户端应用实例订阅的详细信息,包括每个主题名称和订阅日期。见Get information about app instances。
检查注册令牌,如果它们未成功传入您的主题,请向其发送通知,以便触发客户端应用调用 subscribeToTopic
。
2。每次我的应用程序启动时调用subscribeToTopic都是不好的做法吗?
编辑:从评论部分添加它:订阅应用程序启动应该没问题。
感谢@FrankvanPuffelen进行验证。 :)
答案 1 :(得分:0)
我已经编写了此功能并进行了测试。可能会有帮助。
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");
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";