java - 如何检查远程 Android 设备中的互联网连接?
问题描述
这个问题可能是一个重复的问题,但我找不到合适的解决方案。我有聊天应用程序,我在其中设置了当远程 android 设备处于后台模式时的功能,它将在新消息到来时收到 FCM 的通知(在聊天室中添加了新节点)。所以
- 如果远程设备处于前台模式,它将通过应用程序获得通知,并且它肯定具有互联网连接,我可以成功设置消息传递。
- 如果远程设备处于后台模式,它将收到 FCM 的通知,并且它肯定具有互联网连接。为此,我还可以成功设置消息传递。
那么我如何检查远程设备是否完全离线(没有互联网连接)或如何检查 FCM 是否成功发送通知?
例如:
if(messegeReceiver(remote device) has no internet connectivity )
{
//here i want to change data in firebase//
}
else
{
//here i want to change data in firebase//
}
我有“用户”节点,每个用户在登录应用程序时都设置了 device_token。
解决方案
FCM 不保证推送通知会送达。这完全取决于各种因素,如互联网连接(如你所提到的)、OEM 行为、打盹模式等。
在您的情况下,您正尝试通过 FCM 从一台设备向另一台设备发送消息,并在表单通知中显示消息,就像任何其他聊天应用程序一样。
这里唯一的问题是 FCM 没有为您提供您正在寻找的响应(附图片)的传递参数。它只计算网关已接受的通知数量,即 FCM(成功)和网关拒绝的通知数量(失败)。它还给出了拒绝(错误)消息的原因,例如NotRegistered、MissingRegistrationToken等,您可以参考这个。
我的建议是准备一个握手消息,确认来自其他设备的推送通知的传递。一旦您收到推送通知,就会通过 FCM 发送握手消息,该消息会被第一个了解推送通知已发送的设备接收。如果设备没有收到握手,则假设消息尚未传递。
我希望这真的对您有所帮助,如果您愿意,请投票或接受答案。
推荐阅读
- excel - 将一张表中的数据范围作为值复制到另一张表中,直到出现特定值
- powerbi - 如何将度量总计带到 Power BI 中的行?
- delphi - 需要在delphi的Word/Excel文档中添加/设置读取/获取CustomDocumentProperties
- flutter - 如何在颤动中将两行文本与一行文本对齐
- css - 如何在子元素中居中内容 React
- r - 使用某些数据帧 r 以不同方式绘制
- sql - HQL 中的存储过程
- python - 如何使用烧瓶将内容加载到 div 元素中
- python-3.x - Python3 意外的 to_bytes 返回值
- python - Spark:没有名为“编码”的模块