iOS - PushKit без VOIP / FCM с CallKit

Я разрабатываю приложение, которое использует CallKit для уведомления пользователей. Однако я тестирую приложение с APN, и оно работает не так, как я ожидал.

Последовательность действий должна быть следующей: «Получить FCM» -> «Создать вызов с помощью Callkit» -> «Пользователь принимает вызов» -> «Сделать что-нибудь».

ПОТОК ПОДОБНЫЙ С ПРИЛОЖЕНИЕМ, КАК WHATSAPP, НО У МЕНЯ НЕТ VOIP, МНЕ НУЖНО УБЕДИТЬСЯ, ЧТО КАЛЛКИТ АКТИВИРУЕТСЯ КАЖДЫЙ РАЗ, ЕСЛИ ЕСТЬ FCM.

Однако в настоящее время, если приложение работает в фоновом режиме или неактивно, callkit не запускается.

Я подумываю использовать PushKit для этого. Однако у меня нет опыта работы с PushKit (и я не уверен, будет ли мое приложение забанено или нет, согласно этому сообщению: PushKit: можем ли мы использовать push-комплект (VoiP Push) в приложении чата без использования VoiP

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 message ID.
    if let messageID = userInfo[gcmMessageIDKey] {
        print("Message ID: \(messageID)")
    }

    let aps = userInfo["aps"] as! [String: AnyObject]
    // 1
    if aps["content-available"] as? Bool == true {
        let uuid = UUID(uuidString: MyVariables.uuid)

        AppDelegate.shared.displayIncomingCall(uuid: uuid!, handle: "Sanoste", hasVideo: false) { _ in}

    }else  {
        completionHandler(UIBackgroundFetchResult.newData)
    }

    // Print full message.
    print(userInfo)

    completionHandler(UIBackgroundFetchResult.newData)

}

Приведенный выше код - это то, что я использую сейчас для CallKit.


person Le Trong Triet    schedule 31.07.2017    source источник


Ответы (1)


Из того, что я понимаю о комплекте вызова + набор для нажатия, является то, что приложение становится активным после того, как пользователь принудительно выйдет из него. Вам необходимо отправить специальное push-уведомление VOIP, которое использует ваш push-сертификат voip, настроенный в разделе «Сертификаты, идентификаторы и профили» на сайте developer.apple.com.

Итак, я вижу, что ваш подход - обратный. Вы должны использовать внешний сервер для отправки push-уведомления voip, которое разбудит ваше приложение для обработки уведомления ... затем выполните любую дополнительную обработку, которая вам нужна.

Кроме того, вам также необходимо указать, что ваше приложение использует фоновые режимы VOIP. И также стоит отметить, что если вы на самом деле не используете VOIP, как предполагалось, Apple, скорее всего, отклонит вас из магазина приложений.

person Doug    schedule 31.07.2017
comment
Здравствуйте, спасибо за ответ. Вчера я тестировал сертификат разработки VOIP, и все работает, как я ожидал. Однако вы правы, у нашей команды отсутствует НАСТОЯЩИЙ бэкэнд Voip вместо того, чтобы использовать pushkit только для push-уведомлений. Я думаю, что наша команда должна обсудить еще раз или попросить помощи у Apple. В любом случае, еще раз спасибо. - person Le Trong Triet; 01.08.2017