有一种方法可以使用标准 iOS API 来完成您想要的事情。无需使用外部组件。
您可以控制您的网页和您的应用,因此您知道包含指向您的应用的链接的确切 URL。
这些是步骤:
1) 在您的应用中,定义自定义 URL 方案。在这种情况下,假设您使用方案myawesomeapp://。您可以通过转到目标的 Info 部分在您的 Xcode 项目中执行此操作。见下文
2) 在您的网页中,您需要处理两种情况:应用已安装/未安装。这只是检测应用程序是否响应方案myawesomeapp:// 的问题。
要从您的网页检测您的应用是否未安装,请参考this post
我将解释您的应用已安装的情况。
假设包含链接的网页是:
http://www.mywebsite.com/mypage.html#mytag
您在网页中提供的链接应将一些参数传递给应用,其中之一应该是您希望应用返回的 URL。以下示例链接可能是:
myawesomeapp://?action=my_action_1&sourceurl=http%3A%2F%2Fwww.mywebsite.com%2Fmypage.html%23mytag
请注意,您在方案中作为参数传递的 URL 必须是 URL encoded,否则将无法正常工作。
3) 在您的应用委托中,您需要实现该方法:
- (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 包含您网页的 URL,Safari 将使用该 URL 启动。但是,由于该页面已经打开,iOS 会检测到这一点并重新打开该页面。
我的Github page 中有一个示例项目,它实现了所有这些。
最后,在您的 iPhone 中安装示例项目后,从移动 Safari 和open my awesome app打开此堆栈溢出帖子@
打开应用后,单击按钮,您将返回此堆栈溢出帖子。