2012-06-30 3 views
8

iOS 6의 새로운 Facebook 통합 API를 사용하여 사용자에 대한 정보를 쿼리하려고합니다.새로운 iOS6 소셜 프레임 워크를 통해 Facebook 사용자 데이터 쿼리

{ 
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 id]로 변경하면 제대로 작동합니다. 문제는 requestForServiceType을 통해 요청을 보낼 때 iOS가 사용자의 액세스 토큰 대신 앱의 액세스 토큰을 전달하고 있다고 가정합니다. 나는 그것을 고치는 법을 모른다. 분명히 내 사용자의 Facebook ID를 예상하고 하드 코딩하는 것은 선택 사항이 아닙니다. 어떤 제안?

+0

iOS 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

FB의 앱 설정이 잘못되었습니다. 이 게시물에 따라 설정을 변경했습니다. 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

OK 내가 아이폰 OS 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]; 
     } 
    }]; 

귀하의 질문에 그냥 연결을 만들려고하기 때문에 당신이 원하는 다른 어떤 모르겠어요하지만 당신이있는 동안 당신이 할 수있는이 방법은 당신이 원하는 무엇을 적 iOS 6에 통합되었습니다.

한 가지 더, iOS 용 앱과 iPhone/iPad 용 ID를 사용하도록 설정 한 후 Facebook 및 Configs를 통해 앱 설정을 확인하십시오. 또한 귀하의 plist에있는 FacebookAppID.

당신을 위해 밖으로 작동하는지 알려주세요

,

편집 : BTW 내 페이스 북 SDK 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"]; 

공지 사항을 당신이 필요로하는 PARAMS 사전 로 추가 전체 목록은 아래를 참조하십시오. 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 { 

    } 
}]; 


}