2012-06-30 15 views
8

iOS 6'nın yeni Facebook entegrasyon API'sini kullanan bir kullanıcı hakkındaki bilgileri sorgulamaya çalışıyorum.Facebook kullanıcı verilerini yeni iOS6 sosyal çerçevesi aracılığıyla sorgulama

{ 
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(), ^{ 

    }); 
}]; 
} 

Sorun Facebook'tan hata kodu 2500 alıyorum edilir: Bu, WWDC demoed ne temelde aynıdır kullanıyorum kodu ise, "Aktif bir erişim belirteci ile ilgili bilgileri sorgulamak için kullanılmalıdır mevcut kullanıcı. " Sorguyu https://graph.facebook.com/[facebook kimlik] olarak değiştirirseniz, o zaman iyi çalışır. Sorunun, isteğin requestForServiceType yoluyla gönderilmesi sırasında iOS'un kullanıcının erişim belirtecinin yerine uygulamanın erişim belirtecini geçtiği varsayılmaktadır. Sadece nasıl tamir edeceğimi bilmiyorum. Kullanıcılarımın Facebook kimliklerini açıkça tahmin etmek ve kodlamak bir seçenek değil. Baska öneri?

+0

Yanıtı aldınız mı? IOS 6 yayınlandığında. –

cevap

5

Ben kimlik yenileyerek sonra hesabımı kaydederek düzelttim, ben aynı hata mesajı vardı

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

Erişim anahtarı bu kodu nasıl alır? Yoksa oraya gerçek bir erişim kodu koymayı mı öneriyorsunuz? Erişim kodlarının süresinin dolması gibi görünüyor, bu yüzden iyi bir seçenek olmaz. – zeeple

0

gibi Paramete içinde aktif erişim belirteci ekleyin.

2

aynı sorunu ile karşı karşıya ve geçici çözüm bulundu:

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

Sorun, FB'de yanlış uygulama ayarlarındaydı. Bu gönderiye göre ayarları değiştirdim http://stackoverflow.com/questions/12644229/ios-6-facebook-posting-procedure-ends-up-with-remote-app-id-does-not-match-stor/12687305 # 12687305 ve sorunu çözdü. – gareg

0

emin (ACAccount *) facebookAccount olun (veya vaka self.account olarak) nesne güçlü ve doğru şekilde ayarlayın izin alırken. Burada

1

Tamam ben iOS 6 ile bu bütünleşmeyi yapmak ve Facebook'tan İstediğimi elde nasıl: AppDelegate yılında

yapmam bu: Ben bilgilerini almak istiyorum

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

ve benim ViewController içinde

(: Bu bir denemedir, bu nedenle izinlerin bir sürü NOT!): kendim veya arkadaşları hakkında bunu

Sonra
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]; 


             } 
            }]; 

yılında "presentPostOptions" Ben (bunu ben denemek bu örnekte arkadaşım bir şey) almak için:

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

sorunuzu sadece bir bağlantı kurmaya çalıştım çünkü yapmak istediğiniz başka ne bilmiyorum ama iken yapabileceğiniz bu şekilde ne kadar istediğiniz iOS'ta tümleşik 6.

Bir şey daha, Facebook'taki Uygulama Ayarlarınızdan ve iOS için uygulamanızı ve iPhone/iPad için kimliğinizi etkinleştirmek üzere orada bulunan yapılandırmalardan emin olun. Ayrıca plistinizde FacebookAppID.

sizin için dışarı çalışır bana bildirin

,

DÜZENLEME: Btw benim Facebook SDK 3.1.1 olduğunu.

0

Cevap basit

viewDidLoad

() kullanın:

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

Ve fonksiyonu-(boşluk) facebookProfile

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

Bildirim ihtiyacınız parametreler sözlüğe olarak eklenir Tüm liste için aşağıya bakın 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 { 

    } 
}]; 


} 
İlgili konular