2011-08-06 11 views
1

これは本当に奇妙なエラーです。ログインすると、facebookオブジェクトはデバイス上のサファリにクッキーを保存していませんが、シミュレータ上で実行します。どのように私は知っていますか?Facebook iOS SDKがアクセス用のCookieを保存していない

NSHTTPCookie *cookie; 
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [storage cookies]) 
{ 
    NSString* domainName = [cookie domain]; 
    NSLog(domainName); 
    NSRange domainRange = [domainName rangeOfString:@"facebook"]; 
    if(domainRange.length > 0) 
    { 
     [storage deleteCookie:cookie]; 
    } 
} 

私は2つのクッキーの名前を見ることができます。私はデバイス上でゼロになる。これは、FacebookのDemoAppでも起こっています。 私はどこから来ているのか分からないので、投稿をより完全にするためにどんな情報を提供できるか分かりません。私が今行方不明のものを要求してください。コードはDemoAppからのものですが、私は何も変更/追加/削除していません。

ありがとうございました。

答えて

12

あなたはiOSライブラリで奇妙なことに遭遇している可能性があります。

すべてのiOSアプリには別のストレージスペースがあります。つまり、別のアプリがそれに属していないものに触れることができないように保持されています。このサンドボックス処理は、悪意のあるアプリや悪いアプリが自分以外のアプリを傷つけることを防ぎます。

これはiPhoneのSafariに当てはまります。Safariのセッション用に設定されたクッキーはあなたのアプリでは利用できません。あなたのアプリのUIWebViewで設定されたクッキーは、Safariでは利用できません。デスクトップOSXシステムでは、クッキーを共有できるので、これに関するいくつかの混乱があります。クラスメソッドの魅力的な名前であるSharedHTTPCookieStorageにもかかわらず、iOSではそうすることはできません。

Facebook SDK認証コードは、デバイスで認証するために3つの方法を試すことができます... Facebookアプリを呼び出すことができ、それを介して認証を頼むことができます。 FBアプリがインストールされていない場合は、モバイルSafariブラウザにウィンドウが開き、可能であればブラウザのサンドボックスにCookieを設定してログインしようとします。どちらも開くことができない場合は、アプリのスペースにUIWebViewを開き、アプリケーションにローカルのCookieを保存します。

あなたのシミュレータとあなたのiPhoneの異なる場所で認証が行われていると思いますので、クッキーはどこか別の場所にあります。

本当にイライラするのは、素敵なシングルサインオン機能を利用すれば、2回目のログオンをせずにアプリ内でUIWebviewsをFacebookに開くことができないということです。クッキーは利用できません。

+0

これはまだですか?ユーザーに2回ログインするように迷惑をかけるので、これを回避する方法があるかどうか疑問に思っています... – Smikey

+3

ええ - これは変わっていません。 Facebookの認証プロセスは、実際にトークンを取得してAPIを使用できるようにすることです。ブラウザのCookieは副次的な利点です。 FBアプリケーションは、シングルサインオンを介してAPI呼び出しを使用するための認証トークンを提供します。ブラウザのCookieを取得することは、別のタスクとして認識されます。認証トークンは限られた権限でログインしているアプリですが、ブラウザのCookieはユーザーが行っている限り、城へのキーのようなものです。 – giff

関連する問題