简体   繁体   English

Firebase 消息传递 iOS 14

[英]Firebase Messaging iOS 14

I have had Firebase Cloud Messaging setup in my app for a while.我已经在我的应用程序中设置了 Firebase Cloud Messaging 有一段时间了。 I recently updated one of my devices to iOS 14, and stopped receiving them on that device.我最近将我的一台设备更新为 iOS 14,并停止在该设备上接收它们。 A different device with iOS 13 still receives them.具有 iOS 13 的不同设备仍可接收它们。 I'm sorry if this is a dumb issue haha but here is my App Delegate:如果这是一个愚蠢的问题,我很抱歉哈哈,但这是我的应用程序代表:


let appDelegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate


@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {
    
    var customerId = ""



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


    application.registerForRemoteNotifications()

        FirebaseApp.configure()
        
        // Update this to your stripe PUBLISHABLE KEY
        STPPaymentConfiguration.shared().publishableKey = "private"
        
        let apiToken = "private"
        EasyPostApi.sharedInstance.setCredentials(apiToken, baseUrl: "https://api.easypost.com/v2/")
        STPTheme.default().accentColor = .red
        
        Messaging.messaging().delegate = self
        
        return true
    }

    // MARK: UISceneSession Lifecycle
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
      Messaging.messaging().apnsToken = deviceToken
        
    }
    
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
      print(userInfo)
    print("test")
    }

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

      completionHandler(UIBackgroundFetchResult.newData)
    }
    
    func registerForPushNotifications() {
        // 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 })
        // For iOS 10 data message (sent via FCM
        Messaging.messaging().delegate = self
        InstanceID.instanceID().instanceID { (result, error) in
          if let error = error {
            print("Error fetching remote instance ID: \(error)")
          } else if let result = result {
            print("Remote instance ID token: \(result.token)")
          }
        }
        
    }

}

I have tried sending messages using both the "test" button in the firebase console, and just publishing a message like normal.我尝试使用 firebase 控制台中的“测试”按钮发送消息,并像正常一样发布消息。 It does register for notifications properly, and after checking settings, it still looks correct.它确实正确注册了通知,并且在检查设置后,它看起来仍然正确。

I had the same exact issue.我有同样的问题。 A fix I found for now was to disable method swizzling:我现在发现的一个修复是禁用方法混合:

  • To your iOS app Info.plist, add FirebaseAppDelegateProxyEnabled and set it to FALSE (boolean value 0)在您的 iOS 应用程序 Info.plist 中,添加FirebaseAppDelegateProxyEnabled并将其设置为 FALSE(布尔值 0)

Looks like you already have didRegisterForRemoteNotificationsWithDeviceToken setup, so keep that as it.看起来您已经设置了didRegisterForRemoteNotificationsWithDeviceToken ,所以保持不变。

Hope this helps!希望这可以帮助!

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

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