如何在设备使用移动数据时禁用接收推送通知?
它需要保存用户的流量和金钱。
我对此有一个建议。 需要注册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”);' –