Posting photos to Facebook fan page with iOS SDK

10,973

Solution 1

Ater successfully login to Facebook, you can get list FanPage by requesting @"/me/accounts" and iterate to the fan page you want and request its accessToken by making request to @"/FBFanPageID?fields=access_token"

This accessToken is different from your facebook.accesstoken .

After getting fanPage accessToken, set it as facebook accessToken by

[_facebook setAccessToken:_accessTokenForFanPage]; // this is necc step

Now you can upload to fanPage wall by @"/FBFanPageID/photos"

Request fanPage albums by @"/FBFanPageID/albums"

Upload to particular album by @"/AlbumsID/photos"

For uploading these image param dictionary will be used.

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: IMAGE,@"source", IMAGECAPTION,@"message",
nil];

Solution 2

Old news but...not sure about the fan page part but you need to add "?access_token=..." after "/me/photos" or whatever you end up using for the graph API to get past the unknown error. The facebook sdk doesn't automatically add the access token so you have to do it yourself.

[facebook requestWithGraphPath:[NSString stringWithFormat:@"/me/photos?access_token=%@", facebook.accessToken] andParams:params andHttpMethod:@"POST" andDelegate:self];

Solution 3

I have very similar codes and it works, the only thing that is slightly different is I create the Facebook instance in the AppDelegate ..

QRSMAppDelegate *delegate = (QRSMAppDelegate *)[[UIApplication sharedApplication] delegate];

if (![[delegate facebook] isSessionValid]) {
    [[delegate facebook] authorize:permissions];

Like you I initially created the Facebook instance in the view controller and I came out with a lot of weird errors. The issue (I later found out) is ... Facebook responds by passing a URL to the Facebook class instance and from outside the only entry point to your app is the app delegate. (Check the Facebook sdk sample app Hackbook)!

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

BOOL ret = [facebook handleOpenURL:url];

.... return(ret); }

The issue here of course is what if I only use Facebook in a small part of my app and miles away from the app delegate (Facebook instantiation require you to declare the delegate!

Rather than face equally complex issues in passing the url up, it was actually easier to just alloc init the view controller (Facebook delegate) in the app delegate and pass it up the view hierarchy.

Share:
10,973
leo83
Author by

leo83

Updated on July 26, 2022

Comments

  • leo83
    leo83 almost 2 years

    I'm trying to upload a photo to a Facebook page I own using the iOS SDK and graph API. I've been able to upload photos to my own wall. I've also been able to post a message to my fan page wall as an admin and create an album on my fan page, so I think I'm making the right calls, but not succeeding.

    This is what I'm currently doing.

    I'm logging in using

    Facebook *fb = [[Facebook alloc] init];
    self.facebook = fb;
    [fb release];
    NSArray *permissions =  [[NSArray arrayWithObjects:@"read_stream", @"offline_access", @"publish_stream", @"manage_pages", @"user_photos", @"friends_photos",nil] retain];
    [facebook authorize:FB_APP_ID permissions:permissions delegate:self];
    [permissions release];
    

    After I log in, I request the accounts

    [facebook requestWithGraphPath:@"/me/accounts" andDelegate:self];
    

    The accounts are returned to me with access tokens for each page and app I own. I use a simple loop to parse through the accounts to extra the access_token supplied for the page I wish to upload a photo to.

    I then set my access token of my facebook object to the new access_token.

    facebook.accessToken = new_accessToken;
    

    and try and upload a photo my fan page using

    UIImage *uploadImage = [UIImage imageNamed:@"t200.jpg"];
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                   uploadImage, @"source", 
                 @"test caption", @"message",             
                 nil];
    
    
    [facebook requestWithGraphPath:@"/me/photos" andParams:params
            andHttpMethod:@"POST" andDelegate:self];
    

    The response I receive is

    {"error":{"type":"OAuthException","message":"(#1) An unknown error occurred"}}
    

    Is this a bug in the facebook graph API? I also tried making this call using standard HTTPS requests, and get the same result.

  • leo83
    leo83 over 13 years
    I've tried it with the page id but still that doesn't work either. Using me seems correct because when you change the access token, what you accessing. So me accesses your fan page.
  • mahboudz
    mahboudz about 12 years
    If you look in Facebook.m as provided in the SDK, you'll see that the access_token is added to the params by the SDK. However, one needs to get a different access_token for the fan page.