#firebase #flutter #firebase-cloud-messaging
#firebase #flutter #firebase-облако-обмен сообщениями
Вопрос:
FCM getToken()
всегда возвращает null на реальных устройствах, но отлично работает на эмуляторе, я не знаю, что вызывает это. Вот как я использую getToken()
:
FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
String fcmToken = "";
await _firebaseMessaging.getToken().then((value) async {
fcmToken = value;
if (fcmToken != "") {
await _userCollection.doc(user.id).set({
'email': user.email,
'name': user.name,
'noHp': user.noHp,
'alamat': user.alamat,
"email_verification": user.emailVerification,
"phone_verification": user.phoneVerification,
"device_token": fcmToken,
});
}
return;
});
Реальное устройство, которое я использую, — это Android Marshmallow.
Комментарии:
1. Куда вы возвращаете токен ? приведенный выше фрагмент только получает и устанавливает данные, возврата не происходит, кроме последнего
return
, который является пустым2. Я использую его для немедленной установки device_token, и он отлично работает на эмуляторе.
3. Должен ли я использовать его так:
String fcmToken = await _firebaseMessaging.getToken().then((value) async { return value; });
?4. Вроде того, но поскольку вы устанавливаете его немедленно, это не сильно изменится, тем не менее попробуйте, как вы упомянули, добавив
.catch(err)
, чтобы вы могли определить, происходит ли какая-либо ошибка5. Хорошо, хорошая идея, я попробую это
Ответ №1:
Ниже приведен метод для токена et :
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
_firebaseMessaging.getToken().then((String token) {
assert(token != null);
saveToken(token);
});
Я сохраняю токен в pref для дальнейшего использования. вы можете изменить его в соответствии с вашими требованиями.
void saveToken(String token) async {
var prefs = await SharedPreferences.getInstance();
await prefs.setString(Constants.DeviceToken, token);
}
Не стесняйтесь комментировать, если возникнут какие-либо проблемы. Я использую в своем текущем приложении.
Для iOS вам нужно запросить разрешение.
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(
sound: true, badge: true, alert: true, provisional: true));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
Ответ №2:
Для пользователей с обновленными версиями появился новый способ доступа к токену:
String token = await FirebaseMessaging.instance.getToken();
Вы сможете получить доступ к токену только после инициализации Firebase и запроса разрешений.
Комментарии:
1. Я пытаюсь использовать это, но ошибка гласит следующее,
FirebaseError: Firebase: firebase.messaging() takes either no argument or a Firebase App instance. (app/invalid-app-argument).