2012-03-26 17 views
5

UIWebViewについては、NSURLRequestを使ってモバイルサファリアプリを開きたいと思っています。iOS:NSURLRequestをSafariで直接開くことはできますか?

なぜですか?私のアプリでは、ユーザーはすでにWebサーバーにログインしています。私は、ユーザーに資格情報を再入力せずにWebページを起動するオプションを提供したいと考えています。しかし、GETを使用することはできません。なぜなら、URLに資格情報を入れるからです。

NSURLRequestまたはPOSTという別の形式のSafariアプリ(UIWebView)をアプリから開くことはできますか?

+2

どのような形式のセッション管理を使用していますか?そのため、ユーザーが資格の境界を越えて再認証するのはなぜコストがかかりますか? – MrGomez

+0

私はそれが高価だったとは言いませんでしたが、主な理由は、それが私たちのクライアントが望むものであるからです。セッション管理、ウェブサービスMVC 3 .NETについては、私はそれが単なるクッキーであると信じています(私たちはパスワードと同じ理由でURLを送信したくありません)。 – mtmurdock

+0

私は参照してください。最終的に、これを安全に保つために、ある形式の信用証明書を電信で送信する必要があります。 HTTPSを提供していて、Safariで証明書を正しく検証できるようにするには、クライアントから送信されたセッション識別子または認証クーポンの概念をいくつか推奨します。これで十分ではないでしょうか? – MrGomez

答えて

10

私は首に入れて言ういいえ - NSURLRequestをSafariに直接渡す方法はありません。 iOS上の(プライマリ)アプリケーション間通信媒体はURLにアクセスすることです。あるアプリケーションから別のアプリケーションにオブジェクトを渡すための一般的なメカニズムはありません。

あなたができることは、アプリケーション内のWebサーバーからone-time keyを取得してから、そのURLでSafariにポップアップすることです。可能であれば、HTTPS経由で行い、URLパスとクエリコンポーネントは、TLSネゴシエーションが成功した後にのみ表示されるようにします。他の誰かが関連する資格情報を見て、他の手段(たとえあなたの隣の誰かがあなたの画面からURLをコピーしているなど)で取得されたとしても、それらが有用であるのを止めるべきです。

+0

それは興味深い解決策です。私はhttps接続を保証できるかどうかはわかりませんが、もしそれができればうまくいくかもしれません。 – mtmurdock

+0

私はこの答えで中立です。私はそれをアップヴォートしたいが、それは興味深い詳細の多くを残して、[強力なワンタイムキーを生成する方法](https://en.wikipedia.org/wiki/One-time_pad)とパス形式の資格情報を保証するHTTPSネゴシエーションは世界に漏れません。そうでなければ、私は同意する。 :) – MrGomez

+0

@MrGomezディテールの知識が非常に不正確なので詳細を残します。私はコミュニティのwikiとして答えをマークしましたので、うまくいけば誰かがそのビットを埋めることができるでしょうか? – Tommy

0

NSURL、NSString、または単にchar *を使用する方が簡単です。 iPhone上で動作するかどうかはわかりませんが、iPhoneはOSXのようにDarwinと並行して動作するので、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ユーザーとしては、開発者が私が現在使っているアプリから私を連れ去ったときに、私がそれを非常に苛立たせるだけではないと確信している。

+0

あなたの質問を読んで、私はそれを誤解しているかもしれないと思う。役に立たない答えを申し訳ありません。 – anthropomorphic

+1

iPhoneの場合、open [] [] [] [] [UIApplication sharedApplication] openURL:myURL] 'を使用するとシステムコールを呼び出すのではなく、 Safariは、組み込み機能を複製する第三者のAppleのルールに従って提供されるので、基本的にOS Xでは '[[NSWorkspace sharedWorkspace] openURL:myURL]'と同じですが、あなたがSafariを手に入れることができるという点を除けば、元のポスターとして規定されています。 – Tommy

+0

おかげで、ありがとう。私はこのサイトを初めて使っています。私はこの投稿を削除するか、そのまま残すべきかと思います。 – anthropomorphic

関連する問題