如何在设备使用移动数据时禁用接收推送通知?
它需要节省用户的流量和金钱。
我对此有一个建议。
需要注册BroadcastReceiver
才会跟踪CONNECTIVITY_CHANGE
,如果WiFi已关闭,请致电InstanceID.deleteToken()
,但我不确定此方法。
也许有一些方法可以做这个东西?
提前谢谢!
答案 0 :(得分:1)
当你使用wifi连接时,请使用:FirebaseMessaging.getInstance()。subscribeToTopic(“news”);
当您使用移动网络时: 。FirebaseMessaging.getInstance()unsubscribeFromTopic( “新闻”);
或者你可以使用它:
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 :(得分:1)
您的方法(在Wifi关闭时取消注册并在Wifi继续时重新注册)可能会导致意外行为。好吧,我不知道你正在进行的项目的性质,但大多数时候它会影响。
假设Wifi关闭而您取消注册,然后服务器将消息推送到设备(您的设备将不会是其中之一,因为它已取消注册)然后您的Wifi继续并注册新令牌,您以前的邮件将无法传送到您的设备。这是一般消息(例如发送到所有设备)。
但是您的设备也会在您的服务器中丢失其历史记录(同样,这取决于您的项目)。
可能的解决方案可能是:当Wifi脱机并且您想要限制蜂窝网络(意味着蜂窝网络已打开)时,您可以向服务器发送一条消息,指示设备处于脱机状态。当您的服务器想要发送消息时,它会检查设备的状态。当Wifi继续播放时,发送一条消息说你在线。