如何在Flatter上刷新firebase令牌?
我有一个Flitter应用程序,它使用Firebase消息传递通知。 这是基本代码,除了在我的数据库中保存令牌之外,它没有任何特殊功能如何在Flatter上刷新firebase令牌?,firebase,token,flutter,messaging,Firebase,Token,Flutter,Messaging,我有一个Flitter应用程序,它使用Firebase消息传递通知。 这是基本代码,除了在我的数据库中保存令牌之外,它没有任何特殊功能 FirebaseMessaging _firebaseMessaging = new FirebaseMessaging(); _firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) { }, onResume: (Map<String,
FirebaseMessaging _firebaseMessaging = new FirebaseMessaging();
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) {
},
onResume: (Map<String, dynamic> message) {
},
onLaunch: (Map<String, dynamic> message) {
},
);
_firebaseMessaging.getToken().then((token) {
saveToken(token);
});
我是否必须实现某种后台服务,以便在每次刷新时将新令牌保存在数据库上?我记得在AndroidJAVA上使用onTokenRefresh来做这件事,但在Flatter DART中我什么也没发现
我在某处读到令牌每3600秒刷新一次。我想知道这是不是真的。您可以使用来获取每次收到新令牌时都会接收事件的流。您可以使用来获取每次收到新令牌时都会接收事件的流。在用户登录我的应用程序后,每3500秒自动登录一次 我使用的计时器如下:
void _timerPressed() {
const timeout = const Duration(seconds: 3500);
new Timer.periodic(timeout, (Timer t) => _handleSignIn());
}
在登录发生后,我在“登录”按钮按下方法中设置计时器:
void _loginPressed() {
print('The user wants to login with $_email and $_password');
_handleSignIn()
.then((FirebaseUser user) => print(user))
.catchError((e) => print(e));
_timerPressed();
}
不要被方法的名称“timerPressed”所愚弄。我使用了一个按钮来测试这项技术,但在我将该方法绑定到登录按钮后,还没有来得及重新命名该方法。在用户登录我的应用程序后,她每3500秒自动登录一次 我使用的计时器如下:
void _timerPressed() {
const timeout = const Duration(seconds: 3500);
new Timer.periodic(timeout, (Timer t) => _handleSignIn());
}
在登录发生后,我在“登录”按钮按下方法中设置计时器:
void _loginPressed() {
print('The user wants to login with $_email and $_password');
_handleSignIn()
.then((FirebaseUser user) => print(user))
.catchError((e) => print(e));
_timerPressed();
}
不要被方法的名称“timerPressed”所愚弄。我使用按键测试这项技术,在我将方法绑定到登录按钮后,还没有来得及重命名该方法。否,FCM令牌不会每3600秒刷新一次。它仅在以下情况下刷新: 当用户卸载/重新安装应用程序或清除应用程序数据时 您可以使用FirebaseMessaging.deleteInstanceID手动删除FCM实例 您可以使用以下命令侦听令牌刷新流:
FirebaseMessaging().onTokenRefresh.listen((newToken) {
// Save newToken
});
希望有帮助不,FCM令牌不会每3600秒刷新一次。它仅在以下情况下刷新: 当用户卸载/重新安装应用程序或清除应用程序数据时 您可以使用FirebaseMessaging.deleteInstanceID手动删除FCM实例 您可以使用以下命令侦听令牌刷新流:
FirebaseMessaging().onTokenRefresh.listen((newToken) {
// Save newToken
});
希望有帮助以下是订阅流并在令牌发生更改时更新令牌的示例:
FirebaseMessaging().onTokenRefresh.listen((token) async {
final prefs = await SharedPreferences.getInstance();
final String firebaseTokenPrefKey = 'firebaseToken';
final String currentToken = prefs.getString(firebaseTokenPrefKey);
if (currentToken != token) {
print('token refresh: ' + token);
// add code here to do something with the updated token
await prefs.setString(firebaseTokenPrefKey, token);
}
});
以下是订阅流并在令牌发生更改时更新令牌的示例:
FirebaseMessaging().onTokenRefresh.listen((token) async {
final prefs = await SharedPreferences.getInstance();
final String firebaseTokenPrefKey = 'firebaseToken';
final String currentToken = prefs.getString(firebaseTokenPrefKey);
if (currentToken != token) {
print('token refresh: ' + token);
// add code here to do something with the updated token
await prefs.setString(firebaseTokenPrefKey, token);
}
});
谢谢我来看看,谢谢。我将对此进行研究。我在initstate中编写这个onTokenRefresh,每次调用它,不仅是在获取新令牌时调用它,还返回旧令牌。我需要此onTokenRefresh only仅对生成的新令牌进行调用。是的,作为一种解决方法,您必须将旧令牌存储在SharedReferences中。每次接到onTokenRefresh调用时,您都可以将其与SharedReferences上的调用进行比较,并仅当它们不同时才将其存储。希望它能帮助汉克斯兄弟,我也是这么想的。@MSARKrish很高兴我能帮上忙。我在initstate中写这个onTokenRefresh,它每次都在调用,不仅是在得到新的令牌时调用,而且还返回旧令牌。我需要此onTokenRefresh only仅对生成的新令牌进行调用。是的,作为一种解决方法,您必须将旧令牌存储在SharedReferences中。每次接到onTokenRefresh调用时,您都可以将其与SharedReferences上的调用进行比较,并仅当它们不同时才将其存储。希望它能帮助汉克兄弟,我也是这么想的。@MSARKrish很高兴我能帮上忙。