我目前正在为学校开发Android应用程序。基本上,其目的之一是使您和您的朋友能够在地图上彼此定位。为此,我们使用Firebase Cloud Messaging。我遵循了the tutorial provided by Google,一切似乎都正常运行。
我按照教程中所示设置了FirebaseMessagingService,将其重写为onNewToken,onMessageReceived和onMessageDeleted。令牌已保存在我们的学校数据库中,因此我可以实时检查哪些帐户与哪个Firebase令牌相关联,从而可以使用FCM控制台测试设备。
这是发生问题的地方:我收到了消息,但是有某种随机延迟。有时,消息会立即发出,而另一些时候,我们不得不等待20分钟以上,甚至无法确定问题是否来自我们的实施或Firebase。我们完全不知道为什么会出现这种延迟。有时我们只是认为我们的应用程序已损坏,然后执行其他操作,但是随后我们回到Android Studio,看到该应用程序一次收到了所有待处理的消息。
这是清单中我的服务声明:
<service android:name=".domains.FirebaseService" android:enabled="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
这是我对FirebaseMessagingService的实现
public class FirebaseService extends FirebaseMessagingService {
[...]
@Override
public void onNewToken(String token) {
// Save on DB
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
if(data.size() > 0) {
// Do stuff
}
}
[...]
}
所以这似乎很合逻辑,在这里没什么幻想的。不过,接收任何消息之前的延迟是完全随机的,似乎与服务状态无关。
同样,即使从Firebase控制台发送消息时也会出现问题,因此我认为我们可以安全地排除问题是否来自发送消息,因为最后,应用程序会在80%的时间内收到消息。消息。
自从我收到消息以来,我认为问题实际上不是来自服务...也许我错了?
此外,我非常确定Firebase令牌在发送消息之前和之后都不会更改,这将解释为什么设备未收到消息的原因。
您是否知道这种延迟可能来自何处?我们已经在互联网上搜寻了解决方案,但没有找到任何答案。
谢谢。
编辑:值得一提的是,我使用设备的Firebase令牌发送每条消息,在本例中,我们使用的是仿真器,所以也许这可能就是原因不能正常工作。
编辑2:正如我在下面的评论中提到的,我们学校希望我们使用FCM而不是其他任何东西,因此我们需要使其使用它。
答案 0 :(得分:2)
由于我的手机是土豆,所以不允许我在其上安装应用程序。到现在。现在,代码可以在我的手机上运行,而无需使用仿真器,因此一切正常。延迟消失了,所有消息立即得到接收。
令我感到惊讶的是,我已经按照模拟器的原样(使用Google Play服务等)配置了模拟器,并做了必要的操作以确保没有问题。在网络上搜索后,我找不到任何讨论此话题的话题,而答案仅仅是在模拟器上安装Google Play服务(已完成)。
因此,如果您的仿真器没有收到任何推送通知,或者在收到通知之前发生某种随机延迟,则最好在真实设备上尝试应用程序。
非常感谢@madlymad和@AL。试图帮助我解决问题。