Firebase在应用程序不活动时不调用onMessageReceived方法。

8 浏览
0 Comments

Firebase在应用程序不活动时不调用onMessageReceived方法。

我正在Android上使用Firebase Cloud Messaging。

  • 当应用程序在前台时,我可以成功接收到通知和数据消息。
  • 文档中指出,如果在应用程序处于后台时收到通知消息,则Firebase将代表应用程序将通知发送到系统托盘。但这对我来说不起作用。
  • 如果发送了数据消息并且应用程序处于后台,则成功调用onMessageReceived方法。
  • 最令人困扰的情况是,当我强制停止应用程序然后尝试发送通知或数据消息时,在此情况下onMessageReceived方法不会被调用。
  • 我看过一些关于后台使用情况的文章,但我还没有看到任何关于完全停止应用程序时为什么没有接收到消息的解释。

我在清单文件中有以下内容:


    
        
    


    
        
    

文档对于扩展FirebaseMessagingService有以下说明:

如果您想在后台应用程序上做一些消息处理以外的操作,则需要这个。

他们对于“在后台应用程序上做消息处理以外的操作”并不是很清楚。我只能假设他们指的是在应用程序关闭时处理消息。

非常感谢任何帮助。

0
0 Comments

Firebase onMessageReceived not called when app is inactive

问题出现的原因:

问题出现在后端。当消息中包含notification对象时,只有在应用程序处于前台时才会调用onMessageReceived。因此,您只能使用data对象。

解决方法:

只使用data对象。例如:

var message = {
     to: user.deviceId, // required
     collapse_key: 'key',
     data: {
          title: 'Hello',
          body: 'Body'
     }
}; 

这适用于所有情况。

如果我们这样做,即使在设备上的应用程序被强制停止,我们仍然可以收到通知吗?

@ Vallilis 我不认为这是解决方案。我一直在测试使用以下数据消息:

curl --header "Authorization: key=$firebase_token" --header "Content-Type:application/json" fcm.googleapis.com/fcm/send -d "{\"to\": \"device_token\",\"data\": {\"message\":\"A data message\"}}"

如果我在应用程序设置中强制停止应用程序然后尝试发送消息,什么也不会出现。我还使用WhatsApp测试了相同的场景。如果您强制停止WhatsApp,则不会出现任何消息通知。这使我相信Google Play服务实际上没有启动服务。

这种方法在重启后不起作用,但在应用程序在后台运行并且您想要获取数据键/值而不是通知标题和正文时起作用。

0
0 Comments

出现问题的原因是当应用程序处于非活动状态时,Firebase的onMessageReceived方法不会被调用。这是因为通过强制停止应用程序,关闭了与应用程序相关的所有后台进程,导致无法接收到通知。

解决方法如下:

1. 在AndroidManifest.xml文件中,确保已正确配置FirebaseMessagingService。确保以下内容已添加到标签中:


    
        
    

2. 在MyFirebaseMessagingService类中,确保已正确重写onMessageReceived方法。在该方法中处理接收到的消息。示例代码如下:

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // 处理接收到的消息
        if (remoteMessage.getData().size() > 0) {
            // 处理数据消息
            String message = remoteMessage.getData().get("message");
            // 处理其他数据
        }
        // 处理通知消息
        if (remoteMessage.getNotification() != null) {
            String title = remoteMessage.getNotification().getTitle();
            String body = remoteMessage.getNotification().getBody();
            // 处理通知内容
        }
    }
}

3. 确保应用程序处于活动状态时,不要强制停止应用程序。否则,将无法接收到通知。

通过以上步骤,可以解决Firebase的onMessageReceived方法在应用程序非活动状态下不被调用的问题。

0
0 Comments

问题原因:当应用程序被强制停止时,不会收到任何通知,直到应用程序重新启动。直到应用程序重新启动之前,您的代码将不起作用。应用程序的所有服务也将停止,直到用户手动重新启动应用程序。

解决方法:需要找到一种方式在某些情况下完全停止应用程序。为了停止所有功能,可以使用"Force Stop"。当点击"Force Stop"时,应用程序的所有服务也将停止。

0