2011-01-04 8 views
5

新しいFacebookライブラリでは、FBSessionオブジェクトは消えています。 safariやuiwebviewのプロンプトを表示せずにユーザーがアプリを起動したときに、すぐにユーザーがデバイスで有効なセッションを行っているかどうかを確認できますか?IOSでのFacebook Connectセッションの確認

[facebook isSessionValid]メソッドはacccessTokenで動作しますが、Safari(またはインラインuiwebview)からアプリが戻ったときにaccessTokenが設定されます。

クッキーを使用してセッションをチェックすることはできますか?

答えて

12

ログインが成功した後、あなたはこのように、アクセストークンと有効期限を保存したいですこれは:

_facebook = [[Facebook alloc] initWithAppId:@"[app_id]"]; 
_facebook.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"]; 
_facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"]; 
if (![_facebook isSessionValid]) { 
    [_facebook authorize:_permissions delegate:self]; 
} 
else { 
    [_facebook requestWithGraphPath:@"me" andDelegate:self]; 
} 

希望します。

+0

はい、これは私が採用する方法だと思います、ありがとうございます – MatterGoal

+0

素晴らしい作品です。ただし、_facebookの初期化行にはメモリリークがあります(保持する必要はありません)。 –

+0

良い点、アミール。それは編集されました!ありがとうございました – donkim

0

私は、ユーザーがログインしているかどうか、SafariやFacebookのiPhoneアプリを使っているかどうかを自動的に確認するはずです。ユーザーがログインしていない場合は、上記のいずれかのアプリケーションを使用してプロンプトが表示されます(FBアプリがインストールされていない場合、デフォルトはsafariです。その後

[[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"AccessToken"]; 
[[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"ExpirationDate"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

、アプリをロードすると、保存したトークンがあるかどうかを確認したい、のような:

+0

ありがとうDanny Boy、はい、Safariでチェックされていますが、私がログに記録されているかどうかを確認するためにsafari/uiwebViewなどから渡す必要はありません。例:Safari/uiwebviewを使用して初めてログインしたとき、アプリを閉じる。自分のユーザーが自分の名前とFacebookの画像で自動的に認識されるようにする。 – MatterGoal

+0

Facebookオブジェクト自体がユーザーであるかどうかをチェックするアクションを実行しようとすると[self isSessionValid]を使用してログインします。ユーザーがログインしていない場合は、ログインするための適切な操作が行われます。 –

+0

isSessionValidコードを見ると、accessTokenプロパティと有効期限がチェックされていると考えられます。しかし、このプロパティは、ログインアクション(またはsafari/uiwebview/FBappプロンプトアクション)の後にのみ設定されます。だから私は少なくともFBのダイアログを表示せずにこの情報にアクセスする方法を見つけることができません。 – MatterGoal

関連する問題