猿问

在后台应用程序时未调用消息的FireBase

在后台应用程序时未调用消息的FireBase

我正在使用Firebase并测试从我的服务器发送通知到我的应用程序,而应用程序在后台。通知发送成功,甚至出现在设备的通知中心,但当通知出现时或即使我单击它,也不会调用FCMessagingService中的onMessageReciser方法。

在我的应用程序处于前台的时候,当我测试这个程序时,onMessageReciser方法就被调用了,一切都很好。当应用程序在后台运行时,问题就会发生。

这是我想要的行为,还是有办法解决这个问题?

这是我的FBMessagingService:

import android.util.Log;import com.google.firebase.messaging.FirebaseMessagingService;import com.google.firebase.messaging.RemoteMessage;
public class FBMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.i("PVL", "MESSAGE RECEIVED!!");
        if (remoteMessage.getNotification().getBody() != null) {
            Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getNotification().getBody());
        } else {
            Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getData().get("message"));
        }
    }}


皈依舞
浏览 576回答 3
3回答

holdtom

这是按预期工作的,只有在应用程序处于前台时,通知消息才会传递给onMessageReceired回调。如果您的应用程序处于后台或关闭状态,则通知中心将显示一条通知消息,并且任何来自该消息的数据被传递给意图。它是由于用户点击通知而启动的。您可以指定一个Click_action来指示当用户点击通知时应该启动的意图。如果未指定Click_action,则使用主活动。启动意图时,可以使用getIntent().getExtras();若要检索包含与通知消息一起发送的任何数据的集合,请执行以下操作。有关通知消息的更多信息,请参见博士.

慕仙森

移除notification场域完全来自你的服务器请求。送只data把它处理好onMessageReceived()否则你的onMessageReceived()将不会触发时,应用程序是在后台或死亡。别忘了包括"priority": "high"字段在通知请求中。根据文档:数据消息是以正常优先级发送的,因此它们不会立即到达;这也可能是问题所在。以下是我从服务器发送的内容{   "data":{     "id": 1,     "missedRequests": 5     "addAnyDataHere": 123   },   "to": "fhiT7evmZk8:APA91bFJq7Tkly4BtLRXdYvqHno2vHCRkzpJT8QZy0TlIGs......",   "priority": "high"}这样,您就可以在onMessageReceived(RemoteMessage message)就像这样.让我去拿身份证Object obj = message.getData().get("id");         if (obj != null) {             int id = Integer.valueOf(obj.toString());         }

GCT1015

此方法handleIntent()已经折旧,因此处理通知可以如下所示:前台状态:单击通知将转到挂起的意图的活动,在创建通知时,您将以语法的方式提供该活动,因为它通常是用通知的数据有效负载创建的。背景/死亡状态-在这里,系统本身根据通知有效负载创建一个通知,单击该通知将带您到应用程序的启动活动,在该活动中,您可以在任何生命周期方法中轻松地获取意图数据。
随时随地看视频慕课网APP

相关分类

Android
我要回答