14

I am trying to post a photo to my apps facebook fan page and to the users wall also. I have been successful to post the photo on the users wall, but failed to post it in the fan pages wall. (The user is not necessarily an admin or page owner, just the regular users. As the fan page has the option of anyone can post to it, it is not mandatory for the user to even like the page first. Right?)

After googling a while, I found this answer. According to it, I need an access_token of the fan page and an album_id to do so. But I can't find any clue about how to get them. So far I have tried this code:

if ([appDelegate.facebook isSessionValid]) 
    {
        NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       resultImage, @"picture",
                                       nil];

        [appDelegate.facebook requestWithGraphPath:@"me/photos"
                                         andParams:params
                                     andHttpMethod:@"POST"
                                       andDelegate:self]; // to post on users wall, works fine

         NSString *path = [NSString stringWithFormat:@"my/accounts /fan_page_id?fields=access_toke/photos"];
        [appDelegate.facebook setAccessToken: FACEBOOK_ACCESS_TOKEN];

        [appDelegate.facebook requestWithGraphPath:path andParams:params andHttpMethod:@"POST" andDelegate:self]; // to post on fan page wall,  this doesn't work
    }

Can anyone help me with this? What am I missing here? Thanks in advance.

UPDATE

According to this answer, a regular user can not post a photo to the fan pages wall from an iOS app but can share the photo on it. Now, my question is, how do I accomplish posting the photo on the users wall and share it on the fan page wall at the same time? Is it possible? How do I share the photo on the fan page wall?

UPDATE 2

This answer and the question says that the regular users can post to a fan page wall via news feed, so i modified my code like this:

if ([appDelegate.facebook isSessionValid]) {
        NSMutableDictionary *page_params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"fan_page_id", @"to",
                                       @"Test", @"name",
                                       @"Test", @"caption",
                                       resultImage, @"picture",
                                       nil];
        [appDelegate.facebook   dialog:@"feed"
                                andParams:page_params
                                andDelegate:self];

}

But, I keep getting this ridiculous error message and the app crashes:

-[UIImage length]: unrecognized selector sent to instance 0x24d110
2012-06-06 19:59:03.114 app_name[2739:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage length]: unrecognized selector sent to instance 0x24d110'

What should I do now?

At this point after waiting so long, the question comes in my mind is, is this even possible? If so, how do I accomplish this task? And if not, then what are the alternatives? Please help.

Update 3

Just found that there is a known bug in both iOS sdk and the javascript sdk for posting dialogs in fan page wall. Is this true for image upload too? If anyone has a solution to avoid this bug, please help.

Community
  • 1
  • 1
Shabib
  • 1,697
  • 4
  • 20
  • 39

4 Answers4

7

This isn't currently (June 2012) possible because of a bug in the API: https://developers.facebook.com/bugs/206254392780441 has the details.

One workaround is to post to the /feed connection of the page and attach an image to the feed story. That image won't be displayed as large as a proper photo upload, but should work OK.

That bug means that posting to the /PAGE_ID/photos connection of a Page using a User access_token will incorrectly upload the photo to the user's /photos connection instead.

Posting to a page's /photos connection will work as expected when using the Page's access_token; the photo will appear on the page's photos page, on the page's timeline, and attributed to the Page itself (i.e 'from' the page)

If your app is specifically for adding content to a page, and has a server-side component, another workaround to get the photos from a user onto the page is to have the users supply a photo to you via your own interface (i.e upload it from the user's device to your server), and use one of the page admins' access_tokens to get a Page access_token and make the upload that way.

Igy
  • 43,710
  • 8
  • 89
  • 115
  • thank you for your response. as i said before, the image is taken from the users phone camera and then the user shares it on his/her wall and at the same time to the fan page wall. for this case, can you provide me a better way?may be some example/tutorial in case you have done this kind of tweak? – Shabib Jun 11 '12 at 17:24
  • You could post to their own wall from the app and simultaneously upload the photo to your own server, then have your server use the page access token to upload it to the page – Igy Jun 13 '12 at 10:42
0

Instead of using dialog, you can ask user to grant permission - publish_stream
(since there is a bug in dialog component, otherwise its not required)

Then you can post on a page wall (assuming page allows in page settings).

You can try using graph api explorer. You can change the page id and test by granting above permission in extended permission tab.

Note
One more thing you should remember is, you cannot send image data in picture parameter. You should provide link to the Image.

Venu
  • 7,243
  • 4
  • 39
  • 54
  • Thank you for your response, I have granted the user to publish stream and the page allows to post anonymous users (who even hasn't liked the page) on it's wall. On your note, the image I am trying to post is taken from the camera, so i don't know how i can provide the link of the image as picture parameter. If you have successfully accomplished the task what I am trying to do, can you provide me a tutorial or something? I would be very grateful. – Shabib Jun 08 '12 at 09:12
  • If you have a server, you can upload image to that sevrer and get the URL, and then use that url to post on page wall. – Venu Jun 08 '12 at 09:14
  • I don't have one, and this doesn't sound a good solution. This is a phone app, the user takes a picture, the app does some modification to it and then it is shared in facebook (in users wall and in fan page wall). If i have to manage a server for this, this doesn't make sense. Anyways thank you for your response. – Shabib Jun 08 '12 at 09:21
  • */feed will not accept image data. Its has to be an URL. You can take Amazon s3 service, which is very very low cost service. And you can easily implement it. If that is not suitable for you, then you don't have way to post image on wall. – Venu Jun 08 '12 at 09:25
0

I would simply try to address the exception error. It is possible to post to your fan page news feed. It is NOT possible to post as the fan page itself, as that would require authentication (thus the access token requirement.. you have to be logged in as that user to post as them). @Igy already address this above.

However, you do not have code for where you are using the image picker to get the image. The exception you are getting is because you are trying to check the length on a UIImage object instead of the NSData object (which is what Facebook requires). To convert your image from the picker to data use the snippet below (replace the img variable with your UIImage).

NSData *imgData = UIImageJPEGRepresentation(img, 0);

// Now call to length by facebook SDK will work and the exception will not fail
NSLog(@"Size of Image(bytes):%d",[imgData length]);
Matt Hudson
  • 7,329
  • 5
  • 49
  • 66
0

I think you are using wrong argument for posting the photo

You should should use @"url" instead of @"picture"

I am not sure with this, but it might work .

I to had the same problem in javaScript , which was solved .

Please view here for referring to my problem

Community
  • 1
  • 1
sumitkanoje
  • 1,217
  • 14
  • 22
  • That works in general, but doesn't override the 'posting to page's photos connection as a user actually uploads to the user's photo conncetion' bug – Igy Jun 17 '12 at 08:10