Я разрабатываю приложение, которое использует 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.