【问题标题】:implementation of Agora signalling to communicate when app is closed应用关闭时实现 Agora 信令进行通信
【发布时间】:2018-05-04 12:43:46
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你有没有解决这个问题。如果是这样,请您分享您的代码。

标签: java android android-studio communication agora.io


【解决方案1】:

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

【讨论】:

  • ConnectionService 是内置服务吗?
  • 是的,它是一个 Android 库
【解决方案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) { 如果让 userInfo = payload.dictionaryPayload["userInfo"] as? [AnyHashable:任何]{ } }

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

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

【讨论】:

    猜你喜欢
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多