2012-08-07 11 views
25

aşağıdaki aracılığıyla kullanıcı bilgilerini alabilir:Facebook SDK 3.0: Kullanıcının e-postası nasıl alınır? "Eski" 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]; 

Nasıl yeni FB iOS SDK 3.0 ile yapabilirsiniz? FBRequest veya FBOpenGraphAction veya FBGraphObject ya da bunlardan veya tamamen farklı bir kombinasyondan birini kullanmam gerekir mi?

cevap

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 Çünkü biz adıyla (nokta-sözdizimi) Ancak NSDictionary olduğu gibi bilgilere erişemiyor hala e-posta kv-çifti var ve biz normal bir NSDictionary ile yaptığımız gibi erişebilirsiniz.

olsa eposta izin istemek unutmayın:

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"]; Kısa ve okunabilir bir çizgi için. –

+0

FBLoginView gibi bir WS ile kullanıcı bilgilerini alabileceğiniz bir yol var mı? Eğer 3 inşaası WS var içinde facebook günlüğüne sonra kendi sistemine giriş yapmak istiyorsanız bu gibi (bu arada, bu onu hayata nasıl). –

1

3.0 SDK'nın kaynak kodunu okudunuz mu? Bence bir yöntemdir özdeş vardır: bir e-posta @property yok

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

Tam olarak aynı: https://developers.facebook.com/docs/sdk-reference/iossdk/3.0/class/FBRequest/. Bir çözüm buldum ve yeni yayınladım. – znq

1

bundan biz facebook kullanıcının temel bilgi ve e-posta kimliğini alabilirsiniz. Eğer (id<FBGraphUser>)user erişim sağladıktan sonra

[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

teşekkürler ben izinleri "e-posta" @ – Jasmeet

5

, sadece user[@"email"], kullanabilirsiniz.

+0

süper kandırılan gokill eklemek unuttum! – tesmojones

0

giriş yaptıktan sonra bilgi almak için en kolay yöntemdir:

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

}

Sen sonuç tüm bilgileri alacak.