1

我有以下表現 -GcmListenerService onMessageReceived稱爲只有當應用程序在前臺

<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如果鎖定並喚醒設備工作?如何解決這個問題?

回答

1

谷歌搜索和設法找到這個線程在github上,這幾乎是你的關注相同,其中onMessageReceived() is only called when app is on foreground。原因是因爲只發送了通知消息。按照包含在該線程的描述:

通知消息 - 這些是爲了生成與由應用程序沒有中間處理的通知。 如果應用程序正在運行,它們只會觸發onMessageReceived。

數據消息 - 這些旨在悄悄地將數據傳遞到應用程序的消息服務。 即使應用程序在後臺,它們也會觸發onMessageReceived。服務可能會選擇使用常規系統通知API生成通知,或者可能會選擇靜默處理該消息。

我想您發送通知消息,同時期待行爲數據電文在踢。

這裏也是在GitHub的線程中提到的SO post of Shiprack。希望這可以幫助。祝你好運。

相關問題