3

我目前正在为我们提供Agora.io服务

音频、视频、一对一和广播通信

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

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

4

2 回答 2

3

这不能通过任何 3rd 方 API 完成。这是 Apple 和 Google 提供的系统级功能。您必须使用 CallKit(适用于 iOS)或 ConnectionService(适用于 Android)来实现此功能。

于 2018-05-07T17:04:46.633 回答
2

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

对于 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.实现token功能

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) { if let userInfo = payload.dictionaryPayload["userInfo"] as? [AnyHashable:Any]{ } }

  2. 实现提供者委托功能:

    让 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()
    }

你也可以参考我这里的帖子。如何在 swift 4 iOS 中将 Callkit 与 Agora VOiP 集成?

于 2019-02-13T17:25:20.727 回答