2016-03-21 20 views
14

Provo a fare lavoro gcm.Impossibile risolvere il servizio intent di destinazione, Errore durante il recapito del messaggio: ServiceIntent non trovato

Quando il nostro server invia una notifica push Ho questi due errori nel registro di mio app:

E/GcmReceiver (8049): Impossibile risolvere bersaglio servizio di intenti, saltando nomeclasse applicazione E/GcmReceiver (8049): Errore durante la consegna del messaggio : ServiceIntent non trovato.

Nella cartella della mia app ho ricevuto il file google-services.json.

ho aggiunto i 2 servizi necessari e il ricevitore al mio manifesto:

<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.myapppackage.application" /> 
     </intent-filter> 
    </receiver> 


    <service 
     android:name="com.myapppackage.application.gcm.newgcm.RegisterGCMTokenService" 
     android:exported="false"> 
    </service> 


    <service 
     android:name="com.myapppackage.application.gcm.newgcm.MyInstanceIDListenerService" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.iid.InstanceID"/> 
     </intent-filter> 
    </service> 

ho anche aggiunto questi due come classi Java. Il token gcm che fornisce e carica sul nostro server va bene. Ho anche ricevuto l'evento "push", ma in qualche modo ho ricevuto quei 2 errori sopra e nessun messaggio.

ho aggiunto il mio numero di progetto dalla console API di Google per strings.xml come 'google_app_id'

Le chiavi API dovrebbe essere tutto a posto perché io capisco l'evento spinta, ma in qualche modo il messaggio non è previsto.

dipendenze a livello di applicazione di mio Gradle avere:

compile 'com.google.android.gms:play-services:8.+' 

dipendenze a livello di progetto del mio Gradle hanno:

classpath 'com.google.gms:google-services:1.3.1' 

Così che diamine ?! Per favore aiutatemi se potete.

+0

hai cambiato com.myapppackage.application nel nome del pacchetto? –

+0

Sì. Altri 11 caratteri devo digitare per inviare questo messaggio. –

+0

Ti manca un altro servizio nel manifest. quello che gestisce la notifica ed estende GcmListenerService –

risposta

5

Dovresti avere questi 3 servizi nel tuo manifest. Ti stai perdendo quello con l'azione com.google.android.c2dm.intent.RECEIVE

<service 
     android:name="com.myapppackage.application.gcm.GcmIntentService" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     </intent-filter> 
    </service> 

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

    <service 
     android:name="com.myapppackage.application.gcm.RegistrationIntentService" 
     android:exported="false"/> 
+0

Il gcmIntentService si estende da qualsiasi altra classe? Dai documenti sembra che dovresti estendere GcmListenerService. Dobbiamo estendere entrambi? – Imanol

0

Hey È necessario aggiungere classe MyGcmListenerService per ricevere la notifica:

public class MyGcmListenerService extends GcmListenerService { 

@Override 
public void onMessageReceived(String from, Bundle data) { 
    String message = data.getString("message"); 
} 

è necessario aggiungere questa classe come servizio in AndroidMaifest.xml

<service android:name="com.mypackage.application.services.MyGcmListenerService" 
     android:exported="false" > 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
    </intent-filter> 
    </service> 
Problemi correlati