【问题标题】:Return to sourceApplication after openUrl request is completely handled处理完openUrl请求后返回sourceApplication
【发布时间】:2015-07-03 14:27:10
【问题描述】:

我正在实现一个处理自定义协议的 iOS 应用。 在我的 AppDelegate 中编写方法 application(openURL:sourceApplication:annotation:) 很容易,但我遇到了一个问题:我希望 - 一旦用户完成请求 - 我的应用程序移到后台并将用户发送回来到调用者 sourceApplication(例如浏览器、二维码阅读器或任何其他应用程序)。

这就像 "tel:" 和 "telprompt:" url 调用之间的区别:在前一种情况下,电话应用程序保持活动状态,在后一种情况下,调用后,用户被发送回源应用程序。

为了让我的应用程序像“telprompt:”那样处理我的自定义协议,我能想到的唯一方法是在用户操作完成后终止应用程序......但这违反了 iOS 人机界面指南(他们说“不要以编程方式退出”),我的应用可能会被 Apple 拒绝。

在 Android 上这很容易:您使用 Activity 响应 Intent,当您对该 Activity 调用 finish() 时,用户将返回到他之前的应用程序/浏览器/其他任何内容。

有人知道在 iOS 上实现此目的的好方法吗?

澄清一下:

  • 我的应用不调用 openUrl,它响应来自浏览器、二维码阅读器、其他应用的 openUrl 请求;

  • 我不用打电话;

  • 当我处理一个请求时,我向用户询问一些数据,联系服务器,就是这样:交互已完成,如果不让用户使用主页按钮。

【问题讨论】:

    标签: ios


    【解决方案1】:

    我相信您应该在完成后调用 openUrl,并在参数中使用源应用程序 url。

    当您使用“与 facebook 连接”API 时,这就是 facebook 所做的。

    【讨论】:

    • 它不工作。例如。当通过在 safari 中打开的网页调用我的应用程序时,我收到 sourceApplication = "com.apple.mobilesafari"。然后我尝试使用“com.apple.mobilesafari”、“com.apple.mobilesafari:”甚至“com.apple.mobilesafari://”调用 openUrl,但它们都不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2014-07-11
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多