Мне не удается сохранить токен пользователя для пользователей, которые входят в мое приложение.
Я реализовал приведенный ниже код, который помог создать раздел пользователя и раздел токена в моей базе данных в Firestore.
@override
void initState() {
super.initState();
_saveDeviceToken();
}
_saveDeviceToken() async {
String uid = await widget.auth.currentUser();
String fcmToken = await _firebaseMessaging.getToken();
if (fcmToken != null) {
var tokens = _db
.collection('users')
.document(uid)
.collection('tokens')
.document(fcmToken);
await tokens.setData({
'token': fcmToken,
});
}}
Как я могу получить токен от каждого пользователя, который входит в систему из кода, который я реализовал?
0
Lynette Museni
29 Окт 2019 в 13:50
Я не уверен, что понимаю вопрос. Что происходит, когда вы запускаете код, которым поделились? И чем это отличается от того, что вы хотите, чтобы произошло?
– Frank van Puffelen
29 Окт 2019 в 15:31
Мне удалось получить токен со своего устройства, однако я не вижу токен для других устройств/пользователей при входе в систему. Я хочу видеть токен для всех устройств, которые входят в систему.
– Lynette Museni
29 Окт 2019 в 16:38
Это все еще не очень ясно. Вы говорите, что этот код записывает токен для вашего собственного устройства в базу данных, но когда вы запускаете тот же код на устройствах ваших пользователей, он не записывает их токены в базу данных?
– Frank van Puffelen
29 Окт 2019 в 16:40
Да!!! Именно это и происходит.
– Lynette Museni
29 Окт 2019 в 18:18
В этом случае мы мало что можем сказать, основываясь на коде. Вы захотите получить доступ к выходным данным logcat одного из неисправных устройств и проверить наличие ошибок. Я бы также добавил подробное ведение журнала, чтобы вы могли видеть, где именно эти устройства выходят из строя.
– Frank van Puffelen
29 Окт 2019 в 19:05
1 ответ
Вот код, который я использую, чтобы сделать то, что, я думаю, вы также хотите сделать:
Во-первых, получение токена Firebase Cloud Messaging:
void getFcmToken() async {
String token = await FirebaseMessaging().getToken();
print("Token $token");
if (token != null) {
await Firestore.instance
.collection('users')
.document(userId)
.collection("tokens")
.document(token)
.setData({
'pushToken': token,
});
}}
Вот код для идентификатора пользователя Firebase auth:
FirebaseAuth.instance.currentUser().then(onCurrentUserLoaded);
FutureOr onCurrentUserLoaded(FirebaseUser value) async {
print("user loaded: ${value}");
if (value == null) {
// no userid found
} else {
// POSSIBLY THIS IS YOUR ISSUE:
_myUserId = value.uid;
}
}
0
Jonas357
29 Окт 2019 в 15:51
В первом коде для Firebase Cloud Messaging, где в моем коде я подключаю getFcmToken()
– Lynette Museni
29 Окт 2019 в 17:40
Я вызываю его в initState() на моей главной странице. Если у вас возникли проблемы, вы также можете добавить это в свой код, чтобы проверить, есть ли у вас разрешения: pubspec.yamlnotification_permissions: ^0.4.0
– var permissionStatus = await NotificationPermissions.getNotificationPermissionStatus();
print("push permissionStatus: $permissionStatus");
Jonas357
29 Окт 2019 в 19:14
И, пожалуйста, проверьте последние строки моего большого примера кода, где найденный uid в моем коде отличается от вашего. Это вполне может быть проблемой
– Jonas357
29 Окт 2019 в 19:17
Я получаю неопределенное имя «userId» из кода FCM
– Lynette Museni
29 Окт 2019 в 20:14
Для работы FCM требуется много вещей. Это может быть что-то с настройками вашего магазина приложений, если код, который я предоставил, не работает. Убедитесь, что ваша настройка FCM точно соответствует спецификациям. И удалите из своего кода все, что не является FCM, и снова опубликуйте свой код.
– Jonas357
31 Окт 2019 в 17:46
Похожие вопросы
Новые вопросы
firebase
Firebase - это бессерверная платформа для унифицированной разработки приложений для мобильных устройств и для Интернета.