我最近更新了我的应用以通过 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中也没有日志跟踪。有人对此有暗示吗?
答案 0 :(得分:14)
好的,结果华为有一些节电功能,导致某些应用无法接收通知,因此它与Android版本无关。
我无法找到以编程方式修复此问题的方法,但如果有人感兴趣,请转到设置/受保护的应用并选择您要允许运行的应用在后台,所以他们收到通知。
更多信息here。
答案 1 :(得分:0)
转到设置应用选择您的应用,然后确保勾选显示通知和取消限制以启动
答案 2 :(得分:-1)
听起来你在Manifest文件中缺少唤醒锁定权限