发布&从iOS中的应用程序恢复safari会话

时间:2011-06-17 04:54:53

标签: ios ipad session safari

我的用例是这样的,我想从safari启动我的应用程序,然后从我的应用程序返回到safari的SAME SESSION。 第1步:

  • 从safari浏览器启动我的应用程序[能够成功实现]

第2步:

  • 通过维护启动应用程序的相同会话启动safari [在步骤1]

如何实现第2步?

以下代码是启动safari

NSString *strurl = @"http://www.google.com"
NSURL *url = [NSURL URLWithtring:strurl];
[[UIApplication sharedApplication] openURL:url];

注意:上面的代码将启动指定URL的Safari。

- 如何通过恢复上一个会话来启动Safari?

  • 当我从中启动应用程序时,是否有任何可能性的safari向我发送该页面的唯一ID,以便当我尝试从我的应用程序启动safari时,它会很有用。[只是一个含糊的想法]。

1 个答案:

答案 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编码)。

这有意义吗?