2

Ich versuche, die Android-Client-App von Google Cloud Messaging zu Firebase Cloud Messaging zu migrieren. Ich folgte streng einer official tutorial, aber nicht erfolgreich - onMessageReceived() Methode wird nicht aufgerufen, wenn App im Vordergrund.Migration von GCM zu FirebaseCM: onMessageReceived() nicht im Vordergrund aufgerufen

Also hier sind Code-Schnipsel, die ich berührte.

build.gradle (Projektebene)

dependencies { 
    //other stuff 
    classpath 'com.google.gms:google-services:3.0.0' 
} 

build.gradle (APP-Ebene)

apply plugin: 'com.google.gms.google-services' //this line in the bottom 

und

dependencies { 
    //other stuff here 
    compile 'com.google.firebase:firebase-messaging:9.0.0' 
} 

AndroidManifest.xml

<service android:name=".service.FirebaseService"> 
    <intent-filter> 
    <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
    </intent-filter> 
</service> 

und

<service 
    android:name=".service.MyInstanceIDListenerService" 
    android:exported="false"> 
    <intent-filter> 
     <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
    </intent-filter> 
</service> 

und

<service 
    android:name=".service.RegistrationIntentService" 
    android:exported="false" /> 

als Childs von <application> Tag.

MyInstanceIDListenerService.java

public class MyInstanceIDListenerService extends FirebaseInstanceIdService { 

final String TAG = "Firebase instance id"; 

@Override 
public void onTokenRefresh() { 

    String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
    Log.d(TAG, "Refreshed token: " + refreshedToken); 
    sendRegistrationToServer(refreshedToken); 
} 

private void sendRegistrationToServer(String token) { 
    Intent intent = new Intent(RegistrationIntentServiceEvent.TOKEN); 
    intent.putExtra(RegistrationIntentServiceEvent.TOKEN, token); 
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 
} 

FirebaseService.java

public class FirebaseService extends FirebaseMessagingService { 


//OtherStuff 

@Override 
public void onMessageReceived(RemoteMessage message){ 
    String from = message.getFrom(); 
    Map data = message.getData(); 

    Log.d(TAG, "Message: " + from); //Never appears in logcat 
    //other stuff 
} 
} 

RegistrationIntentService

public class RegistrationIntentService extends IntentService { 

private static final String TAG = "RegIntentService"; 

public RegistrationIntentService() { 
    super(TAG); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    try { 
     synchronized (TAG) { 
      String token = FirebaseInstanceId.getInstance().getToken(); 
      Log.i(TAG, "GCM Registration Token: " + token);//This works fine 
      //and shows this line - 12-19 17:59:33.295 3146-5386/ru.bpc.mobilebank.bpc I/RegIntentService: GCM Registration Token: *some_token* 

      sendRegistrationToServer(token); 
     } 
    } catch (Exception e) { 
     Log.d(TAG, "Failed to complete token refresh", e); 
    } 
} 

private void sendRegistrationToServer(String token) { 
    Intent intent = new Intent(RegistrationIntentServiceEvent.TOKEN); 
    intent.putExtra(RegistrationIntentServiceEvent.TOKEN, token); 
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 
} 

Bitte sagen Sie mir, ob ich etwas falsch gemacht habe und warum Anmeldungen anscheinend ordnungsgemäß durchgeführt wurden, aber die Methode onMessageReceived() wird nie aufgerufen, selbst wenn die App im Vordergrund ist. Danke im Voraus.

P.S. Übrigens, ist das Hinzufügen von SHA-1-Schlüsseln in der Firebase-Konsole erforderlich? Vielleicht könnte dies das Problem verursachen? Aber Firebase sagt, dass diese Aktion optional ist.

+1

ersetzen Haben Sie in Google-services.json Datei hinzugefügt Ihre App? Möglicherweise müssen Sie eine zusätzliche Einrichtung in der Firebase-Konsole oder -Konfiguration vornehmen. Überprüfen Sie hier https://firebase.google.com/docs/android/setup, wenn Sie alles richtig eingerichtet haben – MatPag

+0

Ye, sicher, ich habe google-services.json hinzugefügt. Ye, danke für den Rat, ich werde gehen und überprüfen Setup, Problem könnte da sein. –

+0

Übrigens ist das Hinzufügen von SHA-1-Tasten in Firebase-Konsole notwendig? Vielleicht könnte dies das Problem verursachen? Aber Firebase sagt, das ist optional. –

Antwort

1

wenn Sie FCM verwenden, dann sollten Sie diese

<service android:name=".service.GcmService"> 
    <intent-filter> 
    <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
    </intent-filter> 
</service> 

zu

<service android:name=".service.FirebaseService"> 
    <intent-filter> 
    <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
    </intent-filter> 
</service> 

Ihren Dienst nicht ordnungsgemäß registriert ..

+1

Da dieser Typ gepostet hat, heißt die @ dmitry-smolyaninov-Klasse jetzt FirebaseService und nicht GcmService, der Dienst ist in AndroidManifest.xml nicht ordnungsgemäß registriert. Upvoted. –

+0

Oh, Entschuldigung. Ich habe nur vergessen, alle ursprünglichen Klassennamen hier zu ersetzen. Ich habe Referenzen und Namen bestimmter Klassen umbenannt, um sie klarer und vernünftiger zu machen. In Projektklassen noch GSM-Namen, aber FCM-Funktionalität implementieren. Ich mache einfach keinen Refactor, um dieses Problem zu lösen. –

Verwandte Themen