从最近列表中刷新应用时,未调用Android Firebase MyFirebaseMessagingService

时间:2016-09-26 11:01:48

标签: android firebase firebase-cloud-messaging

编辑24/11/2016: 我刚收到Firebase支持部门的消息。他们认为这是一个华硕问题。我正在使用的设备是Asus ZenFone 2 Laser。以下是他们的回复:

  

这里的问题是谷歌不控制制造商的方式   自定义他们的android版本。如果华硕跟随Android   指南,然后通知应该工作(就像另一方面   设备)。

     

我们发现的一件事是,有些手机会强制停止应用   state,阻止应用程序接收通知。

     

从您的测试结果来看,情况似乎并非如此。但是这里有   华硕可以通过许多其他方式阻止通知工作,以及   不幸的是我们无法检查所有这些。

     

最好是联系华硕支持并告诉我们是否   有任何消息。

由于这对我的客户来说是一个低优先级的问题,我现在不打算进一步追求它。遗憾的是,我没有时间在其他设备上测试相同的问题。如果这种情况在未来发生变化,我将会更新此问题。到现在为止,我会考虑这个未解决的问题。我很想知道其他品牌手机上是否有其他问题。

至于华硕用户,有一点需要考虑:有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上相当新。)消息有效负载是notificationdata的组合。当应用程序位于前台时,服务会触发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...>

任何帮助都会非常感激,因为我已经坚持了几天。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,看着你的“优先级:高”字符串,它看起来像你发送到Android和iOS。我最终删除了消息的通知部分,只是将我需要的信息放入数据消息中。数据有效负载部分即使在后台或从最近的应用程序中删除时也会触发您的服务。

在我的服务器上,我检查用户是否从iOS设备或Android设备注册了他们的令牌,并相应地发送了有效负载,其中包含iOS设备的通知负载和Android设备的数据负载。