swift pushkit -> 打开呼叫屏幕而不打开整个应用程序

时间:2021-05-12 14:40:13

标签: swift pushkit

我的应用程序有一些问题,我想要的只是在获得 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 天却无法解决这个问题:(

1 个答案:

答案 0 :(得分:0)

您可以使用委托

func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession)

当您接听电话时,此代表会接到电话。所以只需直接导航到呼叫屏幕。并添加一个标志,例如。 isCall = true 并阻止用户这次导航到主屏幕