新しいFirebaseでは、通知の下で、開発者が特定のデバイスに通知を送信できると述べています。そのために、コンソールでFCMトークンを要求します。それは正確に何であり、どのようにしてそのトークンを取得できますか?
正確には何ですか?
FCMトークン、または google-cloud-messaging のようなregistrationToken
としてよく知られています。で説明されているように GCM FCM docs :
GCM接続サーバーによってクライアントアプリに発行され、メッセージを受信できるようにするID。登録トークンは秘密にしておく必要があることに注意してください。
どうすればそのトークンを取得できますか?
Update:getToken()
を呼び出すことでトークンを取得できますが、FCMの最新バージョンにより、FirebaseInstanceIdService.onTokenRefresh()
は に置き換えられましたFirebaseMessagingService.onNewToken()
-私の経験では、 はonTokenRefresh()
did と同じように機能します。
古い答え:
FCM docs に従って:
アプリの初回起動時に、FCM SDKはクライアントアプリインスタンスの登録トークンを生成します。単一のデバイスをターゲットにする場合、またはデバイスグループを作成する場合は、このトークンにアクセスする必要があります。
FirebaseInstanceIdServiceを拡張することにより、トークンの値にアクセスできます。マニフェストにサービスを追加したことを確認してから、onTokenRefreshのコンテキストでgetTokenを呼び出し、次のように値を記録します。
@Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // TODO: Implement this method to send any registration to your app's servers. sendRegistrationToServer(refreshedToken); }
OnTokenRefreshcallbackは、新しいトークンが生成されるたびに起動するため、コンテキストでgetTokenを呼び出すと、現在の利用可能な登録トークンに確実にアクセスできます。トークンがまだ生成されていない場合、FirebaseInstanceID.getToken()はnullを返します。
トークンを取得したら、アプリサーバーに送信し、好みの方法でトークンを保存できます。 APIの詳細については、インスタンスID APIリファレンスをご覧ください。
このグラドルを追加する簡単な手順は次のとおりです。
dependencies {
compile "com.google.firebase:firebase-messaging:9.0.0"
}
GCMのようなマニフェストに追加の許可は必要ありません。 GCMのようなマニフェストに受信者は必要ありません。 FCMでは、com.google.Android.gms.gcm.GcmReceiver
が自動的に追加されます。
リスナーサービスを移行します
InstanceIDListenerService
を拡張するサービスは、FCMトークンにアクセスする場合にのみ必要になりました。
あなたがしたい場合、これが必要です
マニフェストにサービスを追加
<service
Android:name=".MyInstanceIDListenerService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
Android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
MyInstanceIDListenerService
を変更してFirebaseInstanceIdService
を拡張し、コードを更新してトークンの更新をリッスンし、新しいトークンが生成されるたびにトークンを取得します。
public class MyInstanceIDListenerService extends FirebaseInstanceIdService {
...
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is also called
* when the InstanceID token is initially generated, so this is where
* you retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
}
詳細情報をご覧ください
FirebaseInstanceIdServiceは非推奨になりました。 FirebaseMessagingServiceのonNewTokenメソッドでトークンを取得する必要があります。
情報を取得できる「Firebase Cloud Messagingトークン」に関する更新があります。
私は本当にその変更について知りたかったので、サポートチームにメールを送信しました。 Firebase Cloud Messagingトークンは、すぐにサーバーキーに戻ります。変更するものは何もありません。まもなくサーバーキーが表示されます。
以下のリリースノートのgetToken()メソッドは廃止されました。代わりに、getInstanceIdを使用する必要があります。
https://firebase.google.com/docs/reference/Android/com/google/firebase/iid/FirebaseInstanceId
Task<InstanceIdResult> task = FirebaseInstanceId.getInstance().getInstanceId();
task.addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult authResult) {
// Task completed successfully
// ...
String fcmToken = authResult.getToken();
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
}
});
同じリスナーで成功と失敗を処理するには、OnCompleteListenerをアタッチします。
task.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (task.isSuccessful()) {
// Task completed successfully
InstanceIdResult authResult = task.getResult();
String fcmToken = authResult.getToken();
} else {
// Task failed with an exception
Exception exception = task.getException();
}
}
});
また、FirebaseInstanceIdServiceクラスは廃止され、onTokenRefreshの代わりにFireBaseMessagingServiceのonNewTokenメソッドが登場しました。
ここでリリースノートを参照できます https://firebase.google.com/support/release-notes/Android
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Use this code logic to send the info to your server.
//sendRegistrationToServer(s);
}