我目前正致力于提供 Agora.io 服务
音频,视频,一对一和广播通信
我已经在给定样本的帮助下成功实现了这些,并成功添加了信令模块。 问题是信令呼叫必须是活动的才能访问它的所有功能现在我想在应用程序关闭时访问信令的所有功能,如whatsapp和其他这些类型的应用程序一个解决方案是提供信令类服务但这是不专业的解决方案
我想要一个有效的解决方案
答案 0 :(得分:1)
使用任何第三方API都无法做到这一点。这是Apple& Co.提供的系统级功能。谷歌。您必须使用CallKit(适用于iOS)或ConnectionService(适用于Android)来实现此功能。
答案 1 :(得分:0)
几天前我做了完全一样的事情。
对于iOS,您已通过以下方式使用PushKit和CallKit:-
.1。启用后台模式并检查voip。
像这样注册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()
}
实现以下用于解析通知的功能
func pushRegistry(_注册表:PKPushRegistry,didReceiveIncomingPushWith负载:PKPushPayload,类型:PKPushType){ 如果让userInfo = payload.dictionaryPayload [“ userInfo”]为? [AnyHashable:Any] { } }
实现提供程序委托函数:
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