【问题标题】:How to suppress Facebook default creation action (post) on creating Open Graph object如何在创建 Open Graph 对象时抑制 Facebook 默认创建操作(帖子)
【发布时间】:2013-07-20 10:02:57
【问题描述】:

我正在为 iOS 创建一个照片应用程序。我有一个自定义动作类型对,在我的应用程序中定义了“拍照”。我首先创建“照片”对象(我有一个用户生成的图像,我首先上传照片并获取暂存 URI。此代码在此之后):

NSMutableDictionary *imageData = [NSMutableDictionary dictionaryWithDictionary:
                                          @{
                                          @"url" : stagingURL,
                                          @"user_generated" : @"true",

                                          }];
NSMutableDictionary<FBOpenGraphObject> *object =
        [FBGraphObject openGraphObjectForPostWithType:@"tonerapp:photo"
                                                title:@"photo"
                                                image:imageData
                                                  url:@"http://tonerapp.info"
                                          description:title];
//post the object to facebook
[FBRequestConnection startForPostOpenGraphObject:object completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
            if(result != nil){
                NSString* resultID = [result objectForKey:@"id"];
                NSMutableDictionary<FBGraphObject> *actionDict = [FBGraphObject graphObject];
                actionDict[@"photo"] = resultID;
                [self postTakeActionToFacebookWithOpenGraphObject:actionDict completion:action];

            }else{
                action(NO);
            }
        }];

发布对象后,我在完成处理程序中发布“采取”操作,如上所示。下面是使用“photo”对象发布“take”操作的代码:

-(void)postTakeActionToFacebookWithOpenGraphObject:(NSMutableDictionary<FBGraphObject>*)ogObject completion:(booleanAction)action{
  if(self.selectedPlace != nil){
      ogObject[@"place"] = [self.selectedPlace id];
  }
  if(self.taggedFriends != nil && self.taggedFriends.count > 0){
      ogObject[@"tags"] = self.taggedFriends;
  }
  [FBRequestConnection startForPostWithGraphPath:@"me/tonerapp:take"
                                   graphObject:ogObject
                             completionHandler:^(FBRequestConnection *connection,
                                                 id result,
                                                 NSError *error) {
                                 if(result != nil){
                                     NSLog(@"oldu");
                                     action(YES);
                                 }else{
                                     action(NO);
                                 }

                             }];
}

结果如下:

首先创建“发布”操作,然后将“拍摄”操作应用于照片。我需要摆脱“发布”动作。更奇怪的是,我的 Open Graph 仪表板看起来像这样:

我删除了“对象”类型和“发布”操作,但每隔一段时间,它们就会再次添加到我的操作中。我怀疑我做错的事情会导致“默认帖子创建操作”问题和默认对被添加到我的仪表板。我转到我的应用程序设置并更改我的照片类型的订阅(创建)操作:

然后我尝试再次发布我的照片。即使我的创建操作是“采取”,也会创建一个“发布”操作:

但这次我无法创建任何“执行”操作。此响应失败:

body =     {
    error =         {
        code = 1611231;
        message = "A post action for this object already exists.";
        type = Exception;
    };
};
code = 500;

这不应该正好相反吗?如果我将我的默认创建操作设置为我的自定义操作,我不应该把它搞砸吗?我还尝试过“即时”创建照片对象(没有先“发布”它并直接在“拍摄”操作中发送对象 JSON 数据,这似乎是这样做的自然方式),但它也失败了,就像在这个例子中一样:Example Facebook object code.。是我遗漏了什么,还是 Open Graph API 存在严重问题?

谢谢,

可以。

更新:我已启用 2013 年 7 月的迁移。

【问题讨论】:

  • 我很震惊这个问题没有更多的投票......认真

标签: ios facebook facebook-graph-api facebook-opengraph


【解决方案1】:

如果您通过对象 API(这是您与 startForPostOpenGraphObject 一起使用的,也通过共享对话框)创建(用户拥有的)开放图形对象,那么将创建一个“发布”操作。解决它的唯一方法是托管您自己的开放图形对象。

这样想,你真正在做的实际上是两个独立的操作。

  1. 您创建了一个开放的图形对象(即您“发布”了一个对象)
  2. 您创建了一个作用于对象的开放图形操作(即您的“采取”操作)

它们中的每一个都会在活动日志中产生一个单独的活动。这种分离很重要,因为您可以在不同的操作中重复使用相同的对象,并且它必须显示在用户的活动日志中,因为它是用户拥有的对象。

另见https://developers.facebook.com/docs/opengraph/using-object-api/

【讨论】:

  • 我知道它们是两个不同的动作(创造和采取)。我可以在活动日志中看到两次,但我不希望我的应用程序创建“故事污染”,所以我不希望人们在新闻自动收报机/新闻提要中看到双重故事。而且我仍然不明白为什么订阅操作无法正常工作。
  • 在您的情况下,实际上现在有 3 种不同类型的操作 - 发布、订阅和采取。旧的“创建”动作现在是“订阅”动作,与“发布”动作不同。任何用户生成的对象都会有一个与之关联的“发布”操作。您还可以设置“订阅”操作,以便用户收到有关“喜欢”的通知。 “发布”操作不会显示在新闻提要中。另请参阅 - developers.facebook.com/docs/opengraph/creating-object-types/…
  • 实际上订阅操作需要是“采取”操作(链接中的示例正好给出了“拍照”的示例)但是当我将订阅操作设置为“拍摄”时得到“此对象的发布操作已存在。”即使我已将“唯一操作”设置为“多个”,也会出现错误。如果我删除“采取”行动作为订阅行动,我可以发布它。您确定帖子操作不会显示在新闻提要中吗?
  • 嗯,您所看到的关于订阅操作的内容绝对是一个错误,请在此处提交一个 - developers.facebook.com/bugs
  • 届时我将向 Facebook 提交错误报告。我认为这与对象是使用图形 api 创建的开放图形对象有关(而不是从 URL 中的元标记获取的对象),因为对象首先“发布”,系统将其计为动作,而我明确的“采取”动作被视为重复。
【解决方案2】:

@can Poyrazoglu

如果您不为每个帖子创建故事,您应该使用这种方法。如果同一个帖子有多张图片,它会将图片分组并仅制作整个相册,而不是创建单独的帖子。

NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
[params setObject:@"your custom message" forKey:@"message"];
[params setObject:UIImagePNGRepresentation(_image) forKey:@"picture"];
_shareToFbBtn.enabled = NO; //for not allowing multiple hits

[FBRequestConnection startWithGraphPath:@"me/photos"
                             parameters:params
                             HTTPMethod:@"POST"
                      completionHandler:^(FBRequestConnection *connection,
                                          id result,
                                          NSError *error) 
 {
 if (error) 
 {
     //showing an alert for failure
     [self alertWithTitle:@"Facebook" message:@"Unable to share the photo please try later."];
 } 
 else
 {
     //showing an alert for success
     [UIUtils alertWithTitle:@"Facebook" message:@"Shared the photo successfully"];
 }
 _shareToFbBtn.enabled = YES;
 }];

【讨论】:

  • 你读过我的问题吗?这与打开的图形对象有什么关系?
猜你喜欢
  • 2012-02-11
  • 2015-01-20
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2020-06-06
  • 2012-03-22
  • 2014-08-05
相关资源
最近更新 更多