开发者社区 问答 正文

Flutter Push通知未显示在IOS上

我在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!

展开
收起
被纵养的懒猫 2019-10-09 16:59:53 948 分享 版权
阿里云 AI 助理回答

遇到Flutter和iOS上Firebase Messaging推送通知不显示的问题时,可以尝试以下几个排查步骤:

  1. 确保App Sandbox设置正确:在Xcode中,进入项目的“Capabilities”标签页,确认“Push Notifications”和“Background Modes”中的“Remote notifications”已经被勾选。

  2. 检查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
    }
    
  3. 后台模式设置:除了勾选“Background Modes”的“Remote notifications”,还要确保你的应用支持后台运行模式,这在处理后台推送时非常重要。

  4. 通知内容:请确认你的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"
    }
    
  5. 清理并重新构建项目:有时候,清理项目并重新构建可以解决一些配置未生效的问题。在Flutter中,你可以使用flutter clean然后flutter run

  6. 查看日志:利用Xcode或通过 Flutter 的adb logcat(对于Android)和flutter logs(对于iOS)命令查看应用的日志输出,寻找与推送通知相关的错误信息。

  7. 测试环境:确保你在测试时使用的不是生产环境的APNs证书,而是开发环境的证书。对于发布到App Store的应用,需要切换到生产环境的证书。

如果以上步骤都已确认无误,但问题依旧存在,可能需要更深入地检查你的代码逻辑,或者考虑是否存在特定于你的应用程序架构的问题。此外,也可以考虑更新Flutter、Dart插件以及firebase_messaging包到最新版本,有时新版本会修复已知问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答