2012-06-30 13 views
8

के माध्यम से फेसबुक उपयोगकर्ता डेटा पूछताछ मैं आईओएस 6 के नए फेसबुक एकीकरण API का उपयोग कर किसी उपयोगकर्ता के बारे में जानकारी पूछने की कोशिश कर रहा हूं।नए आईओएस 6 सोशल फ्रेमवर्क

{ 
NSDictionary *parameters = @{}; 
NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/me"]; 
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook 
             requestMethod:SLRequestMethodGET 
                URL:url 
              parameters:parameters]; 
request.account = self.account; 
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
    NSLog(@"Facebook request received, status code %d", urlResponse.statusCode); 
    NSString *response = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    NSLog(@"Response data: %@", response); 
    dispatch_async(dispatch_get_main_queue(), ^{ 

    }); 
}]; 
} 

समस्या मैं फेसबुक से त्रुटि कोड 2500 हो रही है:: इस कोड मैं उपयोग कर रहा हूँ, जो मूल रूप से वे क्या WWDC में डेमो के समान है कि "एक सक्रिय पहुँच टोकन के बारे में जानकारी क्वेरी करने के लिए इस्तेमाल किया जाना चाहिए वर्तमान उपयोगकर्ता। " अगर मैं क्वेरी को https://graph.facebook.com/[facebook आईडी में बदलता हूं] तो यह ठीक काम करता है। मुझे लगता है कि समस्या यह है कि अनुरोध के माध्यम से अनुरोध भेजते समय आईओएस उपयोगकर्ता के एक्सेस टोकन की बजाय ऐप के एक्सेस टोकन को पास कर रहा है। मुझे नहीं पता कि इसे कैसे ठीक किया जाए। स्पष्ट रूप से मेरे उपयोगकर्ताओं की फेसबुक आईडी की उम्मीद और हार्डकोडिंग एक विकल्प नहीं है। कोई सुझाव?

+0

क्या आपको जवाब मिल गया ?? जैसा कि आईओएस 6 जारी किया गया है। –

उत्तर

5

तरह

NSDictionary *parameters = [NSDictionary dictionaryWithObject:@"PUT_ACCESS_TOKEN_HERE" forKey:@"access_token"]; 
+0

कोड में उस एक्सेस कुंजी को आप कैसे प्राप्त करते हैं? या आप वहां एक वास्तविक पहुंच कोड डालने का प्रस्ताव कर रहे हैं? ऐसा लगता है कि एक्सेस कोड की समयसीमा समाप्त हो जाती है ताकि यह एक अच्छा विकल्प न हो। – zeeple

0

paramete में अपनी सक्रिय पहुँच टोकन जोड़ने मैं एक ही त्रुटि संदेश था, मैं क्रेडेंशियल के नवीनीकरण के बाद मेरे खाते को सहेज कर उसे ठीक किया।

2

मैं एक ही मुद्दे के साथ सामना किया और वैकल्पिक हल मिल गया:

NSString *uid = [NSString stringWithFormat:@"%@", [[self.account valueForKey:@"properties"] valueForKey:@"uid"]] ;     
NSURL *url = [NSURL URLWithString:[@"https://graph.facebook.com" stringByAppendingPathComponent:uid]]; 
+0

यह समस्या एफबी पर गलत ऐप सेटिंग्स में थी। मैंने इस पोस्ट के अनुसार सेटिंग्स बदल दी हैं http://stackoverflow.com/questions/12644229/ios-6-facebook-posting-procedure-ends-up-with-remote-app-id-does-not-match-stor/12687305 # 12687305 और इस मुद्दे को हल किया। – gareg

0

सुनिश्चित करें कि आपकी (ACAccount *) facebookAccount (या अपने मामले self.account में) वस्तु मजबूत है और आप इसे सही तरीके से सेट अनुमति मिलने के दौरान।

1

ठीक यहाँ है कि कैसे मैं iOS 6 इस एकीकरण करते हैं और फेसबुक से मैं क्या चाहते है:

AppDelegate में मैं ऐसा करते हैं:

- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation { 
    return [FBSession.activeSession handleOpenURL:url]; 
} 
- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    [FBSession.activeSession handleDidBecomeActive]; 
} 

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    [FBSession.activeSession close]; 
} 

और मेरे ViewController में जहाँ मैं जानकारी प्राप्त करना चाहते हैं अपने आप को या अपने दोस्तों के बारे में मैं इस (नोट: यह एक परीक्षण है, तो यह अनुमतियों का एक बहुत है!): कर

NSArray *permissions = 
    [NSArray arrayWithObjects:@"email", @"user_location", 
    @"user_birthday", 
    @"user_likes", @"user_interests",@"friends_interests",@"friends_birthday",@"friends_location",@"friends_hometown",@"friends_photos",@"friends_status", 
    @"friends_about_me", @"friends_birthday", @"friends_hometown", @"friends_interests", @"friends_likes", @"friends_location", nil]; 

    [FBSession openActiveSessionWithReadPermissions:permissions 
             allowLoginUI:YES 
            completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
             /* handle success + failure in block */ 
             if (status) { 
              NSLog(@"Facebook Read Permission is successful!"); 
              [self presentPostOptions]; 

              // [self presentPostOptions]; 


             } 
            }]; 

फिर में "presentPostOptions" मैं यह कर (इस उदाहरण मैं कोशिश में मेरे दोस्त से कुछ) को पुनः प्राप्त करने:

- (void)presentPostOptions 
{ 

    [[FBRequest requestForMyFriends] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) 

    { 

     if (!error) { 

NSArray *data = [user objectForKey:@"data"]; 
      NSLog(@"%d", [data count]); 
      for (FBGraphObject<FBGraphUser> *friend in data) { 
       NSLog(@"%@", [friend first_name]); 
       NSLog(@"%@", [friend last_name]); 
       NSLog(@"%@", [friend id]); 
       //make sure you have FBProfilePictureView outlet in your view 
       //otherwise skip the profile picture! 
       self.fbProfilePic.profileID = @"you'r friend's profile.id"; 

      } 
     } 
     else 
     { 
      NSLog(@"error"); 
      // [self didFailWithError:error]; 
     } 
    }]; 

मैं नहीं जानता और क्या आप क्या करना चाहते क्योंकि आपके प्रश्न में आप सिर्फ एक कनेक्शन बनाने की कोशिश की लेकिन इस तरह से आप कर सकते हैं कि तुम क्या कभी आप चाहते हैं, जबकि आप कर रहे हैं आईओएस 6 में एकीकृत 6.

एक और बात, फेसबुक पर अपनी ऐप सेटिंग्स और आईफोन के लिए अपना ऐप सक्षम करने और आईफोन/आईपैड के लिए आईडी सक्षम करने जैसी कॉन्फ़िगरेशन सुनिश्चित करें। आपके प्लेस्ट में फेसबुक ऐपआईडी भी।

मुझे पता है अगर यह आप के लिए बाहर काम करता है,

संपादित करें: btw मेरे फेसबुक एसडीके 3.1.1 है।

0

जवाब सरल है

viewDidLoad में

() का उपयोग करें:

accountStore= [[ACAccountStore alloc]init]; 
facebookAccountType= [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 

NSDictionary *options= @{ 
ACFacebookAudienceKey: ACFacebookAudienceEveryone, 
ACFacebookAppIdKey: @"<YOUR FACEBOOK APP ID>", 
ACFacebookPermissionsKey: @[@"public_profile"] 

          };  

[accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error) { 

    if (granted) { 
     NSLog(@"Permission has been granted to the app"); 
     NSArray *accounts= [accountStore accountsWithAccountType:facebookAccountType]; 
     facebookAccount= [accounts firstObject]; 
     [self performSelectorOnMainThread:@selector(facebookProfile) withObject:nil waitUntilDone:NO]; 

    } else { 
     NSLog(@"Permission denied to the app"); 
    } 
}]; 

और समारोह (शून्य) facebookProfile

NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/me"]; 

सूचना पैरामीटर आप की जरूरत शब्दकोश के रूप में जुड़ जाते हैं पूरी सूची https://developers.facebook.com/docs/graph-api/reference/user

के लिए नीचे देखें
NSDictionary *param=[NSDictionary dictionaryWithObjectsAndKeys:@"picture,id,name",@"fields", nil]; 

SLRequest *profileInfoRequest= [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodGET URL:url parameters:param]; 
profileInfoRequest.account= facebookAccount; 


[profileInfoRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
    NSLog(@"Facebook status code is : %ld", (long)[urlResponse statusCode]); 

    if ([urlResponse statusCode]==200) { 

     NSDictionary *dictionaryData= [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error]; 



    } else { 

    } 
}]; 


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