Awesome
Supports
KRFacebook supports FacebookSDK 3.6 and under versions that you can easier share Youtube video and your video file, upload a photo, upload several photos, upload your video, request GraphAPI, and easy writing the message on the news feed wall.
And you can easy fetch the user's info ( Facebook responses raw data, user id, user name, user email, user gender, access token. )
How To Get Started
It need to go to *-info.plist set the facebook app developer key up with following the Facebook rules.
<img src="https://dl.dropbox.com/u/83663874/GitHubs/KRFacebook-1.png" alt=" *-info.plist" title=" *-info.plist" style="margin: 20px;" class="center" />
#import "KRFacebook.h"
@interface ViewController ()
@property (nonatomic, strong) KRFacebook *facebook;
@end
@implementation ViewController
@synthesize facebook = _facebook;
- (void)viewDidLoad
{
[super viewDidLoad];
_facebook = [KRFacebook sharedManager];
_facebook.permissions = [NSArray arrayWithObjects:
@"read_stream",
@"publish_stream",
@"email",
@"user_photos",
@"user_events",
@"user_checkins",
nil];
[_facebook awakeFBSession];
}
#pragma IBActions
-(IBAction)uploadPhotoToAlbum:(id)sender
{
/*
* @ Reference
* - About albums
* - https://developers.facebook.com/docs/graph-api/reference/v2.0/album
*
* - About upload photo to album
* - https://developers.facebook.com/docs/graph-api/reference/v2.0/album/photos
*
* - Permission is user_photos
*
* @ Notice
* - You have to wait for the console appears logs when you pressed the " Upload url photo to album " button to start in uploading.
*/
//To get your all of albums and please don't forget the permission of ' user_photos '.
NSString *_getAlbumsGraphPath = @"me?fields=albums";
[_facebook requestGraphApiPath:_getAlbumsGraphPath completionHandler:^(BOOL finished, id result) {
if( finished )
{
NSLog(@"#1 GraphAPI result : %@", result);
//To upload a photo from URL link in your particular album.
if( [result isKindOfClass:[NSDictionary class]] )
{
NSDictionary *_albums = [(NSDictionary *)result objectForKey:@"albums"];
if( [[_albums objectForKey:@"data"] count] > 0 )
{
//To enumerate all albums.
NSArray *_allAlbums = [_albums objectForKey:@"data"];
for( NSDictionary *_eachAlbums in _allAlbums )
{
NSLog(@"#2 Each album info : %@", _eachAlbums);
}
//In this case that I wanna pick my No. 3 album to upload my photo.
NSString *_albumId = [[_allAlbums objectAtIndex:2] objectForKey:@"id"];
NSString *_uploadToAlbumGraphPath = [NSString stringWithFormat:@"%@/photos", _albumId];
NSDictionary *_parameters = @{@"url" : @"Your photo url link.",
//If you wanna upload local image file that you can use imageNamed or imageWithContentsOfFile to fetch it to convert NSData use for uploading.
//@"source" : UIImagePNGRepresentation([UIImage imageNamed:@"sample.png"]),
//As below is photo comments.
@"message" : @"The photo comments."
};
[_facebook requestGraphApiPath:_uploadToAlbumGraphPath parameters:_parameters httpMethod:KRFacebookHttpMethodPost completionHandler:^(BOOL finished, id result) {
if( finished )
{
NSLog(@"#3 Uploaded results : %@", result);
}
}];
}
}
}
}];
}
-(IBAction)callGraphAPI:(id)sender
{
NSString *_graphApiPath = @"me?fields=home.with(facebook).limit(10)";
[_facebook requestGraphApiPath:_graphApiPath completionHandler:^(BOOL finished, id result) {
if( finished )
{
NSLog(@"GraphAPI result : %@", result);
}
}];
}
-(IBAction)publishAFeed:(id)sender
{
if( [_facebook isFBSessionOpen] )
{
//To publish a feed.
[_facebook publishNewsFeedWallWithTitle:@"Test Topic"
titleURL:@"http://www.google.com"
message:@"Test Content Message"
errorHandler:^(NSError *error) {
//...
} completionHandler:^(BOOL finished, id result) {
NSLog(@"result 1: %@", result);
}];
}
else
{
[_facebook loginWithCompletion:^(BOOL success, NSDictionary *userInfo) {
if( success )
{
[_facebook publishNewsFeedWallWithTitle:@"Test Topic"
titleURL:@"http://www.google.com"
message:@"Test Content Message"
errorHandler:^(NSError *error) {
//...
} completionHandler:^(BOOL finished, id result) {
NSLog(@"result 2: %@", result);
}];
}
}];
}
}
-(IBAction)publishImage:(id)sender
{
[self.facebook publishNewsFeedWithPhotoURL:@"https://dl.dropboxusercontent.com/u/83663874/GitHubs/TryGong-1.png"
clickPhotoTurnURL:@"http://www.google.com"
title:@"Tells everyone."
subtitle:@"But keep it be a secret."
description:@"I love Open Source."
titleURL:@"http://www.yahoo.com"
bottomTitle:@"Kalvar.Info"
bottomTitleURL:@"http://kalvar.info"
bottomMessage:@"Happy Coder."
errorHandler:^(NSError *error) {
//...
}
completionHandler:^(BOOL finished, id result) {
if( finished )
{
NSLog(@"result : %@", result);
}
}];
}
-(IBAction)uploadImage:(id)sender
{
//Method 1
[_facebook uploadImage:[UIImage imageNamed:@"Default.png"]
description:@"Upload image method 1."
errorHandler:^(NSError *error) {
//...
} completionHandler:^(BOOL finished, id result) {
//...
}];
//Method 2
[_facebook uploadPhotoHttpURL:[NSURL URLWithString:@"https://dl.dropboxusercontent.com/u/83663874/GitHubs/TryGong-1.png"]
description:@"Upload image method 2."
errorHandler:^(NSError *error) {
//...
} completionHandler:^(BOOL finished, id result) {
//...
}];
//Method 3
[_facebook uploadPhotoLocalPath:@"/var/mobile/krfacebook/sample.png"
description:@"Upload image method 3."
errorHandler:^(NSError *error) {
//...
} completionHandler:^(BOOL finished, id result) {
//...
}];
}
-(IBAction)shareVideo:(id)sender
{
//Method 1, Share Youtube Video.
[_facebook publishNewsFeedWithYoutubeVideoId:@"Q9uTyjJQ0VU"
viewoThumbnailURL:@"https://dl.dropboxusercontent.com/u/83663874/GitHubs/TryGong-1.png"
thumbnailSize:CGSizeMake(160.0f, 120.0f)
playSize:CGSizeMake(480.0f, 320.0f)
title:@"史詩"
subtitle:@"Taiwan Rapper."
description:@"Keep Rapping."
titleURL:@"http://www.youtube.com/watch?v=Q9uTyjJQ0VU"
bottomTitle:@"Hello, Hip-Hop."
bottomTitleURL:@"http://www.youtube.com/watch?v=Q9uTyjJQ0VU"
bottomMessage:@"I love Hip-Hop."
errorHandler:^(NSError *error) {
//...
} completionHandler:^(BOOL finished, id result) {
if( finished )
{
NSLog(@"uploadVideo : %@", result);
}
}];
//Method 2, Share Your Video.
[_facebook publishNewsFeedWithVideoURL:@"http://www.youtube.com/v/Q9uTyjJQ0VU"
viewoThumbnailURL:@"https://dl.dropboxusercontent.com/u/83663874/GitHubs/TryGong-1.png"
thumbnailSize:CGSizeMake(160.0f, 120.0f)
playSize:CGSizeMake(480.0f, 320.0f)
title:@"史詩"
subtitle:@"Taiwan Rapper."
description:@"Keep Rapping."
titleURL:@"http://www.youtube.com/watch?v=Q9uTyjJQ0VU"
bottomTitle:@"Hello, Hip-Hop."
bottomTitleURL:@"http://www.youtube.com/watch?v=Q9uTyjJQ0VU"
bottomMessage:@"I love Hip-Hop."
errorHandler:^(NSError *error) {
//...
} completionHandler:^(BOOL finished, id result) {
if( finished )
{
NSLog(@"uploadVideo : %@", result);
}
}];
}
-(IBAction)uploadVideo:(id)sender
{
[_facebook uploadVideoLocalPath:@"/var/mobile/krfacebook/sample.mp4"
title:@"Nice Video."
description:@"Wow, Video."
errorHandler:^(NSError *error) {
//...
} completionHandler:^(BOOL finished, id result) {
//...
}];
}
-(IBAction)login:(id)sender
{
[_facebook loginWithCompletion:^(BOOL success, NSDictionary *userInfo) {
if( success )
{
NSLog(@"login userInfo : %@", userInfo);
}
}];
}
-(IBAction)logout:(id)sender
{
[_facebook logout];
}
-(IBAction)awakeSession:(id)sender
{
[_facebook awakeFBSession];
}
-(IBAction)getPrivateUserInfo:(id)sender
{
//Me Info, Email, Profile Picture, Profile Name
NSDictionary *_userInfo = _facebook.userInfo;
NSString *_userId = _facebook.userId;
NSString *_userEmail = _facebook.userEmail;
NSString *_userName = _facebook.userName;
NSString *_userGender = _facebook.userGender;
NSLog(@"_userInfo : %@", _userInfo);
}
Version
KRFacebook now is V2.2.
License
KRFacebook is available under the MIT license ( or Whatever you wanna do ). See the LICENSE file for more info.
Others
KRFacebook used FBSBJSON and FacebookSDK 3.6+.