【问题标题】:application:openURL:sourceApplication:annotation return NO versus YESapplication:openURL:sourceApplication:annotation 返回 NO 与 YES
【发布时间】:2011-11-16 13:34:57
【问题描述】:

我正在注册一个应用程序来处理通过 URL 打开的问题,我对

感到困惑

application:openURL:sourceApplication:annotation

根据documentation,如果您可以支持该 URL,则应返回 YES,否则返回 NO。这有什么好处呢?如果 URL 格式不正确或不受支持,我将返回 NO,但应用程序仍会打开,就好像没有出现任何问题一样。谁会听BOOL 的返回,他们会用它做什么?如果 URL 格式不正确或不受支持,是否有阻止应用打开的方法?

【问题讨论】:

    标签: ios cocoa-touch uiapplicationdelegate


    【解决方案1】:

    文档说,如果您成功打开了 URI,则返回 YES;如果没有,则返回 NO。请注意,“打开成功或打开失败”在语义上与“可以打开或不能打开”不同。不幸的是,没有办法阻止应用程序启动 - 如果它注册了一个模式,那么无论 URI 的其余部分是否格式正确,它都会启动。

    UIApplication 有两个方法:canOpenURL:openURL:。第一个 ONLY 检查是否支持架构(不是完整的 URL),后者在哪里启动应用程序并返回应用程序委托的结果。

    所以要回答您的问题:调用[[UIApplication sharedApplication] openURL:url] 的另一个应用程序是听您的代表结果的应用程序

    【讨论】:

    • 很有趣,那么其他应用应该何时/如何响应响应?此时用户在不知道如何处理传递的 URL 的应用程序中
    • 没错。此时用户在另一个应用程序中并且不会回到您的应用程序,除非另一个应用程序专门启动您的应用程序或用户手动切换回来。我不确定他们创建此 API 的意图是什么,但我认为它主要是为同一开发人员的应用程序之间的通信而创建的,这些开发人员彼此“玩得很好”。这是一个猜测,我认为您找不到有关 Apple 为何采用这种方法的文档。它也可能只是旧版 iOS 之上“他们能做到的最好”的过时 API。
    • 这是一个合理的假设。感谢您的输入,我会将此标记为已回答,并相信它主要是一个无用的返回值。
    • 刚刚测试:应用 A 启动应用 B。B 从 application:openURL:options: 返回 NO。在openURL:options:completionHandler: 中,应用A 仍会收到success=YES。所以启动应用的返回值不会发送回调用应用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多