当前位置: 首页 > 知识库问答 >
问题:

在第二个后台之后未调用FirebaseMessagingService

微生运浩
2023-03-14

我尝试使用Firebase为Android提供推送通知。但我面临着非常奇怪的问题。当我在前台发送推送时,一切正常。当我在后台发送推送时(我只发送数据),一切都正常,直到我回到前台,然后回到后台。

当我的应用程序第二次转到后台时,不会调用我的FirebaseMessagingService。另外,请注意,我使用的是Android Emulator。代码:

public class MyAndroidFirebaseMsgService extends FirebaseMessagingService {
    private static final String TAG = "MyAndroidFCMService";
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(TAG, "From: " + remoteMessage.getFrom());
    }
}

//... 

public class MyAndroidFirebaseInstanceIdService extends FirebaseInstanceIdService {

    private static final String TAG = "MyAndroidFCMIIDService";

    @Override
    public void onTokenRefresh() {
        //Get hold of the registration token
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        //Log the token
        Log.d(TAG, "Refreshed token: " + refreshedToken);
    }
    private void sendRegistrationToServer(String token) {
        //Implement this method if you want to store the token on your server
    }
}

AndroidManifest。xml:

<service android:name=".MyAndroidFirebaseMsgService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
        <service android:name=".MyAndroidFirebaseInstanceIdService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>

服务器:

curl -H "Content-type: application/json" -H "Authorization:key=<MYKEY>"  -X POST -d '{"to": "<MYTOKEN>","data": {"hello": "This is a Firebase Cloud Messaging Device Group Message!"}}' https://fcm.googleapis.com/fcm/send

我如何解决它?

共有1个答案

帅锦
2023-03-14

这是正常的,只有当你的应用程序在前台时,通知消息才会传递到你的onMessageReceived回调。如果您的应用程序处于后台或已关闭,则通知中心会显示一条通知消息,该消息中的任何数据都会传递给用户点击通知后启动的意图。

您可以指定click\u操作,以指示用户点击通知时应启动的意图。如果未指定click\u操作,则使用主活动。

当意图启动时,您可以使用

getIntent(). getExtras();检索包含随通知消息一起发送的任何数据的Set。

有关通知消息的详细信息https://firebase.google.com/docs/cloud-messaging/android/receive#sample-接收

 类似资料:
  • 我正在使用数据消息,正如Firebase文档所建议的,但没有成功...

  • 我有以下超文本标记语言: 我想提取包含给定文本的h2标记后面的第二个DIV。 正如您可能注意到的,在第一个和第二个div中,p标签不在同一位置。 要在第一个h2之后提取DIV,以下公式将起作用: 但是要提取第二个,用“布拉2”替换“布拉1”将不起作用,因为“p”标签位于其他地方,所以静态选择器将是: 我需要的是一个单一的选择器公式,在这个公式中,无论p块在哪里,改变文本都会使它工作 我试过几种方法

  • 当用户未连接到xmpp时,我正在使用FCM通知进行聊天。 FCM中有两种通知模式1。通知消息2。数据消息 如果我的应用程序最近被清除,我将不会使用数据消息作为通知消息 这种方法适用于除奥利奥以外的所有版本。 对于Oreo,我只有在应用程序未连接到xmpp且处于前台时才会收到通知。我的onMessageReception方法正在被调用。 但当该应用程序仅为奥利奥而被删除或从最近的应用程序中删除时,情

  • 我试图创建一个使用谷歌地图的项目的定位器功能的华为变体。但我的问题是onMapReady()回调在getMapAsync()之后根本不触发 但是当使用huawei map依赖项时,getMapAsync()之后根本不会触发onMapReady回调

  • 我正在使用Firebase,并测试在应用程序处于后台时从服务器向应用程序发送通知。通知发送成功,它甚至出现在设备的通知中心上,但是当通知出现或者即使我单击它,我的FCMessagingService中的onMessageReceived方法也从未被调用。 当我在应用程序处于前台时进行测试时,调用了onMessageReceived方法,所有工作都很好。该问题发生在应用程序在后台运行时。 这是有意为

  • 我试图完成的是解析来自Remotemessage的传入数据,并根据自定义标记对其进行不同的处理。例如,如果数据映射包含一个名为“my_custom_tag”的字段,我希望完全覆盖弹出的标准firebase消息并编写一个自定义消息。 问题是,当应用程序在后台运行时,我放入onMessageReceived的任何代码都不会被触发。当应用程序在前台运行时,它工作得很好,但如果应用程序在后台,它将不会检测