Ios Facebook开放图:内置对象fitness.course

Ios Facebook开放图:内置对象fitness.course,ios,objective-c,facebook,facebook-graph-api,facebook-ios-sdk,Ios,Objective C,Facebook,Facebook Graph Api,Facebook Ios Sdk,我正在尝试(失败很多!)使用Facebook iOS sdk。我想发布一个关于用户在不离开应用程序的情况下运行的故事。我正在尝试使用Facebook内置的对象“课程”和内置的动作进行跑步 我发现文档非常混乱,我的代码变得非常混乱,我确信这是实现这个解决方案最糟糕的方式 以下代码中出现的错误是: 2014-04-01 23:10:13.238 Fitness_App[2313:60b] Encountered an error posting to Open Graph: Error Domain

我正在尝试(失败很多!)使用Facebook iOS sdk。我想发布一个关于用户在不离开应用程序的情况下运行的故事。我正在尝试使用Facebook内置的对象“课程”和内置的动作进行跑步

我发现文档非常混乱,我的代码变得非常混乱,我确信这是实现这个解决方案最糟糕的方式

以下代码中出现的错误是:

2014-04-01 23:10:13.238 Fitness_App[2313:60b] Encountered an error posting to Open Graph: Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be completed. (com.facebook.sdk error 5.)" UserInfo=0x16ba5190 {com.facebook.sdk:HTTPStatusCode=500, com.facebook.sdk:ParsedJSONResponseKey={
body =     {
    error =         {
        code = 1611072;
        message = "The action you're trying to publish is invalid because it does not specify any reference objects. At least one of the following properties must be specified: course.";
        type = Exception;
    };
};
code = 500;
},com.facebook.sdk:ErrorSessionKey=}

我一直在努力解决这个问题,却找不到解决办法

-(void) publishStory
    {
        // instantiate a Facebook Open Graph object
        NSMutableDictionary<FBOpenGraphObject> *object = [FBGraphObject openGraphObjectForPost];

        // specify that this Open Graph object will be posted to Facebook
        object.provisionedForPost = YES;

        // for og:title
        object[@"title"] = @"running title";

        // for og:type, this corresponds to the Namespace you've set for your app and the object type name
        object[@"type"] = @"fitness.course";

        // for og:description
        object[@"description"] = @"running description";



        // Post custom object
        [FBRequestConnection startForPostOpenGraphObject:object completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
            if(!error) {
                // get the object ID for the Open Graph object that is now stored in the Object API
                NSString *objectId = [result objectForKey:@"id"];
                NSLog([NSString stringWithFormat:@"object id: %@", objectId]);

                // Further code to post the OG story goes here
                // create an Open Graph action
                id<FBOpenGraphAction> action = (id<FBOpenGraphAction>)[FBGraphObject graphObject];
                [action setObject:objectId forKey:@"fitness.course"];

               [FBRequestConnection startForPostWithGraphPath:@"/me/fitness.runs" graphObject:action completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                    if(!error) {
                        NSLog([NSString stringWithFormat:@"OG story posted, story id: %@", [result objectForKey:@"id"]]);
                    } else {
                        // An error occurred, we need to handle the error

                        NSLog(@"Encountered an error posting to Open Graph: %@", error.description);
                    }
                }];




            } else {
                // An error occurred
                NSLog(@"Error posting the Open Graph object to the Object API: %@", error);
            }
        }];
    }
-(作废)publishStory
{
//实例化Facebook开放图形对象
NSMutableDictionary*对象=[FBGraphObjectOpenGraphObjectForPost];
//指定此打开的图形对象将发布到Facebook
object.provisionedForPost=是;
//对于og:标题
对象[@“标题”]=@“运行标题”;
//对于og:type,它对应于您为应用程序设置的名称空间和对象类型名称
对象[@“type”]=@“fitness.course”;
//对于og:描述
对象[@“说明”]=@“运行说明”;
//后自定义对象
[FBRequestConnection startForPostOpenGraphObject:对象完成处理程序:^(FBRequestConnection*连接,id结果,NSError*错误){
如果(!错误){
//获取打开的图形对象的对象ID,该对象现在存储在对象API中
NSString*objectId=[result objectForKey:@“id”];
NSLog([NSString stringWithFormat:@“对象id:%@”,objectId]);
//下面是发布OG故事的进一步代码
//创建一个开放的图形操作
id action=(id)[FBGraphObject graphObject];
[action setObject:objectId forKey:@“fitness.course”];
[FBRequestConnection startForPostWithGraphPath:@“/me/fitness.runs”graphObject:action completionHandler:^(FBRequestConnection*连接,id结果,N错误*错误){
如果(!错误){
NSLog([NSString stringWithFormat:@“OG发布的故事,故事id:%@,[result objectForKey:@“id”]]);
}否则{
//发生错误,我们需要处理该错误
NSLog(@“发布到打开图形时遇到错误:%@”,错误。说明);
}
}];
}否则{
//发生了一个错误
NSLog(@“将打开的图形对象发布到对象API时出错:%@”,错误);
}
}];
}

两个地方出了问题

  • object[@“type”]=@“fitness.course”
    类型
    应等于
    @“名称空间:对象”
  • [action setObject:objectId forKey:@“fitness.course”]
    关键是您的对象名

  • 再次检查您的代码并享受乐趣^-^

    尝试替换您的这句话 [action setObject:objectId forKey:@“fitness.course”]

    用这个


    “[action setObject:objectId forKey:@“course”];”

    我认为这对facebook自己的内置对象之一不正确?我没有在我的命名空间中创建任何自定义对象。