我有一个Flutter应用,该应用使用Firebase消息传递传递通知。 这是基本代码,除了将令牌保存在我的数据库上之外,没有什么特别的事情。
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);
});
我是否必须实现某种后台服务,以便每次刷新时都将新令牌保存在数据库中?我记得在Android(JAVA)上使用onTokenRefresh()
来执行此操作,但是在Flutter(DART)中却什么也没找到。
我读到某处令牌每3600秒刷新一次。我不知道这是真的。
答案 0 :(得分:1)
您可以使用firebaseMessaging.onTokenRefresh
获取每次接收到新令牌时都会接收事件的流。
答案 1 :(得分:1)
以下是订阅firebaseMessaging.onTokenRefresh
流并在令牌已更改的情况下更新令牌的示例:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.js"></script>
<canvas id="myChart"></canvas>
答案 2 :(得分:0)
用户登录我的应用后,每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'所迷惑。我使用按钮按下来测试该技术,并且在将其绑定到登录按钮之后并没有重命名该方法。)
答案 3 :(得分:0)
否,FCM令牌不会每3600秒刷新一次。仅在以下情况下刷新:
FirebaseMessaging().deleteInstanceID()
手动删除FCM实例您可以使用以下方法收听令牌刷新流:
FirebaseMessaging().onTokenRefresh.listen((newToken) {
// Save newToken
});
希望有帮助