仅当app在前台时才调用GcmListenerService onMessageReceived

时间:2016-04-07 13:07:53

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

我有以下清单 -

<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();
        }
    }

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

如果锁定并且没有工作,GcmListenereService是否CREATE OR REPLACE FUNCTION insert_json( p_name character varying, p_content jsonb) 唤醒设备?怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

  

通知消息 - 这些消息旨在生成通知,而不会由应用程序进行中间处理。 如果应用正在运行,他们只会点击onMessageReceived。

     

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

我认为您正在发送通知消息,同时期望数据消息的行为能够启动。

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