Что такое токен FCM в Firebase?
в новой Firebase под уведомлением они упомянули, что разработчик может отправлять уведомления на конкретное устройство. Для этого в консоли он запрашивает маркер FCM. Что это такое и как я могу получить этот знак?
5 ответов
что это такое?
маркер FCM, или широко известный как registrationToken
как и в google-облако-обмен сообщениями. Как описано в GCM docs:
идентификатор, выданный серверами подключения GCM клиентскому приложению, который позволяет ему получать сообщения. Обратите внимание, что регистрационные токены должны храниться в секрете.
как я могу сделать это токен?
обновление: токен все еще можно получить, вызвав getToken()
, однако, согласно последней версии FCM,FirebaseInstanceIdService.onTokenRefresh()
был заменен FirebaseMessagingService.onNewToken()
-- что по моему опыту функционирует так же, как onTokenRefresh()
сделал.
ответ:
на FCM docs:
при первоначальном запуске приложения FCM SDK генерирует регистрационный маркер для экземпляра клиентского приложения. Если вы хотите настроить таргетинг на отдельные устройства или создать группы устройств, вам необходимо получить доступ к этому маркеру.
вы можете получить доступ к значению токена, расширив FirebaseInstanceIdService. Убедитесь, что вы добавили службу в манифест, затем вызовите getToken в контексте onTokenRefresh и зарегистрируйте значение, как показано:
@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.
вот простые шаги добавьте этот gradle:
dependencies {
compile "com.google.firebase:firebase-messaging:9.0.0"
}
никаких дополнительных разрешений не требуется в манифесте, таком как GCM.
Никакой приемник не нужен для манифеста как GCM. С FCM,com.google.android.gms.gcm.GcmReceiver
добавляется автоматически.
миграция службы прослушивателя
сервис расширение InstanceIDListenerService
теперь требуется, только если вы хотите получить доступ к маркеру FCM.
это необходимо, если вы хотите
- управление маркерами устройств для отправки сообщений к одиночному прибору сразу, или Отправляйте сообщения в группу устройств или
- отправлять сообщения в группу устройств или
- подписывайте устройства на разделы с API управления подписками сервера.
добавить службу в манифесте
<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 теперь устарел. вы должны получить токен в методе onNewToken в FirebaseMessagingService.
У меня есть обновление о "Firebase Cloud Messaging token", которое я мог бы получить информацию.
Я действительно хотел знать об этом изменении, поэтому просто отправил письмо в Службу поддержки. Маркер обмена сообщениями Firebase Cloud скоро вернется к ключу сервера. Ничего не изменится. Мы можем увидеть ключ сервера снова после скоро.
они устарели метод 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 устарел, и они придумали метод onNewToken в FireBaseMessagingService в качестве замены onTokenRefresh,
вы можете обратиться к примечаниям к выпуску здесь, 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);
}