【发布时间】:2017-02-03 16:40:54
【问题描述】:
2016 年 11 月 24 日编辑: 我刚刚收到 Firebase 支持的消息。他们认为这是华硕的问题。我使用的设备是华硕 ZenFone 2 Laser。这是他们的回应:
这里的问题是 Google 无法控制制造商如何 自定义他们的 android 版本。如果华硕跟随安卓 指导方针,然后通知应该工作(就像在其他 设备)。
我们发现的一件事是一些手机将应用程序强制停止 状态,这会阻止应用接收通知。
从您的测试结果来看,情况似乎并非如此。但这有 华硕可以阻止通知工作的许多其他方式,以及 很遗憾,我们无法检查所有这些。
您最好联系华硕支持并告知我们是否 有什么消息。
由于这对我的客户来说是一个低优先级的问题,所以我现在不打算进一步研究它。不幸的是,我没有时间在其他设备上测试同样的问题。如果将来这种情况发生变化,我会相应地更新此问题。到现在为止,我会认为这是未解决的。我很想知道其他人是否在其他品牌的手机上遇到同样的问题。
对于华硕用户,需要考虑一件事:power saving settings 会禁用通知。
2016 年 9 月 30 日编辑: 我已经就这个问题联系了 Firebase 支持。他们似乎同意 Arthur Thompson 的说法:
- 已停止的应用程序不应收到消息。
- 从最近列表中滑动应用应该不会停止应用。
有趣的是我的应用似乎没有停止。运行 adb shell dumpsys package | grep stopped 时,我的包返回:
User 0: installed=true hidden=false stopped=false notLaunched=false enabled=0
这表明它没有停止并且应该仍会收到消息(根据非常乐于助人的 Firebase 支持工程师的说法)。但是应用没有收到消息。
2016 年 9 月 27 日编辑:
我在有效负载中省略了notification 对象,并将该信息移到data 对象中。这并不能解决问题。我想我还不够清楚问题是什么。问题是,当应用程序被终止(从最近的应用程序中删除)时,该服务不再被调用或接收通知。
原帖
那里有类似的帖子,但没有一个解决这个问题或给出解决方案。
我正在实施 FCM 以获取通知。 (我是 FCM 的新手。)消息负载是 notification 和 data 的组合。当应用程序在前台时,服务会触发onMessageReceived()。当应用程序在后台(即我按下主页按钮)时,onMessageReceived() 不会触发(如预期的那样),而只是显示一个通知。我仍然可以看到MyFirebaseMessagingService.onCreate() 和onDestroy() 上的日志语句,非常棒。
现在,当我通过按下“最近使用的应用程序”按钮关闭应用程序并将应用程序滑出列表时,我不再收到任何通知。 onCreate() 和 onDestroy() 不再被调用。没有通知出现。我也希望在这种情况下出现通知。
示例负载:
{
"to":"token",
"priority":"high",
"notification": {
"body":"hello",
"title":"Message from Mom",
"click_action":"ACTIVITY_MAIN"
},
"data":{
"open":"chat"
}
}
FCM 服务:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onCreate() {
super.onCreate();
Log.v(DmcApplication.TAG, "Service Created");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.v(DmcApplication.TAG, "Service Destroyed...");
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.v(DmcApplication.TAG, "Message received!");
EventBus.getDefault().post(new MessageEvent(remoteMessage.getNotification().getBody()));
}
}
清单的一部分(如果相关)
<service
android:name="com.example.package.myFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
日志:
//Log when app is in foreground and message comes in:
V/coo: Service Created
V/coo: Message received!
V/coo: Service Destroyed...
//Log when app is in background and message comes in:
V/coo: Service Created
V/coo: Service Destroyed...
//Log when app is killed:
<silence...>
任何帮助将不胜感激,因为我已经坚持了好几天了。
【问题讨论】:
-
这是预期行为:当您的应用处于非活动状态时,系统会处理通知消息。如果您总是希望您的应用程序处理消息,请发送不带通知对象的数据消息。见this section in the Firebase documentation 和this answer I just wrote。
-
已经看到很多这种类型的询问,而且几乎都是一样的。请参阅以下答案:stackoverflow.com/a/37429495/4625829、stackoverflow.com/a/39505298/4625829。第二个答案中有一些细节,特别是来自不同用户的 cmets 部分,可能也会给你一些想法。
-
当一个应用程序被杀死时,它应该只被用户操作唤醒,即用户点击应用程序图标。因此,如果您的应用程序在被杀死后没有收到 FCM 消息,那么这是意料之中的。但是,从最近列表中滑动时不应终止应用程序,这是不正确的行为,您在什么设备上看到这个?
-
@Coo 想到了同样的事情。随意对您认为有帮助的帖子和答案进行投票。干杯!
-
@BackPacker 不,还没有。大约一周左右,我收到了一封来自 Firebase 的电子邮件,上面写着“抱歉回复晚了,我们仍在调查中”。所以我有点希望它会发生。当它发生时,我一定会更新。
标签: android firebase firebase-cloud-messaging