应用程序关闭时实现 Agora 信号通信

implementation of Agora signalling to communicate when app is closed

我目前正在开发 Agora.io 服务,这些服务为我们提供

audio,video,one-to-one and broadcast communication

我已经在给定示例的帮助下成功实现了这些,并成功添加了信令模块。 问题是信令呼叫必须处于活动状态才能访问它的所有功能现在我想在应用程序关闭时访问信令的所有功能,如 whatsapp 和其他此类应用程序,一种解决方案是提供信令服务 class 但这不是专业的解决方案。

我想要一个高效的解决方案

任何第 3 方 API 都无法做到这一点。这是 Apple & Google 提供的系统级功能。您将不得不使用 CallKit(对于 iOS)或 ConnectionService(对于 Android)来实现此功能。

几天前我也做过同样的事情。

对于iOS,您已经通过以下方式使用PushKit和CallKit:-

.1。启用后台模式并检查 voip。

  1. 导入Pushkit并实现PKPushRegistryDelegate功能。

像这样注册 pushkit :-

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

3.Implement 代币功能

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

let tokenChars = pushCredentials.token.hexString()
 }
  1. 实现如下函数解析通知

    func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType) { 如果让 userInfo = payload.dictionaryPayload["userInfo"] 作为? [AnyHashable:任何]{ } }

  2. 实施提供商委托功能:

    让 providerConfiguration = CXProviderConfiguration(localizedName: appName) providerConfiguration.supportsVideo = 真 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()
    }

你也可以参考我这里的post。 how to integrate Callkit with Agora VOiP in swift 4 iOS?