After looking I did come accross this post on the facebook forums:
link
They are feeding the facebook object a UIImage. That seems logical, but where is thi
Joe Hewitt (the author of the Facebook iPhone app) released large parts of the Facebook application as his Three20 framework. It is hosted on github.
For completeness:
The following explains how to interact with Facebook Connect: https://developers.facebook.com/docs/guides/web/
The API calls: https://developers.facebook.com/docs/reference/api/
If you need extended Permissions: https://developers.facebook.com/docs/guides/policy/examples_and_explanations/Extended_Permissions/
A nice Obj-C wrapper on Mobile Orchard: http://www.mobileorchard.com/marketing-in-code-part-2-setting-a-users-status-in-facebook-from-an-iphone-app-a-tutorial/
What follows is my implementation of a SessionViewController:
#import "SessionViewController.h"
#import "FBConnect.h"
#import "FBFeedDialog.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
// This application will not work until you enter your Facebook application's API key here:
static NSString* kApiKey = @"XXXXXXXXXXXXXXXXXX";
// Enter either your API secret or a callback URL (as described in documentation):
static NSString* kApiSecret = @"XXXXXXXXXXXXXXXXXX"; // @"<YOUR SECRET KEY>";
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation SessionViewController
@synthesize label = _label;
@synthesize anImage;
- (void)done:(id)sender{
[self dismissModalViewControllerAnimated:YES];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// NSObject
- (id)init {
if (self = [super init]) {
_session = [[FBSession sessionForApplication:kApiKey secret:kApiSecret delegate:self] retain];
}
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:@"SessionViewController" bundle:nibBundleOrNil]) {
_session = [[FBSession sessionForApplication:kApiKey secret:kApiSecret delegate:self] retain];
}
return self;
}
- (void)dealloc {
[_session release];
[anImage release];
[super dealloc];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// UIViewController
- (void)viewDidLoad {
[_session resume];
_loginButton.style = FBLoginButtonStyleWide;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return NO;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// FBDialogDelegate
- (void)dialog:(FBDialog*)dialog didFailWithError:(NSError*)error {
_label.text = [NSString stringWithFormat:@"Error(%d) %@", error.code,
error.localizedDescription];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// FBSessionDelegate
- (void)session:(FBSession*)session didLogin:(FBUID)uid {
_permissionButton.hidden = NO;
_feedButton.hidden = NO;
NSString* fql = [NSString stringWithFormat:
@"select uid,name from user where uid == %lld", session.uid];
NSDictionary* params = [NSDictionary dictionaryWithObject:fql forKey:@"query"];
[[FBRequest requestWithDelegate:self] call:@"facebook.fql.query" params:params];
}
- (void)sessionDidLogout:(FBSession*)session {
_label.text = @"";
_permissionButton.hidden = YES;
_feedButton.hidden = YES;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// FBRequestDelegate
- (void)request:(FBRequest*)request didLoad:(id)result {
if([result isKindOfClass:[NSArray class]]){
NSArray* users = result;
NSDictionary* user = [users objectAtIndex:0];
NSString* name = [user objectForKey:@"name"];
_label.text = [NSString stringWithFormat:@"Logged in as %@", name];
}
}
- (void)request:(FBRequest*)request didFailWithError:(NSError*)error {
_label.text = [NSString stringWithFormat:@"Error(%d) %@", error.code,
error.localizedDescription];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (IBAction)askPermissionForPhotoUpload:(id)target {
FBPermissionDialog* dialog = [[[FBPermissionDialog alloc] init] autorelease];
dialog.delegate = self;
dialog.permission = @"photo_upload";
[dialog show];
}
- (IBAction)publishPhoto:(id)target{
NSMutableDictionary *args = [[[NSMutableDictionary alloc] init] autorelease];
[args setObject:self.anImage forKey:@"image"];
FBRequest *uploadPhotoRequest = [FBRequest requestWithDelegate:self];
[uploadPhotoRequest call:@"photos.upload" params:args];
}
- (void)askPermission:(id)target {
FBPermissionDialog* dialog = [[[FBPermissionDialog alloc] init] autorelease];
dialog.delegate = self;
dialog.permission = @"status_update";
[dialog show];
}
- (void)publishFeed:(id)target {
FBFeedDialog* dialog = [[[FBFeedDialog alloc] init] autorelease];
dialog.delegate = self;
dialog.templateBundleId = 9999999;
dialog.templateData = @"{\"key1\": \"value1\"}";
[dialog show];
}
@end
Graph Api documentation of Photo upload are follows..
https://developers.facebook.com/blog/post/498/
https://developers.facebook.com/docs/reference/api/photo/
And you can see how to do this in iPhone here.
http://www.raywenderlich.com/1626/how-to-post-to-a-users-wall-upload-photos-and-add-a-like-button-from-your-iphone-app