2

AndroidクライアントアプリケーションをGoogle Cloud MessagingからFirebase Cloud Messagingに移行しようとしています。私は厳密にofficial tutorialをフォローしましたが、成功しませんでした - onMessageReceived()フォアグラウンドでアプリが呼び出されてもメソッドは呼び出されません。GCMをFirebaseCMに移行する:フォアグラウンドでonMessageReceived()が呼び出されていない

ここに私が触れたコードスニペットがあります。

build.gradle(プロジェクトレベル)

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

build.gradle(アプリケーションレベル)

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

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

のAndroidManifest.xml <application>タグのチャイルズとして

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

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

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

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); 
} 
} 

私は何かが間違っていて、登録が正しく行われたように見えるが、アプリケーションがフォアグラウンドであってもonMessageReceived()メソッドが呼び出されないかどうかを教えてください。前もって感謝します。

P.S.ところで、FirebaseコンソールにSHA-1キーを追加する必要がありますか?おそらく、これは問題を引き起こす可能性がありますか?しかしFirebaseは、この行動はオプションであると言います。

+1

はあなたにGoogleの-services.jsonファイルを追加しましたアプリ? Firebaseのコンソールや設定で追加の設定を行う必要があるかもしれません。ご確認くださいhttps://firebase.google.com/docs/android/setupすべてが正しく設定されている場合 – MatPag

+0

あなたはgoogle-services.jsonを追加しました。はい、アドバイスをいただきありがとうございます、私は行くと、セットアップを確認し、問題がそこにある可能性があります。 –

+0

ところで、FirebaseコンソールのSHA-1キーを追加する必要がありますか?おそらく、これは問題を引き起こす可能性がありますか?しかしFirebaseは、これはオプションであると言います。 –

答えて

1

あなたはFCMを使用している場合、あなたはこの

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

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

にあなたのサービスが正しく登録されていない交換する必要がありますが...

+1

この人が投稿したので、@ dmitry-smolyaninovクラスはGcmServiceではなくFirebaseServiceと呼ばれ、AndroidManifest.xmlに正しく登録されていません。 Upvoted。 –

+0

ああ、申し訳ありません。元のクラス名をすべてここに置き換えるのを忘れてしまった。私は、問題のあるクラスの参照と名前を、より明確かつ合理的にするために改名しました。プロジェクトクラスではまだGSM名がありますが、FCM機能は実装されています。私はこの問題を解決するまでリファクタリングをしません。 –

関連する問題