如何在Flutter上刷新Firebase令牌?

时间:2018-07-24 17:36:50

标签: firebase token flutter messaging

我有一个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秒刷新一次。我不知道这是真的。

4 个答案:

答案 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秒刷新一次。仅在以下情况下刷新:

  1. 当用户卸载/重新安装该应用或清除应用数据
  2. 您使用FirebaseMessaging().deleteInstanceID()手动删除FCM实例

您可以使用以下方法收听令牌刷新流:

FirebaseMessaging().onTokenRefresh.listen((newToken) {
   // Save newToken
});

希望有帮助