Flutter FCM getToken() returns 空

Flutter FCM getToken() returns null

FCM getToken() 在真实设备上总是 returns 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;
});

我使用的真实设备是AndroidMarshmallow。

以下是et Token的获取方法:

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");
    });

对于更新版本的用户,有一种访问令牌的新方法:

String token = await FirebaseMessaging.instance.getToken();

您只有在初始化 Firebase 并请求权限后才能访问令牌。