我在Flutter和IOS的Push通知方面遇到问题。
我的设置和起作用的东西:
1)我安装了该firebase_messaging: ^5.1.6软件包,没有错误/遵循了他们关于IOS的所有说明
2)我已请求用户获得IOS许可并接受接收推送通知
3)我能够在IOS和Android设备上获得FCM令牌
4)我在Apple开发人员部分中创建了一个密钥,并将该密钥添加到FCM
5)我已经关闭了应用程序/发送推送通知时将其发送到后台
6)我已经使用Xcode将google-service-info文件添加到了Runner
我已使用curl将通知发送到IOS设备
curl -X POST --header "Authorization: key=
"
--Header "Content-Type: application/json"
https://fcm.googleapis.com/fcm/send
-d "{"to":"
","notification":{"body":"Hello"},"priority":10}" 我收到了Firebase的成功回复
{"multicast_id":954809023898571073,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":" "}]} 这是我检索令牌的方法:
firebaseMessaging.getToken().then((String token) { _authModel.setNotificationToken(token); }); 在IOS上运行该应用程序时,没有出现任何Firebase错误。
我已经搞砸了两天了,所以有点烦人,以上所有内容似乎都可以在Android上使用。
有任何建议。
Flutter Doctor:
Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, v1.9.1+hotfix.4, on Mac OS X 10.15 19A583, locale en-GB)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3) [✓] Xcode - develop for iOS and macOS (Xcode 11.0) [✓] Android Studio (version 3.5) [✓] VS Code (version 1.38.1) [✓] Connected device (4 available)
• No issues found!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到Flutter和iOS上Firebase Messaging推送通知不显示的问题时,可以尝试以下几个排查步骤:
确保App Sandbox设置正确:在Xcode中,进入项目的“Capabilities”标签页,确认“Push Notifications”和“Background Modes”中的“Remote notifications”已经被勾选。
检查AppDelegate.swift配置:确保你已经按照Firebase的文档正确配置了AppDelegate.swift
文件。特别是以下部分应该被正确实现:
import Firebase
import FirebaseMessaging
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
// 请求用户授权
Messaging.messaging().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
print("Permission granted: \(granted)")
}
application.registerForRemoteNotifications()
return true
}
// 添加这个方法来处理APNs token
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
print("APNs Token: \(token)")
Messaging.messaging().apnsToken = deviceToken
}
后台模式设置:除了勾选“Background Modes”的“Remote notifications”,还要确保你的应用支持后台运行模式,这在处理后台推送时非常重要。
通知内容:请确认你的curl命令中的JSON负载格式正确,并且包含了正确的"to"字段(即设备的FCM令牌)。对于iOS,如果希望在通知中心显示通知,需要在payload中包含"notification"对象以及"data"对象。例如:
{
"to": "<YOUR_FCM_TOKEN>",
"notification": {
"title": "Hello",
"body": "This is a message.",
"sound": "default"
},
"data": {
"extraDataKey": "extraDataValue"
},
"priority": "high"
}
清理并重新构建项目:有时候,清理项目并重新构建可以解决一些配置未生效的问题。在Flutter中,你可以使用flutter clean
然后flutter run
。
查看日志:利用Xcode或通过 Flutter 的adb logcat
(对于Android)和flutter logs
(对于iOS)命令查看应用的日志输出,寻找与推送通知相关的错误信息。
测试环境:确保你在测试时使用的不是生产环境的APNs证书,而是开发环境的证书。对于发布到App Store的应用,需要切换到生产环境的证书。
如果以上步骤都已确认无误,但问题依旧存在,可能需要更深入地检查你的代码逻辑,或者考虑是否存在特定于你的应用程序架构的问题。此外,也可以考虑更新Flutter、Dart插件以及firebase_messaging包到最新版本,有时新版本会修复已知问题。