2012-08-07 2 views
25

私は、次を介してユーザ情報を受け取ることができる:Facebook SDK 3.0:ユーザーの電子メールを受け取る方法は? 「古い」FBのiOS SDKで

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            @"SELECT uid, name, email, pic FROM user WHERE uid=me()", @"query", 
            nil]; 

    JBFacebookManager *fbManager = [JBFacebookManager getInstance]; 
    fbManager.requestDelegate = self; 

    [fbManager.facebook requestWithMethodName:@"fql.query" 
            andParams:params 
           andHttpMethod:@"POST" 
            andDelegate:self]; 

私は新しいFBのiOS SDK 3.0でこれを行うことができますどのように? FBRequestまたはFBOpenGraphActionまたはFBGraphObjectを使用する必要がありますか、まったく異なるものを組み合わせる必要がありますか?

答えて

68
if (FBSession.activeSession.isOpen) { 
    [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) { 
     if (!error) { 
      self.nameLabel.text = user.name; 
      self.emailLabel.text = [user objectForKey:@"email"]; 
     } 
    }]; 
} 

FBGraphUserはメール@propertyを持っていないので、我々は名前(ドットシンタックス)と同じような情報にアクセスすることはできません、しかし、NSDictionaryのは、まだ電子メールのkvペアがあり、通常のNSDictionaryと同様にアクセスできます。

はかかわらず、電子メールの許可を求めることを忘れないでください:

NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil]; 
[FBSession sessionOpenWithPermissions:permissions completionHandler: 
^(FBSession *session, FBSessionState state, NSError *error) { 
    [self facebookSessionStateChanged:session state:state error:error]; 
}]; 
+4

sessionOpenWithPermissions:@ [@ "email"];短く読みやすい行のために。 –

+0

にはFBLoginViewのような方法があります.WSであなたはユーザー情報を取得できますか?このように(ちなみに、これは私がそれを実装した方法です)、facebookのログイン後に自分のシステムにログインしたい場合は、3つの連続WSがあります。 –

1

3.0 SDKのソースコードを読んだことはありますか?私は同じだと思う方法があります:

- (FBRequest*)requestWithMethodName:(NSString *)methodName 
          andParams:(NSMutableDictionary *)params 
         andHttpMethod:(NSString *)httpMethod 
         andDelegate:(id <FBRequestDelegate>)delegate; 
+0

全く同じではありません:https://developers.facebook.com/docs/sdk-reference/iossdk/3.0/class/FBRequest/私は解決策を考え出し、ちょうどそれを投稿しました。 – znq

1

このことから、我々はFacebookのユーザーの基本的な情報や電子メールIDを取得することができます。

[FBSession openActiveSessionWithReadPermissions:@[@"basic_info",@"email"] allowLoginUI:YES completionHandler:^(FBSession *session,FBSessionState status,NSError *error){ 
     if(error) 
     { 
      NSLog(@"Facebook Error : %@",error.localizedDescription); 
     } 
     else{ 

     } 
     // Respond to session state changes, 
     // ex: updating the view 

    }]; 
+0

ありがとう私は許可の@ "電子メール"を追加することを忘れていた – Jasmeet

5

あなたは(id<FBGraphUser>)userへのアクセス権を持っていたら、あなたは単に、user[@"email"]を使用することができます。

+0

超二人のgokill! – tesmojones

0

ログイン後の情報を取得するための最も簡単な方法は次のとおりです。

-(IBAction)loginWithFacebook:(id)sender{ 
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
[login 
logInWithReadPermissions: @[@"public_profile",@"email"] 
fromViewController:self 
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    if (error) { 
     NSLog(@"Process error"); 
    } else if (result.isCancelled) { 
     NSLog(@"Cancelled"); 
    } else { 
     NSLog(@"Logged in"); 
     [self getFacebookProfileInfos]; 

    } 
    }]; 
} 

-(void)getFacebookProfileInfos { 
NSDictionary *parameters = @ {@"fields": @"id, name, first_name, last_name, picture.type(large), email"}; 
if ([FBSDKAccessToken currentAccessToken]) { 
    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters] 
    startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
     if (!error) { 
      NSLog(@"fetched user:%@", result); 
     } 
    }]; 
} 

}

あなたはその結果、すべての情報を取得します。

関連する問題