Проект FCM iOS не получает уведомление - консоль FCM показывает успех, но устройство не получает - PullRequest
0 голосов
/ 25 апреля 2018

enter image description here 1. Создан проект в консоли FCM для отправки уведомлений.
2. В проекте есть приложение для Android, которое получает уведомление
3. Затем я добавил iOS-приложение в этот проект. Я загрузил файл сертификата p12 и сделал уведомление

Консоль FCM показывает, что уведомление было успешно отправлено, но оно не получено на реальном устройстве.

Включено push-уведомление в приложении IS. Проверено это в возможностях Новый файл сертификата, созданный из приложения. Создайте файл сертификата разработки, загрузите его, дважды щелкните и добавьте в брелок доступа. В этом приватном ключе экспортировали и создали файл p12. создал профиль Provision и загрузил его, дважды щелкнув и добавив в xcode. Приложение запускается из xCode и получает токен FCM. С помощью токена я отправляю уведомление, а также отправляю уведомление на основе приложения. Но все же я не получил никакого уведомления. Но на моей странице уведомлений это показывает успех.

любая идея, чтобы решить эту проблему. Я использую xCode 9.2 и приложение на языке Swift 4.

1 Ответ

0 голосов
/ 26 апреля 2018

Сделайте что-то подобное в 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
...