第二个背景后未调用FirebaseMessagingService

时间:2017-02-14 06:12:38

标签: android firebase android-service android-notifications firebase-cloud-messaging

我尝试将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 个答案:

答案 0 :(得分:0)

这是按预期工作的,只有当您的应用位于前台时,通知消息才会传递到您的onMessageReceived回调。如果您的应用在后台或已关闭,则通知中心会显示通知消息,并且该消息中的所有数据都会传递给由于用户点击通知而启动的意图。

您可以指定click_action以指示在用户点击通知时应启动的意图。如果未指定click_action,则使用主要活动。

启动意图后,您可以使用

getIntent()getExtras(); 检索包含与通知消息一起发送的任何数据的集合。

有关通知消息https://firebase.google.com/docs/cloud-messaging/android/receive#sample-receive

的更多信息