我有以下清单 -
<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)
唤醒设备?怎么解决这个问题?
答案 0 :(得分:1)
用Google搜索并设法在github上找到这个帖子,这与您的关注点几乎相同,onMessageReceived() is only called when app is on foreground。原因是因为只发送通知消息。根据主题中包含的描述:
通知消息 - 这些消息旨在生成通知,而不会由应用程序进行中间处理。 如果应用正在运行,他们只会点击onMessageReceived。
数据消息 - 这些旨在以静默方式将数据传递到应用的消息服务。 即使应用程序在后台,它们也会点击onMessageReceived。然后,服务可以选择使用正常的系统通知API生成通知,也可以选择以静默方式处理邮件。
我认为您正在发送通知消息,同时期望数据消息的行为能够启动。
这里也是github线程中提到的SO post of Shiprack。希望这可以帮助。祝你好运。