使用SLRequest(无对话框)在iOS 6上传video到Facebook的示例

我正在寻找一个例子,使用iOS 6和SLRequest将video发布到Facebook。 我已经有我的代码上传照片。

提前致谢!

分享video到FB:

  • 在developer.facebook.com上创build一个应用程序
  • 在appName-info.plist中提到AppId
  • 在iOS平台下的应用程序页面的develper.facebook.com中提及应用程序BundleID

然后在编码上:

我们必须要求读取权限,然后写入权限。

-(void)shareOnFB { __block ACAccount * facebookAccount; ACAccountStore *accountStore = [[ACAccountStore alloc] init]; NSDictionary *emailReadPermisson = [[NSDictionary alloc] initWithObjectsAndKeys: FB_APP_ID,ACFacebookAppIdKey, @[@"email"],ACFacebookPermissionsKey, ACFacebookAudienceFriends,ACFacebookAudienceKey, nil]; NSDictionary *publishWritePermisson = [[NSDictionary alloc] initWithObjectsAndKeys: FB_APP_ID,ACFacebookAppIdKey, @[@"publish_stream"],ACFacebookPermissionsKey, ACFacebookAudienceFriends,ACFacebookAudienceKey, nil]; ACAccountType *facebookAccountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; //Request for Read permission [accountStore requestAccessToAccountsWithType:facebookAccountType options:emailReadPermisson completion:^(BOOL granted, NSError *error) { if (granted) { //Request for write permission [accountStore requestAccessToAccountsWithType:facebookAccountType options:publishWritePermisson completion:^(BOOL granted, NSError *error) { if (granted) { NSArray *accounts = [accountStore accountsWithAccountType:facebookAccountType]; facebookAccount = [accounts lastObject]; NSLog(@"access to facebook account ok %@", facebookAccount.username); [self uploadWithFBAccount:facebookAccount]; } else { NSLog(@"access to facebook is not granted"); // extra handling here if necesary dispatch_async(dispatch_get_main_queue(), ^{ // Fail gracefully... NSLog(@"%@",error.description); [self errorMethodFromFB:error]; }); } }]; } else { [self errorMethodFromFB:error]; } }]; } 

然后处理从Facebook的错误的方法

 -(void)errorMethodFromFB:(NSError *)error { NSLog(@"access to facebook is not granted"); // extra handling here if necesary dispatch_async(dispatch_get_main_queue(), ^{ // Fail gracefully... NSLog(@"%@",error.description); if([error code]== ACErrorAccountNotFound) [self throwAlertWithTitle:@"Error" message:@"Account not found. Please setup your account in settings app."]; if ([error code] == ACErrorAccessInfoInvalid) [self throwAlertWithTitle:@"Error" message:@"The client's access info dictionary has incorrect or missing values."]; if ([error code] == ACErrorPermissionDenied) [self throwAlertWithTitle:@"Error" message:@"The operation didn't complete because the user denied permission."]; else [self throwAlertWithTitle:@"Error" message:@"Account access denied."]; }); } 

然后消息提醒

 -(void)throwAlertWithTitle:(NSString *)title message:(NSString *)msg { [[[UIAlertView alloc]initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]show]; } 

处理上传方法

 -(void)uploadWithFBAccount:(ACAccount *)facebookAccount { ACAccountCredential *fbCredential = [facebookAccount credential]; NSString *accessToken = [fbCredential oauthToken]; NSURL *videourl = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/me/videos?access_token=%@",accessToken]]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString* foofile = [documentsDirectory stringByAppendingPathComponent:@"me.mov"]; BOOL fileExists = [fileManager fileExistsAtPath:foofile]; if (fileExists) { NSLog(@"file saved"); } NSString *filePath = foofile; NSURL *pathURL = [[NSURL alloc]initFileURLWithPath:filePath isDirectory:NO]; NSData *videoData = [NSData dataWithContentsOfFile:filePath]; NSDictionary *params = @{ @"title": @"Me silly", @"description": @"Me testing the video upload to Facebook with the new Social Framework." }; SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:videourl parameters:params]; [uploadRequest addMultipartData:videoData withName:@"source" type:@"video/quicktime" filename:[pathURL absoluteString]]; uploadRequest.account = facebookAccount; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { [uploadRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error]; NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; if(error) { NSLog(@"Error %@", error.localizedDescription); } else { [[[UIAlertView alloc]initWithTitle:@"Congratulations!" message:@"Your video is suucessfully posted to your FB newsfeed" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]show]; NSLog(@"%@", responseString); } }]; }); } 

看看这个post: video上传与SLRequest

它清楚地指出了如何将其与iOS 6中集成的社交框架(SLRequest)一起使用,甚至还有如何使用Facebook SDK。