gpt4 book ai didi

iOS - 在不打开新标签的情况下从 native 应用程序返回到 Safari

转载 作者:技术小花猫 更新时间:2023-10-29 10:36:13 26 4
gpt4 key购买 nike

我无法弄清楚如何从 iOS 7+ 中的 native 应用程序切换到 Safari。我使用了 UIApplication.sharedApplication.openURL(),但这会打开一个新选项卡。我想在不打开新选项卡的情况下将用户返回到他/她之前正在查看的当前页面。我找到了 this SO post,但它已经有几年了,所以我希望从那以后情况有所改变。

这是我设想的工作流程:

  1. 用户在 Safari 上点击 HTML 页面上的链接以打开/安装我的应用
  2. 用户对我的应用执行操作
  3. 用户完成操作后,我的应用程序会自动打开 Safari,用户会回到他/她离开的页面

谷歌以某种方式通过他们的谷歌地图应用程序做到了这一点。如果你在 Safari 上搜索 google.com 上的地址,你可以点击搜索结果中显示的 map ,它会打开 map 应用程序。在 map 应用程序的顶部将是一个“返回 Safari”栏,您可以点击它。一旦你点击它,你将返回到 Safari 而不会加载另一个选项卡。我似乎找不到任何关于谷歌如何做到这一点的信息。如果我可以在我的应用程序中复制该行为,那就可以了。

如有任何帮助,我们将不胜感激!

最佳答案

有一种方法可以使用标准 iOS API 来完成您想要的。无需使用外部组件。

您控制着您的网页和您的应用,因此您知道包含您的应用链接的确切 URL。

这些是步骤:

1) 在您的应用中,定义自定义 URL 方案。在这种情况下,我们假设您使用方案 myawesomeapp://。您可以在您的 Xcode 项目中通过转到目标的信息部分来执行此操作。见下文

Defining a custom URL scheme

2) 在您的网页中,您需要处理两种情况:应用已安装/未安装。这只是检测应用程序是否响应方案 myawesomeapp:// 的问题。

要从您的网页检测您的应用程序是否未安装,请参阅 this post

我将解释您的应用已安装的情况。

假设包含链接的网页是:

http://www.mywebsite.com/mypage.html#mytag

您在网页中提供的链接应将一些参数传递给应用程序,其中之一应该是您希望应用程序返回的网址。下面的示例链接可能是:

myawesomeapp://?action=my_action_1&sourceurl=http%3A%2F%2Fwww.mywebsite.com%2Fmypage.html%23mytag

请注意,您在方案中作为参数传递的 URL 必须是 URL encoded否则将无法正常工作。

3) 在您的应用委托(delegate)中,您需要实现以下方法:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

在此方法中,解析 URL、解码查询项并将 sourceURL 传递给负责在调用之前处理操作的 View Controller 。在这种情况下,我在将存储 URL 的 ViewController 中设置了一个公共(public)属性。

@property (nonatomic, strong) NSURL *sourceURL;

4) 在 View Controller 中,当用户完成交互时,你只需调用:

[[UIApplication sharedApplication] openURL:self.sourceURL];

因为 self.sourceURL 包含您网页的 URL,Safari 将使用该 URL 启动。但是,由于该页面已经打开,iOS 会检测到这一点并重新打开该页面。

我的 Github page 中有一个示例项目实现了这一切。

最后,在您的 iPhone 中安装示例项目后,从移动版 Safari 和 open my awesome app 打开此堆栈溢出帖子

打开应用程序后,单击按钮,您将返回到此堆栈溢出帖子。

关于iOS - 在不打开新标签的情况下从 native 应用程序返回到 Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com