1

我使用 FacebookSDK3 从我的(ios)代码上传和发布图像到用户 Facebook,并呈现一个friendPickerController 视图,选择一组朋友并尝试将标签附加到图片。

这是我用于实际标记的代码,它运行正常,但随后在调试器中出现错误,Error: HTTP status code: 200 ,当我将 stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding 应用于图形时,它是Error: HTTP status code: 400小路。好像是权限类型错误..(这个方法在图片上传成功后调用,self.upLoadedPicID是NSString和帖子的fbID,self.tagList是一个NSMutableArray对象(facebuddies to tag)传回来从friendPickerController..

 -(void)tagFriends{

    if ([self.tagList count] > 0 && imageUploaded && [self.upLoadedPicID length]) {
    self.activityLabel.text = @"Tagging Photo";
    [self setSpindicatorOn:YES];

    NSMutableString *graphPath = [NSMutableString string];
    [graphPath appendString:self.upLoadedPicID];
    [graphPath appendString:[NSString stringWithFormat:@"/tags?tags=["]];


    // loopthru tag array..

    NSMutableString *iDs = [NSMutableString string];

    for (id<FBGraphUser> user in self.tagList) {

               if ([iDs length]) {
                [iDs appendString:@", "];
               }  //deliniate after first entry..

      NSString *entry = [NSString stringWithFormat:@"{\"tag_uid\":\"%@\"}", user.id];
      [iDs appendString:entry];
      }


    [graphPath appendString:iDs];[graphPath appendString:[NSString stringWithFormat:@"]&access_token=%@",[FBSession activeSession].accessToken]];
 //  NSLog(@"building graph path for tAgging %@", graphPath);
   //works fine
    FBRequestConnection *connection = [[FBRequestConnection alloc]init];
    FBRequest *request = [FBRequest requestForGraphPath:graphPath];


  // do i need URL encoding???

 //   NSString* escapedUrlString = [graphPath stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
  //  FBRequest *request = [FBRequest requestForGraphPath:escapedUrlString];

   // dont think so..

   [connection addRequest:request completionHandler:^(FBRequestConnection *connection, id result, NSError *error){

//     if (error) {
//       NSLog(@"error tagging");
       [self setSpindicatorOn:NO];
//     }else{
//       NSLog(@"done tagging");
//       [self setSpindicatorOn:NO];}
//   
     [self showAlert:@"done Tagging" result:result error:error];


   } batchEntryName:nil];
    [connection start];
   // [request ]
  }

}

fbSession 在 appDelegate 中分配并在它们出现之前传递到 fbViewcontrollers,所以也许我的问题是我在这里使用的权限?我在此处找不到有关要使用的备用权限字符串的任何文档..

self.fbLoginView = [[FBLoginView alloc]initWithPermissions:[NSArray arrayWithObject:@"publish_actions"]];

另一种可能性是我没有使用正确的权限设置我的 facebook 终端应用程序,我可以进去编辑它,但它只是一个文本条目,不是下拉菜单或任何类似的直观内容,以及我能找到的每个列表GraphApi 权限没有提到将朋友标记到照片,它不清楚 GraphApi 中的“发布流”权限是否足够,尽管有文档表明它在已弃用的 REST API 中还不够,你需要一个 publish_stream_extended 权限,但我不能查看 GraphAPI 中的任何相应权限。

如果你们中的任何人能告诉我哪里出了问题,我将永远感激不尽时间很难看出什么发生了变化,什么没有发生变化。

如果有人知道,我想关键问题是

  1. 为了有权将朋友标记到照片,在 Facebook 服务器端应用程序中进行哪些权限设置?
  2. 初始化到您的 facebook 会话对象的相应权限是什么?
  3. Facebook 是否不再希望您这样做,这就是文档如此少的原因吗?
  4. 我在这里完全吠错了树吗?

非常感谢您抽出宝贵时间阅读本文:)

4

1 回答 1

1
  1. 请求 user_photos 权限,以便您可以在照片中标记朋友
  2. 使用最新的 Facebook SDK v3.1,您需要拆分您的读/写权限以利用 iOS6。当您要发布照片时,首先请求 user_photos 权限并在上下文中请求 publish_actions 权限。
  3. 可以在此处找到解释权限的文档:https ://developers.facebook.com/docs/reference/api/photo/

提示:每当您遇到困难时,请转到Graph API Explorer并使用不同的权限、输入等来编写内容,然后再继续编写代码,或者在遇到困难时直接使用它。

于 2012-09-29T01:19:45.750 回答