我的应用程序有一些问题,我想要的只是在获得 pushkit VOIP 呼叫时才打开呼叫屏幕。但问题是应用程序再次打开(当被杀死时),这么多请求被发送到服务器,我只想打开呼叫屏幕,然后可能在呼叫关闭后退出应用程序。
我现在来全面解释这个问题:
首先,在应用程序委托中,我替换为此类(此类具有与闪屏相同的 UI)
initiateFirstScreen("SplashScreen", storyboardName : "sheet")
在这个类里面。 我必须检查令牌、用户信息、连接到信号服务器,大约需要 5-8 秒,当所有加载完毕后,我调用此函数导航到主屏幕:
func checkLogin() {
if let oauth = AppDelegate.shared.authState, oauth.isAuthorized{
initiateFirstScreen("HomeVC", storyboardName : "main")
}else{
initiateFirstScreen("LoginVC", storyboardName : "main")
}
}
func initiateFirstScreen(_ vcName: String, storyboardName : String) {
guard let window = AppDelegate.shared.window else{
AlertUtils.alertMessageWithOkAction(vc: self, mes: Language.get("Something went wrong")){b in
exit(0)
}
return
}
let storyBoard: UIStoryboard = UIStoryboard(name: storyboardName, bundle: nil)
let vc = storyBoard.instantiateViewController(withIdentifier: vcName)
window.rootViewController = vc
window.makeKeyAndVisible()
}
在上面的代码中,我使用 window.rootViewController = vc 在没有任何动画的情况下显示主屏幕。
问题: 由于在 SplashScreen 中加载时间过长,当我得到 pushKit -> 显示 Callkit 屏幕时,用户可能需要 3-4 秒才能回答(当应用程序被杀死/滑动时)
-> didFinishLaunchingWithOptions 调用
-> SplashScreen 调用,当用户接听电话时,加载“检查令牌、用户信息、连接到信号器”
-> 因此,调用以下函数:
window.rootViewController = vc
window.makeKeyAndVisible()
-> 现在我的通话屏幕很清楚了,这就是问题所在。
所以我想解决这个问题,抱歉我的愚蠢问题,但这让我浪费了 3 天却无法解决这个问题:(
答案 0 :(得分:0)
您可以使用委托
func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession)
当您接听电话时,此代表会接到电话。所以只需直接导航到呼叫屏幕。并添加一个标志,例如。 isCall = true 并阻止用户这次导航到主屏幕