【问题标题】:GcmListenerService onMessageReceived called only when app is in foregroundGcmListenerService onMessageReceived 仅在应用程序处于前台时调用
【发布时间】:2016-04-07 13:07:52
【问题描述】:

我有以下清单 -

<service
    android:name=".RegistrationIntentService"
    android:exported="false" />

<service
    android:name=".TestGcmListenerService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.example.test" />
    </intent-filter>
</service>

<service
    android:name=".RegistrationIDListenerService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID" />
    </intent-filter>
</service>

<receiver
    android:name="com.google.android.gms.gcm.GcmReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />

        <category android:name="com.example.test" />
    </intent-filter>
</receiver>

并遵循onMessageReceived 方法 -

@Override
    public void onMessageReceived(String from, Bundle data) {
        ObjectMapper objectMapper = new ObjectMapper();
        Message message;
        try {
            message = objectMapper.readValue(String.valueOf(data.get("message")), Message.class);
            MessageNotification.notify(this, message, 1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

发生的情况是,onMessageReceived 仅在应用程序处于前台时才被调用。否则它不会被调用并且不会显示通知。当我打开应用程序时,所有通知都会立即显示。

GcmListenereService 是否不会在锁定时唤醒设备并执行工作?如何解决?

【问题讨论】:

    标签: android push-notification google-cloud-messaging gcmlistenerservice


    【解决方案1】:

    用谷歌搜索并设法在 github 上找到了这个线程,这与您关注的问题几乎相同,其中onMessageReceived() is only called when app is on foreground。原因是只发送通知消息。根据线程中包含的描述:

    通知消息 - 这些消息旨在生成通知,而无需应用程序进行中间处理。 只有在应用正在运行时才会点击 onMessageReceived。

    数据消息 - 这些旨在以静默方式将数据传递给应用的消息传递服务。 即使应用程序在后台,他们也会点击 onMessageReceived。 然后服务可以选择使用正常的系统通知 API 生成通知,或者它可以选择静默处理消息。

    我认为您在发送通知消息的同时期望数据消息的行为会起作用。

    这也是github线程中提到的SO post of Shiprack。希望这可以帮助。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2019-07-02
      • 1970-01-01
      • 2018-06-11
      • 2017-04-22
      相关资源
      最近更新 更多