Реализация сигнализации Агора для общения, когда приложение закрыто - PullRequest
0 голосов
/ 04 мая 2018

В настоящее время я работаю над услугами Agora.io , которые предоставляют нам

аудио, видео, индивидуальная и широковещательная связь

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

Я хочу эффективное одно решение

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Несколько дней назад я сделал то же самое.

Для iOS вы можете использовать PushKit и CallKit следующими способами: -

0,1. Включите фоновый режим, а также проверьте voip.

You dont have to check Audio option necessarily

  1. Импорт Pushkit и реализация функций PKPushRegistryDelegate.

Зарегистрируйте pushkit следующим образом: -

  func registerPushkitToken() -> Void {
        pushRegistry = PKPushRegistry.init(queue: DispatchQueue.main)
        pushRegistry?.delegate = self
        pushRegistry?.desiredPushTypes = [.voIP]
    }

3. Реализация функции токена

func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: 
     PKPushCredentials, for type: PKPushType) {

let tokenChars = pushCredentials.token.hexString()
 }
  1. Реализовать следующую функцию для разбора уведомления

    func pushRegistry (_ реестр: PKPushRegistry, didReceiveIncomingPush с полезной нагрузкой: PKPushPayload, для типа: PKPushType) { если пусть userInfo = payload.dictionaryPayload ["userInfo"] как? [AnyHashable: Любые] { } }

  2. Реализация делегатских функций провайдера:

    let providerConfiguration = CXProviderConfiguration (localizedName: appName) providerConfiguration.supportsVideo = true providerConfiguration.maximumCallsPerCallGroup = 1 providerConfiguration.maximumCallGroups = 1 providerConfiguration.supportedHandleTypes = [.generic]

Реализация функций CXProviderDelegate

func providerDidReset(_ provider: CXProvider) {
        print("Function: \(#function), line: \(#line)")

        sessionPool.removeAll()
    }

    func provider(_ provider: CXProvider, perform action: CXStartCallAction) {

        print("Function: \(#function), line: \(#line)")

        guard let session = pairedSession(of:action.callUUID) else {
            action.fail()
            return
        }

        let callUpdate = CXCallUpdate()
        callUpdate.remoteHandle = action.handle
        callUpdate.hasVideo = true
        callUpdate.localizedCallerName = callDetails.dispalyName;
        callUpdate.supportsDTMF = false
        provider.reportCall(with: action.callUUID, updated: callUpdate)

        delegate?.callCenter(self, startCall: session)
        action.fulfill()
    }

Вы также можете сослаться на мой пост здесь. https://stackoverflow.com/questions/54197721/how-to-integrate-callkit-with-agora-voip-in-swift-4-ios/54647666#54647666

0 голосов
/ 07 мая 2018

Этого нельзя сделать с помощью любых сторонних API. Это функциональность системного уровня, предлагаемая Apple & Google. Вам потребуется использовать CallKit (для iOS) или ConnectionService (для Android) для достижения этой функциональности.

...