[英]Flutter iOS push not being received
我的 Flutter 应用程序无法在 iOS 设备上收到推送通知。
我试着遵循这个指南: https ://firebase.flutter.dev/docs/messaging/apple-integration/
我为配置推送通知所做的步骤:
我还确保我已正确配置 XCode 并且:
知道我做错了什么吗? 有人遇到过类似的问题吗?
编辑:这是我的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
文件确实包含具有适当值(通常是development
或production
)的所述条目。
其次,在用于构建应用程序的机器上,确保位于~/Library/MobileDevice/Provisioning\ Profiles
的配置文件的本地副本确实包含aps-environment
条目。 如果没有,您应该再次下载配置文件并替换您的本地副本。
最后,要验证最终配置文件确实包含aps-environment
值,您可以解压缩构建的 IPA 并导航到Payload/AppName.app/embedded.mobileprovision
。 您可以检查Entitlements部分是否确实包含具有预期值的密钥。
如果不是,您的授权文件或供应配置文件可能会被其中一个构建阶段更改(这种可能性很小)。
根据经验,我假设推送通知在调试模式下正常工作,对吗?
有趣的是,在我的案例中,APNS 证书仅用于开发,请仔细检查您的 apns 证书,这可能是罪魁祸首:! :)
或者不妨重新制作证书〜
2. 使用 Flutter 你不需要在 AppDelegate 中导入 FirebaseMessigng。 - 只需import Firebase
,然后在application
函数中调用FirebaseApp.configure()
。 - 如果您配置 firebase 并且最新文档使用 firebase cli 而不是 GoogleServices-Info.plist,您甚至不需要修改您的 AppDelegate https://firebase.flutter.dev/docs/cli/
你打电话给await Firebase.initializeApp();
调用WidgetsFlutterBinding.ensureInitialized();
在构建您的应用程序之前?
我认为您应该尝试使用本地脚本来推送通知以确保您的配置正确。 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.