为了账号安全,请及时绑定邮箱和手机立即绑定

不调用方法“ application:openURL:options:”

不调用方法“ application:openURL:options:”

iOS
海绵宝宝撒 2020-02-02 15:19:48
我正在尝试使用自定义方案从网页打开我的应用程序。该应用已打开,但未调用以下方法:func application(_ app: UIApplication, open url: URL, options [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {    // This is not called}我的info.plist样子如下:    <key>CFBundleURLTypes</key>    <array>        <dict>            <key>CFBundleURLSchemes</key>            <array>                <string>MyApp</string>            </array>            <key>CFBundleURLName</key>            <string>url here</string>        </dict>    </array>该项目是使用Xcode 11.1创建的,我正在iOS 13上进行测试。
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

scene(_:openURLContexts:)在您的场景委托中实施。


如果该网址启动了您的应用,则您将获得该网址scene(_:willConnectTo:options:),它位于中options。


查看完整回答
反对 回复 2020-02-02
?
慕后森

TA贡献1802条经验 获得超5个赞

使用最新的SDK,如果您不使用SceneDelegate,则可以正常工作。


如果使用的是SceneDelegate,则不会调用以下AppDelegate方法,因此无法处理登录。


func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

    let handled = ApplicationDelegate.shared.application(

        application,

        open: url,

        sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,

        annotation: options[UIApplication.OpenURLOptionsKey.annotation])

    return handled

}

这是因为(可以理解)将此方法推迟到SceneDelegate中的以下方法:


func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

    ...

}

我可以确认适用于实现SceneDelegate的iOS 13应用程序的解决方案是:


func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

    guard let url = URLContexts.first?.url else {

        return

    }

    let _ = ApplicationDelegate.shared.application(

        UIApplication.shared,

        open: url,

        sourceApplication: nil,

        annotation: [UIApplication.OpenURLOptionsKey.annotation])        

}


查看完整回答
反对 回复 2020-02-02
  • 3 回答
  • 0 关注
  • 3126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信