2012-08-07 16 views
25

"पुराने" अमेरिकन प्लान iOS 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]; 

मैं नए अमेरिकन प्लान 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 के साथ इस तरह की जानकारी तक नहीं पहुँच सकता अभी भी ईमेल केवी-जोड़ी है और हम इसे एक्सेस कर सकते हैं जैसे कि हम एक सामान्य 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

सत्र ओपनविथप्रमिशन: @ [@ "ईमेल"]; एक छोटी और अधिक पठनीय लाइन के लिए। –

+0

FBLoginView जैसा कोई तरीका है कि एक डब्ल्यूएस के साथ आप उपयोगकर्ता की जानकारी प्राप्त कर सकते हैं? इस तरह (वैसे, इस तरह मैंने इसे कार्यान्वित किया), अगर आप फेसबुक लॉग के बाद अपने सिस्टम में लॉग इन करना चाहते हैं तो आपके पास लगातार 3 डब्ल्यूएस हैं। –

1

क्या आपने 3.0 एसडीके के स्रोत कोड को पढ़ा था? वहाँ एक तरीका है कि मुझे लगता है कि समान है है:

- (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

हम फेसबुक उपयोगकर्ता की बुनियादी जानकारी और ईमेल आईडी प्राप्त कर सकते हैं:

ईमेल अनुमति यद्यपि लिए पूछने के लिए मत भूलना।

[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

सुपर डुपर गोकिल! – 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); 
     } 
    }]; 
} 

}

आप परिणाम में सभी जानकारी मिल जाएगा।

संबंधित मुद्दे