Firebase Messaging 7.0.0到9.0.1的转换
我正在尝试为我的iOS Flitter应用程序设置FCM,并遵循Flitter指南,甚至Fireship.io的指南 在更新依赖项之前,我使用的是旧版本的FCM,现在有一些方法不推荐使用,或者干脆被忽略了。我不确定哪些方法可以替换这些方法,并且我无法找到关于在不同版本之间到底更改了什么的参考资料 下面是我在FCM 7.0.0中的代码 代码: 所以我的问题在于OnAssettingsRegistered行和requestNotificationPermissions。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。 对于这两种方法,它都表示该方
对于这两种方法,它都表示该方法未定义,因为它已被弃用或不再是有效的方法。显然,在更新依赖项之前,它工作得很好,没有错误。我正在寻找围绕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
});
}
}