我的用例是这样的,我想从safari启动我的应用程序,然后从我的应用程序返回到safari的SAME SESSION。 第1步:
第2步:
如何实现第2步?
以下代码是启动safari
NSString *strurl = @"http://www.google.com"
NSURL *url = [NSURL URLWithtring:strurl];
[[UIApplication sharedApplication] openURL:url];
注意:上面的代码将启动指定URL的Safari。
- 如何通过恢复上一个会话来启动Safari?
答案 0 :(得分:0)
我认为绝对有办法在这里完成你想要的东西。由于您说您已成功完成第1步,因此您可能已经为应用程序注册了自定义URL方案,并在Safari中设置了一个URL,用户单击该URL以打开您的应用程序。让我们假装您的自定义网址方案为myApp://
,在这种情况下,您需要做的就是嵌入您的应用程序需要知道的有关将URL作为该网址的一部分发送到何处的信息,例如myapp://mysite.com/page/to/display
然后,在您的app delegate的application:openURL:sourceApplication:annotation:
方法中,您可以查看用于打开应用程序的URL,并将您需要告知Safari返回的部分存储起来mysite.com/page/to/display
in这个例子。 (如果您使用的是早于4.2的iOS版本,则会调用更简单的方法application:handleOpenURL:
。)
因此,我们假设在此方法中,我们将属性openedURL
中给出的URL存储如下(此代码在您的应用程序委托中):
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
self.openedURL = openURL;
}
然后,当您想要重新启动Safari时,只需使用保存的信息将Safari打开到正确的位置即可。您需要将myApp:
方案替换为http:
,以便将其发送到Safari:
NSURL *safariURL = [[NSURL alloc] initWithScheme:@"http"
host:[openedURL host]
path:[openedURL path]];
[[UIApplication sharedApplication] openURL:[safariURL autorelease]];
如果您要打开的URL需要向您的应用程序发送其他信息(这似乎很可能),那么您需要做一些更复杂的事情,但您仍然可以将您想要返回的页面嵌入到Safari中作为URL中的查询参数或类似的内容:myApp://process?arg1=foo,arg2=bar,safariContext=mysite.com/page/to/display
(当然,使用正确的URL编码)。
这有意义吗?