У меня возникла проблема, когда я пытаюсь получитьToken() из Firebase, но не могу получить токен из-за следующей ошибки:
Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.iid.FirebaseInstanceId.getInstanceId()' on a null object reference
@cutiko добавил мой файл манифеста в основной пост.
Вам нужен только MyFirebaseMessagingService firebase.google.com/docs/cloud-messaging/android/…
Похоже, ваш обмен сообщениями Firebase не инициализируется. Вы сделали что-нибудь, чтобы предотвратить автоматическую инициализацию, как указано здесь. firebase.google.com/docs/cloud-messaging/android/client




FirebaseInstanceId.getInstance() устарел
Вы можете получить firebase_token в функции onNewToken()
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
super.onNewToken(s);
// s is your token
// Do whatever you want with it
// You can store it in SharedPreferences
}}
Я уже использую onNewToken, как вы можете видеть в моем коде. Я думал, что FirebaseInstanceId.getInstance().getInstanceId() — это новый нерекомендуемый метод в Activitis? Почему я получаю значение null для FirebaseInstanceId.getInstance(), когда пытаюсь получить к нему доступ в моем файле Notification.java?
Нет getInstanceId() устарел. См. здесь stackoverflow.com/questions/51125169/…
В нем говорится: «Этот метод устарел. В пользу getInstanceId ()», который я использую.
Я не уверен, но вам нужно инициализировать Firebase в своей деятельности.
FirebaseApp.initializeApp (ваша активность);
please check if you added this (com.google.firebase:firebase-messaging:17.3.4')dependency in your gradle file. for frther help you can get the help from here. and if you want to get the Token this way.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
разве getInstance().getToken() сейчас не устарел?
Я сталкиваюсь с той же проблемой, когда создаю приложение с помощью BUCK, но я могу правильно использовать Firebase при сборке с Gradle. Вы можете проверить, что Firebase был инициализирован. Вы должны увидеть это в своих журналах, если это так:
I/FirebaseInitProvider: FirebaseApp initialization successful
Глядя на документацию здесь: https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId, FirebaseInstanceId.getInstance().getToken() устарел в пользу getInstanceId().
Вместо этого в этой документации показано, как получить текущий токен firebase: https://firebase.google.com/docs/cloud-messaging/android/client?authuser=1#retrieve-the-current-registration-token
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.w(TAG, "getInstanceId failed", task.getException());
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
// Log and toast
String msg = getString(R.string.msg_token_fmt, token);
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
В этой документации говорится, что метод onNewToken вызывается при обновлении токена: https://firebase.google.com/docs/cloud-messaging/android/client?authuser=1#monitor-token-generation
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is called when the InstanceID token
* is initially generated so this is where you would retrieve the token.
*/
@Override
public void onNewToken(String token) {
Log.d(TAG, "Refreshed token: " + token);
// If you want to send messages to this application instance or
// manage this apps subscriptions on the server side, send the
// Instance ID token to your app server.
sendRegistrationToServer(token);
}
С Gradle я смог заставить это работать с этими библиотеками:
implementation 'com.google.firebase:firebase-messaging:18.0.0' implementation 'com.google.firebase:firebase-auth:17.0.0'
Я перешел с GCM на FCM, и документация была проста для того, чтобы заставить его работать с Gradle: https://developers.google.com/cloud-messaging/android/android-migrate-fcm
Эта документация также кажется простой, если вы используете Gradle для сборки: https://firebase.google.com/docs/cloud-messaging/android/client?authuser=1#monitor-token-generation
Ваша служба зарегистрирована в манифесте?