8

iOS 6 の新しい Facebook 統合 API を使用して、ユーザーに関する情報を照会しようとしています。これは私が使用しているコードで、WWDC でデモを行ったものと基本的に同じです。

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

    });
}];
}

問題は、Facebook からエラー コード 2500 が表示されることです。「現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります。」クエリを https://graph.facebook.com/[facebook id] に変更すると、正常に動作します。requestForServiceType を介してリクエストを送信するときに、iOS がユーザーのアクセス トークンではなくアプリのアクセス トークンを渡していることが問題であると想定しています。私はそれを修正する方法がわかりません。明らかに、ユーザーの Facebook ID を予測してハードコーディングすることはできません。助言がありますか?

4

6 に答える 6

5

次のようなパラメータでアクティブアクセストークンを追加します

NSDictionary *parameters = [NSDictionary dictionaryWithObject:@"PUT_ACCESS_TOKEN_HERE" forKey:@"access_token"];
于 2012-07-10T07:24:13.950 に答える
2

私は同じ問題に直面し、回避策を見つけました:

NSString *uid = [NSString stringWithFormat:@"%@", [[self.account valueForKey:@"properties"] valueForKey:@"uid"]] ;                
NSURL *url = [NSURL URLWithString:[@"https://graph.facebook.com" stringByAppendingPathComponent:uid]];
于 2012-09-20T13:10:00.477 に答える
1

OK ここでは、iOS 6 とのこの統合を行い、Facebook から必要なものを取得する方法を示します。

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 に統合されている間、好きなことを行うことができます。

もう 1 つ、Facebook でアプリの設定を確認し、iOS 用のアプリや iPhone/iPad 用の ID を有効にするなどの構成を確認してください。plist の FacebookAppID も。

それがうまくいくかどうか教えてください。

編集:私の Facebook SDK は 3.1.1 です。

于 2013-01-04T05:56:41.597 に答える
0

(ACAccount *)facebookAccount (またはあなたの場合は self.account) オブジェクトが強力で、権限を取得するときに正しく設定していることを確認してください。

于 2012-10-17T09:54:05.267 に答える
0

同じエラー メッセージが表示されたので、資格情報を更新した後にアカウントを保存して修正しました。

于 2012-09-14T11:47:48.510 に答える