Ale*_*der 12 safari tabs native ios
我无法弄清楚如何从iOS 7+中的本机应用程序切换到Safari.我已经习惯了UIApplication.sharedApplication.openURL(),但是这会打开一个新标签.我想在不打开新标签的情况下将用户返回到他/她之前查看的当前页面.我找到了这个 SO帖子,但它已经有几年了,所以我希望自那时起事情发生了变化.
这是我想象的工作流程:
谷歌以某种方式使用谷歌地图应用程序完成了这项工作 如果您在Safari上的google.com上搜索地址,则可以点按搜索结果中显示的地图,它会打开地图应用.地图应用程序的顶部将是一个"返回Safari"栏,您可以点按.点击它后,您将返回Safari而不加载其他选项卡.我似乎无法找到关于谷歌如何做到这一点的任何事情.如果我可以在我的应用程序中复制该行为,那就可以了.
任何帮助将不胜感激!
Jua*_*lan 10
有一种方法可以使用标准iOS API实现您的目标.无需使用外部组件.
您可以控制自己的网页和应用,以便了解包含应用链接的确切网址.
这些是步骤:
1)在您的应用中,定义自定义URL方案.在这种情况下,我们假设您使用该方案myawesomeapp://.您可以通过转到目标的"信息"部分在Xcode项目中执行此操作.见下文

2)在您的网页中,您需要处理两个方案:安装/未安装应用程序.这只是检测应用程序是否响应该方案的问题myawesomeapp://.
要从您的网页检测您的应用是否未安装,请参阅此帖子
我将解释您的应用已安装的情况.
假设包含该链接的网页是:
http://www.mywebsite.com/mypage.html#mytag
您在网页中提供的链接应将一些参数传递给应用,其中一个应该是您希望应用返回的网址.以下示例链接可以是:
myawesomeapp://?action=my_action_1&sourceurl=http%3A%2F%2Fwww.mywebsite.com%2Fmypage.html%23mytag
请注意,作为方案内部参数传递的URL必须进行URL编码,否则将无法正常工作.
3)在您的app委托中,您需要实现该方法:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
在此方法中,解析URL,解码查询项并将sourceURL传递给负责在调用之前处理操作的视图控制器.在这种情况下,我在ViewController中设置一个将存储URL的公共属性.
@property (nonatomic, strong) NSURL *sourceURL;
4)在用户完成交互的视图控制器中,您只需调用:
[[UIApplication sharedApplication] openURL:self.sourceURL];
由于self.sourceURL包含您网页的网址,因此将使用该网址启动Safari.但是,由于该页面已经打开,iOS会检测到该页面并重新打开该页面.
我在Github页面中有一个示例项目来实现所有这些.
最后,在iPhone中安装示例项目后,从移动版Safari中打开此堆栈溢出帖并打开我的精彩应用程序
打开应用程序后,单击按钮,您将返回此堆栈溢出帖子.