5

ログインしているユーザーのデータ (名前、性別、誕生日、プロフィール写真など) を取得しようとしています。以下に示す 2 つのコードを試しました。

 //first: Create request for user's Facebook data
    FBRequest *request = [FBRequest requestForMe];

// Send request to Facebook
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    NSLog(@"%@", error);
    if (!error) {
        // result is a dictionary with the user's Facebook data
        NSDictionary *userData = (NSDictionary *)result;
        NSLog(@"%@....",userData);
       _facebookID = userData[@"id"];
        _name = userData[@"name"];
        _location = userData[@"location"][@"name"];
        _gender = userData[@"gender"];
     _birthday = userData[@"birthday"];
        NSLog(@"%@",_name);


        _picutreURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large&return_ssl_resources=1", _facebookID]];

        self.nameField.text=_name;
        self.profilePicture.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:_picutreURL]];
        self.profileInfo.text=[NSString stringWithFormat:@"%@, Live in %@ , Born on %@",_gender,_location,_birthday];



    }
}];
// 2nd:Fetch user data
[FBRequestConnection
 startForMeWithCompletionHandler:^(FBRequestConnection *connection,
                                   id<FBGraphUser> user,
                                   NSError *error) {
     if (!error) {
         NSString *userInfo = @"";

         // Example: typed access (name)
         // - no special permissions required
         userInfo = [userInfo
                     stringByAppendingString:
                     [NSString stringWithFormat:@"Name: %@\n\n",
                      user.name]];

         // Example: typed access, (birthday)
         // - requires user_birthday permission
         userInfo = [userInfo
                     stringByAppendingString:
                     [NSString stringWithFormat:@"Birthday: %@\n\n",
                      user.birthday]];

         // Example: partially typed access, to location field,
         // name key (location)
         // - requires user_location permission
         userInfo = [userInfo
                     stringByAppendingString:
                     [NSString stringWithFormat:@"Location: %@\n\n",
                      user.location[@"name"]]];

         // Example: access via key (locale)
         // - no special permissions required
         userInfo = [userInfo
                     stringByAppendingString:
                     [NSString stringWithFormat:@"Locale: %@\n\n",
                      user[@"locale"]]];

         // Example: access via key for array (languages)
         // - requires user_likes permission
         if (user[@"languages"]) {
             NSArray *languages = user[@"languages"];
             NSMutableArray *languageNames = [[NSMutableArray alloc] init];
             for (int i = 0; i < [languages count]; i++) {
                 languageNames[i] = languages[i][@"name"];
             }
             userInfo = [userInfo
                         stringByAppendingString:
                         [NSString stringWithFormat:@"Languages: %@\n\n",
                          languageNames]];
         }

         // Display the user info
         NSLog(@"%@",userInfo);
     }
 }];

しかし、出力に null 文字列が表示され、次のエラーが検出されました。

Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be completed. (com.facebook.sdk error 5.)" UserInfo=0x9499320 {com.facebook.sdk:ParsedJSONResponseKey={
    body =     {
        error =         {
            code = 2500;
            message = "An active access token must be used to query information about the current user.";
            type = OAuthException;
        };
    };
    code = 400;
}, com.facebook.sdk:HTTPStatusCode=400}

私は何をすべきか?

4

1 に答える 1

3

私は同じ問題を抱えていたと思います。それを機能させる方法は、追加することでした

FBSession.activeSession = fbSession;

最初のハンドラーが正常に戻ったら。(fbSessionFacebookセッションで使用している変数です。)私はこれをランダムに見つけました(別のStackOverflow投稿からだと思います)。しかし、ドキュメントには表示されません。grep を実行すると、どのサンプル アプリにも含まれていないようです。私のコードには、私が見ていないより大きな問題があるのでしょうか? 他の人がactiveSessionの設定を避け、それでも実行できる方法を知りたいstartForMeWithCompletionHandlerです.

于 2013-11-02T19:18:27.300 に答える