Swift 4 Firebase Cloud Messaging работает только с одним устройством - PullRequest
0 голосов
/ 23 октября 2018

В моем приложении я пытаюсь настроить Push-уведомления, используя Firebase Cloud Messaging.

Когда я пытаюсь отправить уведомление, используя одно устройство и ключ FCM, я получаю уведомление.Однако он не работает для пользовательского сегмента при выборе целевого приложения.

Вот мои настройки делегата приложения:

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

    // Firebase
    FirebaseApp.configure()
    FirebaseConfiguration.shared.setLoggerLevel(.min)

    // Push notifications
    application.registerForRemoteNotifications()
    setupPush(application: application)

if #available(iOS 10.0, *) {
        let authOptions : UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_,_ in })

        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self
        // For iOS 10 data message (sent via FCM)
        Messaging.messaging().delegate = self

    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        UIApplication.shared.registerUserNotificationSettings(settings)
    }

    UIApplication.shared.registerForRemoteNotifications()
}

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
// iOS10+, called when presenting notification in foreground
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    let userInfo = notification.request.content.userInfo
    NSLog("[UserNotificationCenter] applicationState: \(applicationStateString) willPresentNotification: \(userInfo)")
    //TODO: Handle foreground notification
    completionHandler([.alert])
}

// iOS10+, called when received response (default open, dismiss or custom action) for a notification
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    NSLog("[UserNotificationCenter] applicationState: \(applicationStateString) didReceiveResponse: \(userInfo)")
    //TODO: Handle background notification
    completionHandler()
}

// Setup APNS token for Firebase
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    #if PROD_BUILD
    Messaging.messaging().setAPNSToken(deviceToken, type: .prod)
    #else
    Messaging.messaging().setAPNSToken(deviceToken, type: .sandbox)
    #endif
}

extension AppDelegate : MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    NSLog("[RemoteNotification] didRefreshRegistrationToken: \(fcmToken)")
}

// iOS9, called when presenting notification in foreground
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    NSLog("[RemoteNotification] applicationState: \(applicationStateString) didReceiveRemoteNotification for iOS9: \(userInfo)")
    if UIApplication.shared.applicationState == .active {
        //TODO: Handle foreground notification
    } else {
        //TODO: Handle background notification
    }
}
...