2012-08-07 67 views
25

在「老」 FB iOS的SDK,我可以通過下面的接收用戶信息:Facebook SDK 3.0:如何接收用戶的電子郵件?

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嗎?我是否需要使用FBRequestFBOpenGraphActionFBGraphObject或這些或完全不同的組合?

回答

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」];爲一個簡短和更可讀的線。 – 2013-01-22 11:39:00

+0

有沒有像FBLoginView一樣的方法,用一個WS就可以獲得用戶信息?像這樣(順便說一下,這就是我實現它的原因),如果你想在登錄Facebook之後登錄到你自己的系統,你有3個連續的WS。 – 2015-02-26 17:48:00

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 2012-08-07 10:50:13

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

謝謝我忘了在權限中添加@「email」 – Jasmeet 2014-09-18 07:07:27

5

一旦你有機會獲得(id<FBGraphUser>)user,你可以簡單地使用,user[@"email"]

+0

super duper gokill! – tesmojones 2014-05-21 07:59:30

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); 
     } 
    }]; 
} 

}

你會得到所有的信息的結果。

相關問題