当前位置: 首页 > 知识库问答 >
问题:

Firebase消息iOS14

韦宏扬
2023-03-14

我在我的应用程序中安装Firebase云消息传递已经有一段时间了。我最近将我的一个设备更新到iOS14,并停止在该设备上接收它们。具有iOS13的不同设备仍然接收它们。我很抱歉,如果这是一个愚蠢的问题,哈哈,但这是我的应用程序代表:


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)")
          }
        }
        
    }

}

我尝试过使用firebase控制台中的“测试”按钮发送消息,并像普通方式一样发布消息。它确实正确注册了通知,在检查设置后,它看起来仍然正确。

共有1个答案

米项禹
2023-03-14

我也有同样的问题。我目前找到的一个修复方法是禁用方法swizzling:

  • 在iOS应用程序Info.plist中,添加FirebaseAppDelegateProxyEnabled并将其设置为FALSE(布尔值0)

看起来你已经有了didCORsterForRemteNotificationsAnd DeviceToken设置,所以保持原样。

希望这能有所帮助!

 类似资料:
  • 在我的Android应用程序中,我收到使用Firebase发送的消息,问题不是所有消息都到达,有时消息到达非常慢。 在我的服务器端,我跟踪我发送到FCM的消息,我总是收到成功:来自FCM的1个响应,仍然有我在Android应用程序中没有收到的消息。 我认为FCM消息日志在上面描述的情况下会有很大的帮助,但我不确定是否存在此选项。 有办法浏览Firebase消息日志吗?

  • FCM服务未向我的iOS应用程序发送消息。 > App CAN成功接收APNs令牌和实例ID令牌 App CAN使用推送通知实用程序利用. p8令牌在后台成功接收来自APN的推送 #2中使用的相同APNs密钥上传到Firebase控制台 应用程序无法接收Firebase控制台中Notification Composer发送的消息,也无法使用CURL请求接收消息。 应用程序在通过FCM发送时不显示任

  • 在我的聊天应用程序中,每当用户收到新消息时,我使用FCM和Firebase功能发送通知。 为此,我有一个FirebaseMessagingService,它覆盖了。除此之外,此服务还覆盖。每当用户第一次启动应用程序时,就会调用,我检索一个新令牌并将其存储在Firebase实时数据库中。 然后我去和一些用户聊天(不关闭应用程序)。当我收到新消息时,我会收到通知。调用。 问题是,当我关闭应用程序,然后

  • 有没有办法在Firebase控制台中重新生成FCM(云消息部分)的API Key?该密钥不可编辑,与Google API控制台中自动生成的密钥不同。由于这个错误的配置,我总是从FCM得到未经授权的401...

  • 我使用应用服务器通过Firebase Cloud Messaging发送消息。Firebase控制台不会列出由应用服务器发送的此类消息。当我使用Firebase控制台直接发送消息时,它会显示一些对其自身消息的分析。 问题是,当我使用应用服务器时,如何访问消息统计信息?