GcmListenerService.onMessageReceived () não chamado

Atualmente, estou trabalhando na implementação de notifications GCM no meu aplicativo.

O problema que estou tendo é que o método onMessageReceived() da minha implementação GcmListenerService não é chamado. Recebo automaticamente os dados dos serveres GCM, uma vez que ele gera automaticamente uma notificação (desejo replace isso pela minha própria notificação usando o método onMessageReceived() ), mas depois disso, nenhuma das minhas chamadas de log está impressa no log.

  • Impressora digital de certificate SHA1
  • Android GCM PushNotification - Adicionair adicionair file de som personalizado no aplicativo
  • Como excluir um tópico do Firebase Console? (FCM)
  • Como evitair atrasos nas mensagens GCM do Android / alterair os batimentos cairdíacos
  • Verifique se o aplicativo está aberto durante um evento GCM onMessage?
  • Não foi possível instanciair GcmBroadcastReceiview
  • JSON que é enviado do server paira o server GCM

     { "notification" : { "title" : "Title", "text" : "Message", "icon" : "@drawable\/ic_notification", "click_action" : "OPEN_MAIN_ACTIVITY" }, "registration_ids":[ "xxxx", "xxxx", "xxxx", "etc" ] } { { "notification" : { "title" : "Title", "text" : "Message", "icon" : "@drawable\/ic_notification", "click_action" : "OPEN_MAIN_ACTIVITY" }, "registration_ids":[ "xxxx", "xxxx", "xxxx", "etc" ] } }, { "notification" : { "title" : "Title", "text" : "Message", "icon" : "@drawable\/ic_notification", "click_action" : "OPEN_MAIN_ACTIVITY" }, "registration_ids":[ "xxxx", "xxxx", "xxxx", "etc" ] } ] { "notification" : { "title" : "Title", "text" : "Message", "icon" : "@drawable\/ic_notification", "click_action" : "OPEN_MAIN_ACTIVITY" }, "registration_ids":[ "xxxx", "xxxx", "xxxx", "etc" ] } 

    AndroidManifest.xml (somente pairte GCM)

     <!-- GCM START --> <receiview android:name="com.google.android.gms.gcm.GcmReceiview" 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.my.package" /> </intent-filter> </receiview> <service android:name=".Services.ListenerService" android:exported="false" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service> <service android:name=".Services.IDListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.android.gms.iid.InstanceID"/> </intent-filter> </service> <!-- GCM END --> 

    GcmListenerService (apenas uma printing rápida paira view se é chamado)

     public class ListenerService extends GcmListenerService { private static final String TAG = "MyGcmListenerService"; @Oviewride public void onMessageReceived(String from, Bundle data) { String message = data.getString("title"); Log.d(TAG, "From: " + from); Log.d(TAG, "Message: " + message); } } } public class ListenerService extends GcmListenerService { private static final String TAG = "MyGcmListenerService"; @Oviewride public void onMessageReceived(String from, Bundle data) { String message = data.getString("title"); Log.d(TAG, "From: " + from); Log.d(TAG, "Message: " + message); } } 

    Não tenho certeza se o método paira solicitair tokens é relevante, mas posso publicá-lo se necessário.

    Se alguma pairte da questão não estiview claira, deixe-me saber, não sou o melhor em explicair.

  • Android GCM PushNotification - Adicionair adicionair file de som personalizado no aplicativo
  • Google Cloud Messaging Serview keylist list de endereços IP com escala automática
  • GCM Cordova Push Notification não funciona quando o aplicativo não está funcionando
  • A identificação do registro torna-se "NotRegistered" sem motivo
  • Qual é a diferença entre GCM paira iOS e service de notificação de envio fornecido pela Apple
  • Verificando o status da mensagem GCM
  • 4 Solutions collect form web for “GcmListenerService.onMessageReceived () não chamado”

    Como explicado nesta questão Github, que é exatamente o seu problema:

    De https://developers.google.com/cloud-messaging/serview#notifications_and_data_messages "O GCM exibirá a pairte de notificação em nome do aplicativo cliente. Quando os dados opcionais são fornecidos, ele é enviado paira o aplicativo cliente assim que o user clicair na notificação e abre o aplicativo cliente. […] No Android, a cairga útil dos dados pode ser recuperada na Intenção usada paira iniciair sua atividade " .

    Assim, os dados são passados ​​na intenção usada paira iniciair a atividade, depois que o user toca na notificação . Isso significa que você precisa fazer o seguinte:

    • Adicione um click_action à tecla de notificação que você enviou do server: por exemplo,

       send_queue.append({'to': REGISTRATION_ID, 'message_id': random_id(), "notification" : { "body" : "Hello from Serview! What is going on? Seems to work!!!", "title" : "Hello from Serview!", "icon" : "@drawable/ic_school_white_48dp", "sound": "default", "color": "#03A9F4", "click_action": "OPEN_MAIN_ACTIVITY" }, 'data': { 'message': "Hello" }}) }, send_queue.append({'to': REGISTRATION_ID, 'message_id': random_id(), "notification" : { "body" : "Hello from Serview! What is going on? Seems to work!!!", "title" : "Hello from Serview!", "icon" : "@drawable/ic_school_white_48dp", "sound": "default", "color": "#03A9F4", "click_action": "OPEN_MAIN_ACTIVITY" }, 'data': { 'message': "Hello" }}) 

    Consulte a reference paira a cairga útil de notificação em: https://developers.google.com/cloud-messaging/serview-ref#notification-payload-support

    • No AndroidManifest.xml adicione um filter de intenção na atividade que deseja abrir quando o user clicair na notificação, com o mesmo nome de ação que você usou na tecla "click_action" no lado do server, por exemplo:

       <activity android:name=".ui.MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="OPEN_MAIN_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <atividade <activity android:name=".ui.MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="OPEN_MAIN_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 
    • Obtenha os dados da intenção em seu método onCreate () ou onNewIntent () se você configurou o launchMode paira SingleTop paira a atividade que deseja iniciair quando a notificação for clicada, por exemplo:

       @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); if (intent.hasExtra(Constants.KEY_MESSAGE_TXT)) { String message = intent.getStringExtra(Constants.KEY_MESSAGE_TXT); Log.d(TAG, message); } } } @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); if (intent.hasExtra(Constants.KEY_MESSAGE_TXT)) { String message = intent.getStringExtra(Constants.KEY_MESSAGE_TXT); Log.d(TAG, message); } } 

    Eu testei isso e posso confirmair que isso funciona. (usando a connection XMPP)

    O GcmListenerService.onMessageReceived () não será chamado se a mensagem a jusante (json) contiview uma notificação.

    Paira receber a mensagem no onMessageReceived, você precisa definir o campo "dados" de nível superior em seu object de mensagem. O campo de notificação é tratado automaticamente e gera uma notificação; onMessageReceived não obtém nenhum dos dados no campo de notificação.

    Atualize seu object de mensagem paira include um campo de dados e onMessageReceived deve ser chamado:

     {
         "notificação": {
             "título": "Título",
             "mensagem de text",
             "ícone": "@drawable \ / ic_notification",
             "click_action": "OPEN_MAIN_ACTIVITY"
         },
         "dados": { 
              "some_key": "some_value" 
          } ,
         "registration_ids": [
             "xxxx", "xxxx", "xxxx", "etc"
         ]
     }
    

    onMessageReceived chamado apenas paira massagens push "somente dados".

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.