如何在创建Open Graph对象时禁止Facebook默认创建操作(post)

Can*_*ğlu 4 facebook opengraph facebook-graph-api ios facebook-opengraph

我正在为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);
            }
        }];
Run Code Online (Sandbox Code Playgroud)

发布对象后,我在完成处理程序中发布"take"操作,如上所示.以下是使用"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);
                                 }

                             }];
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

发布了两个动作

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

自动添加默认操作

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

创作动作设定

然后我再次尝试发布我的照片.即使我的创建操作是"take",也会创建一个"post"操作:

发布行动

但这次我无法创造任何"采取"行动.它响应失败:

body =     {
    error =         {
        code = 1611231;
        message = "A post action for this object already exists.";
        type = Exception;
    };
};
code = 500;
Run Code Online (Sandbox Code Playgroud)

这不应该恰恰相反吗?如果我没有将默认创建操作设置为自定义操作,我不应该搞砸了吗?我还尝试"在运行中"创建照片对象(不先"发布"它并直接在"take"动作中发送对象JSON数据,这似乎是这样做的自然方式),但它也像在这个例子中一样失败:示例Facebook对象代码..我错过了什么,或者Open Graph API是否存在严重问题?

谢谢,

能够.

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

Min*_* Li 6

如果您通过Object API创建一个(用户拥有的)打开图形对象(这是您使用startForPostOpenGraphObject,也通过共享对话框),那么将会创建一个"Post"操作.唯一的方法是托管您自己的开放图形对象.

可以这样想,你真正在做的事实上是两个独立的操作.

  1. 您创建一个打开的图形对象(即您"发布"一个对象)
  2. 您创建一个开放图形操作(即您的"采取"操作),该操作作用于对象

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

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

  • 此外,帖子操作不会显示在新闻Feed中. (2认同)