iOS:是否可以在Safari中直接打开NSURLRequest?

iOS:是否可以在Safari中直接打开NSURLRequest?,ios,post,mobile-safari,nsurlrequest,Ios,Post,Mobile Safari,Nsurlrequest,我不是说UIWebView,我想用NSURLRequest打开移动safari应用程序 为什么??在我的应用程序中,用户已登录到我们的web服务器。我想让用户选择启动网页,而不必重新输入他们的凭据。但是,我不能使用GET,因为这会将他们的凭据放在URL中 因此,我可以用NSURLRequest或其他形式的POST从我的应用程序中打开safari应用程序(而不是UIWebView)吗?使用NSURL,或者只使用NSString,或者只使用char*就更简单了。 我不确定这是否适用于iPhone,因

我不是说
UIWebView
,我想用
NSURLRequest
打开移动safari应用程序

为什么??在我的应用程序中,用户已登录到我们的web服务器。我想让用户选择启动网页,而不必重新输入他们的凭据。但是,我不能使用
GET
,因为这会将他们的凭据放在URL中


因此,我可以用
NSURLRequest
或其他形式的
POST
从我的应用程序中打开safari应用程序(而不是
UIWebView
)吗?

使用
NSURL
,或者只使用
NSString
,或者只使用char*就更简单了。 我不确定这是否适用于iPhone,因为iPhone与Darwin的运行方式类似于OSX,但在iPhone上有一些限制。 不过这在mac电脑上绝对有效

NSString *url = @"http://www.apple.com";
NSURL *myURL = [NSURL URLWithString:url];
system([ [NSString 
          stringWithFormat:@"Open -a Safari %@", 
          [NSString stringWithContentsOfURL:myURL encoding:NSUTF8StringEncoding error:NULL] ]
          cStringUsingEncoding:NSUTF8StringEncoding]);

此外,我可能会建议这是一个坏主意(如果可以避免的话)。作为一名iPhone用户,当开发者将我从当前使用的应用程序中带走时,我肯定不是唯一一个感到非常恼火的人。

我要冒着风险说不——没有办法将
NSURLRequest
直接传递给Safari。iOS上的(主要)应用程序间通信介质是访问URL;没有将对象从一个应用程序传递到另一个应用程序的通用机制


我认为你能做的最好的事情就是在应用程序中从你的web服务器获取一个,然后在URL中弹出Safari。如果可以的话,可以通过HTTPS实现,这样URL路径和查询组件只有在TLS协商成功后才可见。这将阻止其他任何人看到相关凭据,并阻止它们发挥作用,即使它们是通过其他方式获得的(例如您旁边的人从屏幕复制URL)。

您使用的是什么形式的会话管理?而且,就这一点而言,为什么让用户跨凭证边界重新验证会很昂贵?我从来没有说过这很昂贵,但主要原因是因为这正是我们的客户想要的。至于会话管理,webservice MVC 3.NET,我相信它只是一个cookie(出于与密码相同的原因,我们不希望通过url发送)。最终,您必须通过网络发送某种形式的凭证以确保安全。如果您提供HTTPS并允许Safari正确验证证书,我建议您使用会话标识符或认证优惠券的概念,由您的客户端通过网络发送。这还不够吗?我不明白。您说“用户已经登录到我们的web服务器”,但“获取”会“将其凭据放入URL”。他们最初是如何登录的?为什么GET会公开其凭据?@mtmurdock关于登录和会话优惠券:您需要提供某种形式的保证,即客户端发送并被服务器接受的数据很可能来自请求方。一个可靠的方法是提供某种形式的连接,例如,加密函数的数学保证使得其他人正在使用该连接极为不可信,毫无妥协。重读你的问题,我想我可能误解了它。很抱歉回答了这个没用的问题。在iPhone上,你应该使用
[[UIApplication sharedApplication]openURL:myURL]
而不是通过系统调用来打开。根据苹果关于第三方复制内置功能的规定,您将获得Safari,因此它基本上与OS X上的
[[NSWorkspace sharedWorkspace]openURL:myURL]
相同,只是您可以自信地获得Safari,正如原始海报所规定的。很高兴知道,谢谢。我是新来这个网站的,我想知道我是应该删除这篇文章还是按原样离开?大福?!我建议您阅读更多关于
NSWorkspace
和/或
UIApplication
?你的代码就像驾驶一辆装在火箭上的坦克进入你最好的朋友家,而火箭本身就装在一艘大型宇宙飞船上,而不只是按门铃。编辑:该死,太多时间花在夸张上了…@MichaelDorst如果你想删除答案,那就看你了。有时错误的答案有助于增加整体知识,有时会分散注意力。另外,我认为JustSid指的是您的编码风格,而不是代码的准确性。无论何时你在这个网站上发布任何东西,你都要确保它尽可能干净、清晰(和准确),而不添加任何无关的细节。感谢您的贡献!:这是一个有趣的解决方案。我不确定我是否能保证https连接,但如果我能,这可能会起作用。我对这个答案持中立态度。我想对它进行投票,但它遗漏了很多有趣的细节,vis和HTTPS协商的技术细节,这些细节保证了路径型凭证不会泄露给世界。否则,我同意。:)@戈麦斯先生,它省略了细节,因为我对细节的了解非常不精确。“我已经把答案标记为社区维基,希望有人能把这些内容填进去?”汤米说。谢谢你允许我这么做!