0

I am trying (failing alot!) to use the Facebook iOS sdk. I want to publish a story about the user running without leaving the app. I am trying to use the Facebook built in object "course" and the built in action for a run.

I find the documentation very confusing, my code has become very tangled and I'm sure its the worst way possible of trying to implement this solution.

The error I'm getting with the following code is:

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=}

I have been struggling with this and could not get a solution!

-(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);
            }
        }];
    }
Sarah92
  • 671
  • 4
  • 12
  • 29

2 Answers2

0

Two places where things went wrong.

  1. object[@"type"] = @"fitness.course";
    The type should equal @"namespace:object".
  2. [action setObject:objectId forKey:@"fitness.course"];
    The key is your object name.

Check your code again and have fun ^-^

Sam Spencer
  • 8,492
  • 12
  • 76
  • 133
RylanJIN
  • 11
  • 2
  • I don't think that is correct for one of facebook's own built in objects? I have not created any custom objects in my namespace. – Sarah92 Apr 30 '14 at 12:29
0

Try replacing your this sentence "[action setObject:objectId forKey:@"fitness.course"];"

with this one

"[action setObject:objectId forKey:@"course"];"

ViruMax
  • 1,216
  • 3
  • 16
  • 41