繁体   English   中英

未收到 Flutter iOS 推送

[英]Flutter iOS push not being received

我的 Flutter 应用程序无法在 iOS 设备上收到推送通知。

我试着遵循这个指南: https ://firebase.flutter.dev/docs/messaging/apple-integration/

我为配置推送通知所做的步骤:

  1. 在 Firebase 控制台上从 developer.apple.com 注册我的 APN(云消息传递 -> 我的应用程序)
  2. 使用了来自 firebase 的 GoogleServices-Info.plist
  3. 构建应用程序并上传到 TestFlight
  4. 请求用户允许在 iOS 上显示通知
  5. 从我的应用程序复制 fcm 令牌并将其粘贴到 Firebase 控制台 -> 云消息传递 -> 新活动
  6. 已从 TestFlight 安装应用程序的实体 iPhone 未收到推送。

我还确保我已正确配置 XCode 并且:

  1. 我选择了推送通知和后台模式(后台获取、远程通知) 在此处输入图像描述
  2. 我正在使用正确的包标识符(笑)
  3. 我的 App ID 选择了推送通知在此处输入图像描述
  4. 我的 APN 密钥选择了推送通知服务在此处输入图像描述

知道我做错了什么吗? 有人遇到过类似的问题吗?

编辑:这是我的AppDelegate.swift文件,也许它对解决我的问题有点帮助(值得一提 - 我没有碰它,我猜它是由 flutter 生成的):

import UIKit
import Flutter
import FirebaseMessaging

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
    
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
    
    override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

       Messaging.messaging().apnsToken = deviceToken
       super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
     }
}

在向 Test Flight 提交构建时,也收到了来自 Apple 的此类电子邮件: 在此处输入图像描述

编辑:我检查了我的.entitlements文件,上面写着production 我还检查了Payload/AppName.app/embedded.mobileprovision ,它也说production

我还在 Firebase Messaging 中添加了 APNs 证书: 在此处输入图像描述

我将我的 iPhone 8 连接到我的 MacBook 并打开了我的 iPhone 8 的控制台应用程序。我发现,当我启动我的应用程序时,控制台显示:

No valid 'aps-environment' entitlement string found for application 'pl.mycompany.myproject.myapp': (null).

我怀疑,这可能与我使用 Fastlane 签署、构建和上传应用程序有关,因为在我的myapp/ios/Runner/Runner.entitlements中上传时,我确实将我的aps-environment设置为development

我还在控制台中获得了这些打印件:

[pl.mycompany.myproject.myapp] Push registration with a nil environment was encountered, will not invalidate token

[pl.mycompany.myproject.myapp] Ignore becoming foreground for application without push registration

您从 App Store 收到的ITMS-90078问题表明最终应用程序签名的权利缺少aps-environment条目。 因此,推送通知在 TestFlight 构建中可能无法按预期工作。

首先,确保 Xcode 项目中的所有.entitlements文件确实包含具有适当值(通常是developmentproduction )的所述条目。

其次,在用于构建应用程序的机器上,确保位于~/Library/MobileDevice/Provisioning\ Profiles的配置文件的本地副本确实包含aps-environment条目。 如果没有,您应该再次下载配置文件并替换您的本地副本。

最后,要验证最终配置文件确实包含aps-environment值,您可以解压缩构建的 IPA 并导航到Payload/AppName.app/embedded.mobileprovision 您可以检查Entitlements部分是否确实包含具有预期值的密钥。

如果不是,您的授权文件或供应配置文件可能会被其中一个构建阶段更改(这种可能性很小)。

根据经验,我假设推送通知在调试模式下正常工作,对吗?

有趣的是,在我的案例中,APNS 证书仅用于开发,请仔细检查您的 apns 证书,这可能是罪魁祸首:! :)

或者不妨重新制作证书〜

  1. 您是否在 firebase 项目中添加了证书? 项目清单

2. 使用 Flutter 你不需要在 AppDelegate 中导入 FirebaseMessigng。 - 只需import Firebase ,然后在application函数中调用FirebaseApp.configure() - 如果您配置 firebase 并且最新文档使用 firebase cli 而不是 GoogleServices-Info.plist,您甚至不需要修改您的 AppDelegate https://firebase.flutter.dev/docs/cli/

  1. 你打电话给await Firebase.initializeApp(); 调用WidgetsFlutterBinding.ensureInitialized(); 在构建您的应用程序之前?

  2. 我认为您应该尝试使用本地脚本来推送通知以确保您的配置正确。 xcrun simctl push simulator-device-id app-bundle-id notification.apns with notification.apns is file contains payload test,例如:

{ "aps": { "alert": "APNs demo", "sound": "default", "badge": 69 } }

https://sarunw.com/posts/testing-remote-push-notification-in-ios-simulator/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM