gpt4 book ai didi

ios - 当应用程序不活动时,Swift 中的 Firebase 消息不显示

转载 作者:搜寻专家 更新时间:2023-11-01 06:31:53 26 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现 firebase 消息传递,但我只在应用程序处于事件状态时收到通知(我可以在控制台中看到它们,但仅当应用程序处于事件状态时。如果关闭它们在应用再次激活之前不会出现)。

我已打开后台通知,并将我的 p12 证书加载到 Firebase 设置中。

这是我的应用委托(delegate)中的代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

Fabric.with([Crashlytics.self])

FirebaseApp.configure()


Messaging.messaging().delegate = self
Messaging.messaging().shouldEstablishDirectChannel = true

if #available(iOS 11.0, *){
print("IOS 11")
UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
}else if #available(iOS 10.0, *){
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()


return true
}

func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
}

@nonobjc func application(application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
Messaging.messaging().apnsToken = deviceToken as Data
}

func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
// Convert to pretty-print JSON
guard let data =
try? JSONSerialization.data(withJSONObject: remoteMessage.appData, options: .prettyPrinted),
let prettyPrinted = String(data: data, encoding: .utf8) else {
return
}
print("Received direct channel message:\n\(prettyPrinted)")
}

func application(received remoteMessage: MessagingRemoteMessage){

print("Received Remote Message")
guard let data =
try? JSONSerialization.data(withJSONObject: remoteMessage.appData, options: .prettyPrinted),
let prettyPrinted = String(data: data, encoding: .utf8) else {
return
}
print("Received direct channel message:\n\(prettyPrinted)")

}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print(userInfo)
}

编辑 1:这是我在控制台中收到的示例通知

{
"from" : "480981200252",
"notification" : {
"e" : "1",
"body" : "hey"
},
"collapse_key" : "com.amplesftwr.thelifeofcarl"
}

编辑 2:这是我的背景模式设置的照片: background modes

最佳答案

在您的项目设置中,在功能下,确保不仅打开“推送通知”,而且打开“后台模式”。

在您的 .plist 文件中,您还应该有一个键“Required background modes”,并且在您的项目中确保您也有 .entitlements 文件。

您可能想要检查的另一件事是,当您转到 Firebase 控制台时,不是仅向该特定用户的 token 发送通知,而是尝试使用此选项向应用程序的所有用户发送消息Firebase 控制台。

如果成功,则您的问题可能与 FCM token 有关。

如果它仍然不起作用,那么您可能需要检查您的 key 链和您的 Apple 开发者帐户中的所有证书,以确保一切都是绿色/正常并且没有重复!

很遗憾,我无法评论您的帖子,所以我将其作为答案添加到此处,希望它能帮助您解决问题,但如果没有,那么请告诉我,我会尽力:)

关于ios - 当应用程序不活动时,Swift 中的 Firebase 消息不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46210427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com