メソッド 'scene(_:openURLContexts :)'は呼び出されません


9

info.plistファイルで、構成URL IdentifierしてURL Scheme正常に実行しました。また、カスタムURLを使用してアプリを開くこともできます。問題は、アプリがメソッドを初めて起動したときです

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.

上記の方法に基づくいくつかの依存機能があります。そのため、アプリを初めて起動したときに、アプリに何も表示されません。

また、メソッドにコードを追加しました

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        guard let _ = (scene as? UIWindowScene) else { return }

        let url = connectionOptions.urlContexts.first?.url

    }

ここではnilとしてURLを取得します。

ただし、アプリがバックグラウンドモードでURLを押すと、上記のメソッドが正常に呼び出され、依存する機能が正常に動作します。以下は、私のscene(_:openURLContexts:)メソッドのコードsceneDelegateです。

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>){
        let url = URLContexts.first?.url
        let urlString: String = url!.absoluteString

        if let urlComponents = URLComponents(string: urlString),let queryItems = urlComponents.queryItems {
            queryParams = queryItems
        } else {
            print("invalid url")
        }

        guard let windowScene = (scene as? UIWindowScene) else { return }


        self.window = UIWindow(windowScene: windowScene)
        //self.window =  UIWindow(frame: UIScreen.main.bounds)

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        guard let rootVC = storyboard.instantiateViewController(identifier: "LocationViewIdentifier") as? UIViewController else {
            print("ViewController not found")
            return
        }
        let rootNC = UINavigationController(rootViewController: rootVC)
        self.window?.rootViewController = rootNC
        self.window?.makeKeyAndVisible()
    }

上記のメソッドが初めて呼び出されない理由を誰かに教えてもらえますか?


この質問の現在の状況は何ですか?答えの1つで問題は解決しましたか?はいの場合は、そのうちの1つを受け入れてください。さらに助けが必要ですか?「はい」の場合、提供されたソリューションが問題に対して何をしたのか、まだ何が欠けているのかを説明できますか?この問題を解決するためにお手伝いさせていただきます
Muli

回答:


2

多分これはあなたの状況を助けるでしょう。

func scene(_ scene:UIScene、willConnectTo session:UISceneSession、options connectionOptions:UIScene.ConnectionOptions){

    let urlinfo = connectionOptions.urlContexts
    url = urlinfo.first?.url as!NSURL

}

func scene(_ scene:UIScene、openURLContexts URLContexts:Set){

    let url = URLContexts.first!.urlをNSURLとして

}


2

同じ問題があり、メソッドscene(_ scene:, continue userActivity:)はアプリが開いているときにのみ呼び出されました。

私がチェックしたとき connectionOptionsメソッドscene(_ scene:, willConnectTo session, options connectionOptions:)に渡されしたところ、予期したURLのユーザーアクティビティがありました。だから、私は手動で最初のメソッドを呼び出すことになりました:

func scene(_ scene: UIScene,
           willConnectTo session: UISceneSession,
           options connectionOptions: UIScene.ConnectionOptions) {

    if let userActivity = connectionOptions.userActivities.first {
        self.scene(scene, continue: userActivity)
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.