【问题标题】:FCM iOS project not receiving Notification - FCM console shows success but device does not receiveFCM iOS 项目未收到通知 - FCM 控制台显示成功但设备未收到
【发布时间】:2018-04-25 14:18:22
【问题描述】:

1。在 FCM 控制台中创建了一个项目以发送通知。
2. 该项目有一个接收通知的 Android 应用
3. 接下来,我将 iOS App 添加到该项目中。我上传了证书p12文件,并做了通知

FCM控制台显示通知发送成功,但真机收不到。

在应用 IS 中启用了推送通知。 在功能中检查了它 从 App 创建的新 cer 文件 - 创建开发 cer 文件,下载并双击并添加到钥匙串访问中。在该私钥中导出并创建了 p12 文件。 创建Provision Profile并下载并双击并添加到xcode中。 应用程序从 xCode 运行并获得 FCM 令牌 - 使用令牌我发送通知并基于应用程序发送通知。但我仍然没有收到任何通知。 但在我的通知页面中,它显示成功。

解决此问题的任何想法。 我正在使用 Swift 4 语言的 xCode 9.2 和 App。

【问题讨论】:

  • 您有证书问题。你能告诉我你是如何从 Keychain 获取 P12 文件的以及你是如何制作它的吗?
  • 您是否注册了远程通知并添加了从 Firebase 下载的 GoogleService-Info.plist 文件?
  • 当您在客户端生成令牌时,请尝试按照docs 中的说明从控制台发送到此令牌,我发现这有助于解决问题。这就是我发现我的 App ID Prefix 写错的原因。
  • @RatulSharker 是的,我已经注册了远程通知。并添加了“GoogleService-Info.plist”
  • @VeerSuthar 我已经从钥匙串导出 Apple Development Push services:MyappID 的私钥下载 p12

标签: ios swift firebase push-notification firebase-cloud-messaging


【解决方案1】:

在 AppDelegate 中,在它的主体之外做这样的事情。作为它的扩展。

extension AppDelegate : MessagingDelegate {
    func application(received remoteMessage: MessagingRemoteMessage) {
        print("remoteMessage: MessagingRemoteMessage")
    }
}


extension AppDelegate : UNUserNotificationCenterDelegate {
    // MARK: - UNUserNotificationCenterDelegate
    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler:
        @escaping (UNNotificationPresentationOptions) -> Void) {
        // Always show the incoming notification, even if the app is in foreground
        print("Received notification in foreground:")
        //let jsonString = notification.request.content.userInfo.jsonString ?? "{}"
        //print("\(jsonString)")
        completionHandler([.alert, .badge, .sound])
    }

    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        print("Received notification response")
        //let jsonString = response.notification.request.content.userInfo.jsonString ?? "{}"
        //print("\(jsonString)")
        userInfo = response.notification.request.content.userInfo
        NotificationsService.shared.didReceiveNotificationFromBackground(userinfo: userInfo)
        completionHandler()
    }
}

在 AppDelegate 中

 // MARK: - Push Notification Code
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                     fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        // If you are receiving a notification message while your app is in the background,
        // this callback will not be fired till the user taps on the notification launching the application.
        // TODO: Handle data of notification

        // With swizzling disabled you must let Messaging know about the message, for Analytics
        // Messaging.messaging().appDidReceiveMessage(userInfo)

        print(userInfo)

        if application.applicationState == UIApplicationState.inactive || application.applicationState == UIApplicationState.background || application.applicationState == UIApplicationState.active {
            if application.applicationState == UIApplicationState.background {
                NotificationsService.shared.didReceiveNotificationFromBackground(userinfo: userInfo)
            }
            else if application.applicationState == UIApplicationState.inactive {
                NotificationsService.shared.didReceiveNotificationFromBackground(userinfo: userInfo)
            }
            else if application.applicationState == UIApplicationState.active {
                    NotificationsService.shared.didReceiveNotificationFromBackground(userinfo: userInfo)
            }
        }

        completionHandler(UIBackgroundFetchResult.newData)
    }

    // MARK: -  Delegates Method For Push Notifications
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
        if application.applicationState == UIApplicationState.inactive || application.applicationState == UIApplicationState.background || application.applicationState == UIApplicationState.active {
            //opened from a push notification when the app was on background

            if application.applicationState == UIApplicationState.background {
                NotificationsService.shared.didReceiveNotificationFromBackground(userinfo: userInfo)
            }
            else if application.applicationState == UIApplicationState.inactive {
                NotificationsService.shared.didReceiveNotificationFromBackground(userinfo: userInfo)
            }else if application.applicationState == UIApplicationState.active {
                if self.isAlreadyInConsult == false {
                    NotificationsService.shared.didReceiveNotificationFromBackground(userinfo: userInfo)
                }
            }
        }
    }

同时添加您的项目plist

FirebaseAppDelegateProxyEnabled = NO

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2020-01-23
    • 2017-10-24
    • 2018-10-09
    • 1970-01-01
    • 2019-08-17
    • 2017-03-29
    • 2018-05-01
    • 1970-01-01
    相关资源
    最近更新 更多