应用关闭时实现 Agora 信令进行通信

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

你有没有解决这个问题。如果是这样,请您分享您的代码。 【参考方案1】:

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

【讨论】:

ConnectionService 是内置服务吗? 是的,它是一个 Android 库【参考方案2】:

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

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

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

    导入 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()
 

    实现以下解析通知的函数

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

    实现提供者委托功能:

    让 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?

【讨论】:

以上是关于应用关闭时实现 Agora 信令进行通信的主要内容,如果未能解决你的问题,请参考以下文章

信令服务器房间设置

关闭应用程序时颤动agora视频通话屏幕

Nodejs搭建音视频通信 信令服务器

WebRTC介绍及简单应用

华为通信/网络方面的笔试题——电信基础知识题库2

如何在 URL 中嵌入 App ID 和 Channel ID (Agora.io)