刚启动系统时未收到FCM通知

时间:2018-02-26 07:47:24

标签: android firebase push-notification firebase-cloud-messaging

我在我的Android应用程序中实现了FCM推送通知。在正常情况下会收到推送通知。我的情况是:

  1. 关闭手机。
  2. 将FCM推送通知发送到使用生成的令牌 FirebaseInstanceId.getInstance().getToken()
  3. 打开手机。 (未收到通知)
  4. 打开应用程序。 (未收到通知)
  5. 手机不应该收到手机开机的通知。我为另一种情况测试了FCM。

    1. 关闭互联网
    2. 将FCM推送通知发送到使用生成的令牌 FirebaseInstanceId.getInstance().getToken()
    3. 开启互联网。 (收到通知)
    4. 为什么设备刚刚启动时未收到FCM通知?

2 个答案:

答案 0 :(得分:2)

我认为你应该在不同设备上重复这种情况,因为默认情况下某些设备有特殊设置,比如不允许后台应用程序自动启动或访问互联网,除非明确允许。因此,也许它是特定于设备的,例如,如果您在应用程序未在前台打开或在最近的应用程序中可用时未收到通知,则情况就是这样。

除此之外,我认为您应该在清单中添加RECEIVE_BOOT_COMPLETED权限,并在接收boot complete广播时初始化您的应用,这样就不会在设备断电时重新启动并重新启动服务当设备开启时。

我在手机上有几个带有GCM推送通知的应用程序,而且这款手机经常耗尽电量,但每次我再次打开它时,我都会收到手机离线时发送的所有通知。因此,我认为您的方案中缺少某些内容,并且应该在打开时收到通知。

答案 1 :(得分:1)

每当生成新令牌时都会触发onTokenRefreshcallback,因此在其上下文中调用getToken可确保您访问当前可用的注册令牌。确保已将服务添加到清单中,然后在onTokenRefresh的上下文中调用getToken,并记录该值,如下所示:

您必须确保myFirebaseInstanceIDService中的onTokenRefresh方法覆盖

@Override
public void onTokenRefresh() {
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
    sendRegistrationToServer(refreshedToken); // Replace this method with your appropriate method for send registration token to server
}