【问题标题】:Allow opening my app from a link in a third-party app允许通过第三方应用中的链接打开我的应用
【发布时间】:2017-05-18 12:04:01
【问题描述】:

我目前正在使用自定义 URL 方案来允许用户从自定义链接 (foobar://resource/42) 访问我的应用程序(例如,FoobarApp)。

我这样设置方案:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.acme.foobarapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>foobar</string>
        </array>
    </dict>
</array>

当用户在 Safari 中单击链接时,这很有效。

现在我希望他们能够单击第三方应用(在我的情况下为 Trello)中的上述链接,以打开我的应用。

这不起作用,因为系统(如果我没记错的话,从 iOS 9 开始)现在要求应用将他们想要查询的 URL 方案列入白名单(在 Info.plist 中使用 LSApplicationQueriesSchemes)。

(这是我在第三方应用程序中单击链接时在日志中收到的消息:

iPad Trello(UIKit)[2368]:-canOpenURL:URL 失败:“foobar://resource/42”-错误:“此应用不允许查询方案 foobar”

)

期望第三方应用程序将我的(企业)应用程序的方案添加到他们的LSApplicationQueriesSchemes 列表中是不合理的。他们是否可以选择“绕过”这种保护?一种告诉系统“很好,Trello 可以打开我的应用”的方式?

总结

  • 自定义应用链接 foobar:// 可在 Safari 中使用
  • 它们在第三方应用程序中不起作用(没有任何反应,请参阅记录几行)
  • 如何将第三方应用列入白名单,以便他们可以打开我的应用?

【问题讨论】:

    标签: ios url-scheme


    【解决方案1】:

    应用程序必须告诉 ios 它想要查询 url 方案。它必须在编译时在其信息 plist 中声明它!

    在苹果允许的 iPhone 上无法解决这个问题。

    当然,当您越狱手机时,一切都可以完成,但是……这也不是一个有效的假设;)


    一种解决方法可能是通过 HTTP 链接到网站并让用户从那里打开应用程序。

    【讨论】:

    • 也只有canOpenUrlLSApplicationQueriesSchemes openURL:限制。因此,如果一个应用只是打开您的 URL,它应该可以工作。
    • 非常正确。我专注于 canOpen,因为 OP 显示了来自 trello 的错误。我忘了这个
    • 感谢@Daij-Djan。我们最终使用了您的解决方法,一个 HTTP 链接与我们的服务器返回一个 301 重定向到 foobar:// 方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多