在后台应用时未收到Firebase云消息传递

时间:2016-06-24 14:47:10

标签: android firebase firebase-cloud-messaging

我最近更新了我的应用以通过 FCM 发送消息,当应用程序在Jelly Bean上运行时,它的效果非常好。问题是它不是 Lollipop 并且应用程序位于背景

我读了documentation并且声明当有效载荷是数据消息时,它将由 onMessageReceived()处理。我发送的数据有效负载不是通知,只要它是JellyBean就可以正确处理。对于Lollipop,它仅在应用程序位于前台时处理消息。如果没有,没有任何反应。

这就是我的FirebaseMessagingService的开头:

public class FirebaseBroadcastReceiverService extends FirebaseMessagingService {
    private final String TAG = FirebaseBroadcastReceiverService.class.getName();

    @Override
    public void onMessageReceived(RemoteMessage message){
        Log.i(TAG, "A message is received");
        String from = message.getFrom();
        Map<String, String> data = message.getData();
        .....
    }
}

清单:

<application
    android:name=".controller.application.AppResources"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher_shadow"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@android:style/Theme.Black.NoTitleBar">

   <service
        android:name=".model.firebase.FirebaseListenerService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>
    <service android:name=".model.firebase.FirebaseBroadcastReceiverService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    .......
</application>

有效载荷:

{ 
    "data": {
        "test": "test"
    },
    "to" : "MY FCM REGISTRATION ID"
}

使用授权和内容类型标头通过POST将其发送到 https://fcm.googleapis.com/fcm/send

我可能已经阅读了与此相关的所有其他SO线程,但我找不到它的答案,并且Android Monitor中也没有日志跟踪。有人对此有暗示吗?

3 个答案:

答案 0 :(得分:14)

好的,结果华为有一些节电功能,导致某些应用无法接收通知,因此它与Android版本无关。

我无法找到以编程方式修复此问题的方法,但如果有人感兴趣,请转到设置/受保护的应用并选择您要允许运行的应用在后台,所以他们收到通知。

更多信息here

答案 1 :(得分:0)

转到设置应用选择您的应用,然后确保勾选显示通知和取消限制以启动

答案 2 :(得分:-1)

听起来你在Manifest文件中缺少唤醒锁定权限