2017-08-07 79 views
0

如何在設備使用移動數據時禁用接收推送通知?
它需要保存用戶的流量和金錢。
我對此有一個建議。 需要註冊BroadcastReceiver這將跟蹤CONNECTIVITY_CHANGE如果WiFi關閉呼叫InstanceID.deleteToken()但我不確定這種方法。 也許有一些方法可以做到這一點? 在此先感謝!當設備僅連接到WiFi時接收FCM

+1

您可以使用廣播接收器來確定網絡類型並使用FirebaseMessaging.getInstance()取消註冊。unsubscribeFromTopic(「yourTopic」);' –

回答

1

當你帶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();

1

您的方法(取消Wifi註銷並重新註冊時,Wifi開啓)可能會導致意外的行爲。那麼我不知道你正在進行的項目的性質,但大部分時間它會影響。

假設Wifi關閉,您取消註冊,然後一條消息被服務器推送到設備(您的設備將不會是它們中的一個,因爲它沒有註冊),然後您的Wifi進入並註冊新的令牌,您以前的消息將不會傳送到您的設備。這是一般消息的情況(例如發送給所有設備)。

但是您的設備也會在您的服務器上丟失歷史記錄(同樣,這取決於您的項目)。

一個可能的解決方案可能是:當Wifi下線並且您想要限制蜂窩網絡(意味着蜂窩網絡開啓)時,您可以向您的服務器發送一條消息,指示設備處於脫機狀態。當你的服務器想要發送消息時,它會檢查設備的狀態。當Wifi繼續發送消息說你在線。

+0

是的,您是對的,取消註冊設備不是好的解決方案。大概我應該審查項目的概念,並刪除這個「功能」 – user2650128