Эксперимент с Firebase - Push-уведомления - PullRequest
0 голосов
/ 28 ноября 2018

Чтобы опробовать Push-уведомления с Firebase, я следую этому примеру: https://github.com/firebase/quickstart-ios/blob/dc2cd2db6e82e5c475fa3f0efe75df8b54f04544/messaging/MessagingExampleSwift/AppDelegate.swift#L40-L55

Я мог бы заставить его работать до определенной точки.

Вот соответствующий код Ihave:

......

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    ......
    UNUserNotificationCenter.current().delegate = self
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(
        options: authOptions,
        completionHandler: {_, _ in })
    application.registerForRemoteNotifications()
    FirebaseApp.configure()
    ......

    return true
}

......

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    // Print message ID.
    print(#function)
    if let messageID = userInfo[gcmMessageIDKey] {
        print("Message ID: \(messageID)")
    }

    // Print full message.
    print(userInfo)

    completionHandler()
}

......

Когда я пытаюсь проверить это, вызывается только функция userNotificationCenter: didReceive: withCompletionHandler () (в списке функций, представленном в примере).Также следует заметить, что я вижу это, глядя на консоль отладчика, и на устройстве ничего не происходит.Я полагаю, что так и должно быть (так что все в порядке), но у меня есть вопрос к любому, кто может ответить.

Как мне использовать завершениеHandler () ?Я полагаю, поскольку это параметр, я могу использовать его довольно свободно, но когда я ищу пример кода в сети, я вижу только то, что он объявлен в списке параметров или назван так, как в примереЯ работаю с ним, но никогда не вижу его определенного.

Есть ли что-то, на что я должен обратить внимание или конкретный пример того, как его использовать?

Для информации, я использую XcodeВерсия 10.1, iOS 12.1 и Swift 4.2.

1 Ответ

0 голосов
/ 28 ноября 2018

Как объяснено в документации Apple , completionHandler в этом методе:

Блок, который нужно выполнить после завершения обработки ответа пользователя.Вы должны выполнить этот блок в какой-то момент после обработки ответа пользователя, чтобы система знала, что вы сделали.Блок не имеет возвращаемого значения или параметров.

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

...