设备仅连接到WiFi

时间:2017-08-07 11:17:54

标签: android firebase firebase-cloud-messaging

如何在设备使用移动数据时禁用接收推送通知?
它需要节省用户的流量和金钱。
我对此有一个建议。 需要注册BroadcastReceiver才会跟踪CONNECTIVITY_CHANGE,如果WiFi已关闭,请致电InstanceID.deleteToken(),但我不确定此方法。 也许有一些方法可以做这个东西? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以按https://developers.google.com/instance-id/reference/server#create_a_relation_mapping_for_an_app_instance

注册新的firebase主题

当你使用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继续播放时,发送一条消息说你在线。