6

iOS facebook SDK 3.0 を使用しています。ユーザーがすでにログインしているかどうかを確認するにはどうすればよいですか?

以下の行を試しましたが、正しく動作しません。ログインしているのに NO が返されることがあります。何か提案はありますか?

if (FBSession.activeSession.isOpen == YES)
{
  // post to wall else login
}

- 編集 -

これは、Facebook セッションを開く方法です。

NSArray *permissions = [[NSArray alloc] initWithObjects:
                        @"user_likes", 
                        @"read_stream",
                        @"publish_actions",
                        nil];
return [FBSession openActiveSessionWithPermissions:permissions
                                      allowLoginUI:allowLoginUI
                                 completionHandler:^(FBSession *session,
                                                     FBSessionState state,
                                                     NSError *error) {
                                     [self sessionStateChanged:session
                                                         state:state
                                                         error:error];
                                 }];

初めてログインが必要なため、機能します。すでにログインしているときにこれを試すと、FBSession.activeSession.isOpen は NO を返します。

4

6 に答える 6

13

ログインUIを許可せずに新しいセッションを開こうとすると、有効なトークンがあるかどうかを確認できます

if (FBSession.activeSession.isOpen)
{
    // post to wall
} else {
    // try to open session with existing valid token
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"user_likes", 
                            @"read_stream",
                            @"publish_actions",
                            nil];
    FBSession *session = [[FBSession alloc] initWithPermissions:permissions];
    [FBSession setActiveSession:session];
    if([FBSession openActiveSessionWithAllowLoginUI:NO]) {
        // post to wall
    } else {
        // you need to log the user
    }
}
于 2012-09-13T22:52:28.750 に答える
10

4.x 以降の FBSDK を使用している場合、FBSession の概念はありません。[FBSDKAccessToken currentAccessToken]値があるかどうかを確認するだけでアクティブなセッションを見つける必要がありnil、それ以外のアクティブなセッションはありません。

代わりに、[FBSDKAccessToken currentAccessToken]at viewDidLoadまたは同様のものをチェックする必要があります。が利用可能な場合current tokenは、ログイン後の作業を行います。currentAccessTokenを使用して、キャッシュされたトークンを取得することもできます。

ここで詳細を見つけることができますhttps://developers.facebook.com/docs/ios/upgrading-4.x

FBSession.activeSession[FBSDKAccessToken currentAccessToken]とに置き換えられましたFBSDKLoginManager。という概念はありません session state。代わりに、マネージャーを使用してログインすると、 currentAccessToken参照が設定されます。

于 2015-08-26T12:29:07.400 に答える
9

私はFacebookの例のようにそれをやった

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded)
{

}
于 2012-10-28T07:26:54.610 に答える
2

FBSessionStateOpen状態が inまたは inの場合、セッションはアクティブですFBSessionStateOpenTokenExtended。以下の関数を使用して、ユーザーがログインしているかどうかを確認できます。

- (BOOL)isSessionOpen
{
    return FBSession.activeSession.state == FBSessionStateOpen || FBSession.activeSession.state == FBSessionStateOpenTokenExtended;
}
于 2014-04-28T07:38:49.320 に答える
1

FBSession をどのように開いていますか?

インスタンスを作成する場合は、必ず FBSession.activeSession を設定してください。それはしばらくの間私の問題でした。

于 2012-09-13T18:07:06.833 に答える
0
    if ([FBSDKAccessToken currentAccessToken]) 
{
   NSLog(@"Already login");
    //[FBSession openActiveSessionWithAllowLoginUI: YES];
}
于 2016-03-16T11:34:34.907 に答える