Java 在应用程序关闭时实施Agora通信信号

Java 在应用程序关闭时实施Agora通信信号,java,android,android-studio,communication,agora.io,Java,Android,Android Studio,Communication,Agora.io,我目前正在为Agora.io提供服务 音频、视频、一对一和广播通信 我已经在这些给定示例的帮助下成功地实现了这些,并成功地添加了信令模块。 问题是信令呼叫必须处于活动状态才能访问它的所有功能现在我想在应用程序关闭时访问信令的所有功能,如whatsapp和其他此类应用程序一个解决方案是提供信令类服务,但这不是专业解决方案 我想要一个高效的解决方案这是任何第三方API都无法做到的。这是苹果和谷歌提供的系统级功能。您必须使用CallKit(用于iOS)或ConnectionService(用于Andr

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

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

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


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

这是任何第三方API都无法做到的。这是苹果和谷歌提供的系统级功能。您必须使用CallKit(用于iOS)或ConnectionService(用于Android)来实现此功能

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

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

.1。启用后台模式,同时检查voip

  • 导入Pushkit并实现PKPushRegistryDelegate函数
  • 按如下方式注册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(registry:PKPushRegistry,didReceiveIncomingPushWith payload:PKPushPayload,for type:PKPushType){ 如果让userInfo=payload.dictionaryPayload[“userInfo”]作为?[AnyHashable:Any]{ } }

  • 实现提供程序委托功能:

    让providerConfiguration=CXProviderConfiguration(localizedName:appName) providerConfiguration.supportsVideo=true providerConfiguration.maximumCallsPerCallGroup=1 providerConfiguration.maximumCallGroups=1 providerConfiguration.SupportedHandletTypes=[.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()
        }
    

    你也可以参考我在这里的帖子

    连接服务是一种内置服务?是的,它是一个Android库。你有解决方案吗。如果是的话,你能分享你的代码吗。