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は、この行動はオプションであると言います。
はあなたにGoogleの-services.jsonファイルを追加しましたアプリ? Firebaseのコンソールや設定で追加の設定を行う必要があるかもしれません。ご確認くださいhttps://firebase.google.com/docs/android/setupすべてが正しく設定されている場合 – MatPag
あなたはgoogle-services.jsonを追加しました。はい、アドバイスをいただきありがとうございます、私は行くと、セットアップを確認し、問題がそこにある可能性があります。 –
ところで、FirebaseコンソールのSHA-1キーを追加する必要がありますか?おそらく、これは問題を引き起こす可能性がありますか?しかしFirebaseは、これはオプションであると言います。 –