使用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。
- 如何在同一个appdelegate.swift中同时使用google +和facebooklogin
- 如何检测Facebook应用程序是否安装在iOS?
- iOS – Facebook Open Graph API – 获取字幕显示在用户生成的图像旁边
- Facebook的iOS SDK:为什么我得到“你必须升级这个应用程序graphicsAPI v2.x”?
- UIActivityViewController不会在iOS 7上显示FB和Twitter
- 我正在尝试loginFacebook,它login成功,但不返回到应用程序
- NSJSONSerialization与Facebook iOS SDK 3.5崩溃
- iOS Facebook SDK本地化
- 有时Facebook共享对话框不会在iOS上加载