Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Messaging 7.0.0到9.0.1的转换_Firebase_Flutter - Fatal编程技术网

Firebase Messaging 7.0.0到9.0.1的转换

Firebase Messaging 7.0.0到9.0.1的转换,firebase,flutter,Firebase,Flutter,我正在尝试为我的iOS Flitter应用程序设置FCM,并遵循Flitter指南,甚至Fireship.io的指南 在更新依赖项之前,我使用的是旧版本的FCM,现在有一些方法不推荐使用,或者干脆被忽略了。我不确定哪些方法可以替换这些方法,并且我无法找到关于在不同版本之间到底更改了什么的参考资料 下面是我在FCM 7.0.0中的代码 代码: 所以我的问题在于OnAssettingsRegistered行和requestNotificationPermissions。 对于这两种方法,它都表示该方

我正在尝试为我的iOS Flitter应用程序设置FCM,并遵循Flitter指南,甚至Fireship.io的指南

在更新依赖项之前,我使用的是旧版本的FCM,现在有一些方法不推荐使用,或者干脆被忽略了。我不确定哪些方法可以替换这些方法,并且我无法找到关于在不同版本之间到底更改了什么的参考资料

下面是我在FCM 7.0.0中的代码

代码:

所以我的问题在于OnAssettingsRegistered行和requestNotificationPermissions。
对于这两种方法,它都表示该方法未定义,因为它已被弃用或不再是有效的方法。显然,在更新依赖项之前,它工作得很好,没有错误。我正在寻找围绕Firebase cloud Messaging 9.0.1的资源,这些资源可能会显示更新的内容以及当前使用的方法。

简单的谷歌搜索产生了以下结果,也许您可以在下次发布问题之前再努力一点:

IONotificationSettings类的用法现在已被弃用(当前与现已弃用的requestNotificationPermissions()方法一起使用)

调用requestPermission()时使用命名参数,并通过NotificationSettings读回权限,而不是此类

已弃用:requestNotificationPermissions()已弃用,取而代之的是requestPermission()


上面的答案就是我解决问题的原因。我只是在下面概述一下我从中得出的结论

  • FirebaseMessaging()不再工作,而是使用 FirebaseMessaging.instance
  • 与requestNotificationPermissions()一起使用的IONotificationSettings现在可以仅使用RequestPermission()完成
  • 设置FCM.configure不再有效,您应该只使用FirebaseMessaging.onMessage()、FirebaseMessaging.onMessageGeoPenedApp和FirebaseMessaging.onBackGroundMessage()。最后一个可以与BkacGroundMessageHandler配对,以便在应用程序关闭或挂起时设置通知
  • 最后,保存代币的工作原理与7.0.0版相同,与9.1.0版相同,因此没有任何更改

9.1.0将空安全性带到了表中,因此(取决于您的其他依赖项),您可以使用空安全性运行最新版本的flutter,而不会出现任何问题。

@Llama它确实将OP带到了他们的解决方案中,所以我不会说它“实际上什么都没有”
final FirebaseMessaging _fcm = FirebaseMessaging.instance;
StreamSubscription iosSubscription;
@override
void initState() {
  super.initState();
  if (Platform.isIOS) {
    iosSubscription = _fcm.onIosSettingsRegistered.listen((data) {
      // save the token  OR subscribe to a topic here
    });
    _fcm.requestNotificationPermissions(IosNotificationSettings);
  }
}

_saveDeviceToken() async {
  // Get the current user
  String uid = FirebaseAuth.instance.currentUser.uid;
  // FirebaseUser user = await _auth.currentUser();

  // Get the token for this device
  String fcmToken = await _fcm.getToken();

  // Save it to Firestore
  if (fcmToken != null) {
    FirebaseFirestore.instance
         .collection('users')
         .doc(uid)
         .collection('tokens')
         .add({
         'token': fcmToken,
         'createdAt': FieldValue.serverTimestamp(), // optional
         'platform': Platform.operatingSystem
      });
  }
}