如何在設備使用移動數據時禁用接收推送通知?
它需要保存用戶的流量和金錢。
我對此有一個建議。 需要註冊BroadcastReceiver
這將跟蹤CONNECTIVITY_CHANGE
如果WiFi關閉呼叫InstanceID.deleteToken()
但我不確定這種方法。 也許有一些方法可以做到這一點? 在此先感謝!當設備僅連接到WiFi時接收FCM
回答
當你帶wifi連接使用,您可以通過https://developers.google.com/instance-id/reference/server#create_a_relation_mapping_for_an_app_instance
註冊新的火力點這個話題。FirebaseMessaging.getInstance()subscribeToTopic( 「新聞」);
而且當您使用移動網絡時: FirebaseMessaging.getInstance()。unsubscribeFromTopic(「news」);
或者,也許你可以使用這個:
Thread thread = new Thread(() -> {
try {
FirebaseInstanceId.getInstance().deleteInstanceId();
} catch (Exception e) {
Log.e("ERROR", Log.getStackTraceString(e));
RxBus.getInstance().post(new OffPushError());
}
});
thread.start();
您的方法(取消Wifi註銷並重新註冊時,Wifi開啓)可能會導致意外的行爲。那麼我不知道你正在進行的項目的性質,但大部分時間它會影響。
假設Wifi關閉,您取消註冊,然後一條消息被服務器推送到設備(您的設備將不會是它們中的一個,因爲它沒有註冊),然後您的Wifi進入並註冊新的令牌,您以前的消息將不會傳送到您的設備。這是一般消息的情況(例如發送給所有設備)。
但是您的設備也會在您的服務器上丟失歷史記錄(同樣,這取決於您的項目)。
一個可能的解決方案可能是:當Wifi下線並且您想要限制蜂窩網絡(意味着蜂窩網絡開啓)時,您可以向您的服務器發送一條消息,指示設備處於脫機狀態。當你的服務器想要發送消息時,它會檢查設備的狀態。當Wifi繼續發送消息說你在線。
是的,您是對的,取消註冊設備不是好的解決方案。大概我應該審查項目的概念,並刪除這個「功能」 – user2650128
- 1. 當連接到WiFi時獲取ios設備的IP地址
- 2. IOS 9當設備連接到wifi時保持TCP連接打開lte
- 3. 通過WiFi將設備連接到Arduino
- 4. 檢測連接到Wifi的Android設備
- 5. 設備是否連接到WIFI?
- 6. 使用Socket通過WiFi創建設備到設備的連接
- 7. 限制Android設備的WiFi連接
- 8. iPhone通過Wifi連接設備
- 9. 通過WiFi連接Android設備
- 10. 當沒有連接到Wifi時,應用程序無法加載設備
- 11. 通過wifi連接在android設備之間發送和接收數據
- 12. 限制BLE外圍設備僅連接到一個主設備
- 13. 當條件設置時,Android fcm接收來自mysql的通知
- 14. 在iOS設備上可以同時使用WiFi連接和3G連接嗎?
- 15. 製作wifi連接設備,用於擴展wifi網絡
- 16. 通過wifi直接連接10多個設備?
- 17. Windows事件,當試圖連接WiFi連接時
- 18. 連接到帶有Wifi的設備,但仍然連接到互聯網數據的蜂窩連接?
- 19. Android 2.X設備可以連接到Android 4.0 Wifi Direct AP嗎?
- 20. 通過wifi將ios設備連接到本地服務器
- 21. 顯示所有連接的設備到wifi
- 22. 如何檢測的WiFi連接到設備
- 23. 將Android設備連接到WiFi打印機
- 24. 如何知道設備連接到WiFi或3G,編程
- 25. 加速查找連接到Wifi網絡的設備並獲取設備名稱
- 26. 連接到設備時出現異常
- 27. 連接Android設備到Eclipse
- 28. 等到wifi連接到android
- 29. 爲什麼我的設備在連接到WIFI時似乎沒有連接到互聯網?
您可以使用廣播接收器來確定網絡類型並使用FirebaseMessaging.getInstance()取消註冊。unsubscribeFromTopic(「yourTopic」);' –