我想找一份视频张贴使用的是iOS 6 SLRequest Facebook的一个例子。 我已经有我的代码工作上传照片。
提前致谢!
我想找一份视频张贴使用的是iOS 6 SLRequest Facebook的一个例子。 我已经有我的代码工作上传照片。
提前致谢!
分享视频到FB:
然后在编码:
我们不得不要求读取权限,然后写权限。
-(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);
}
}];
});
}
看看这篇文章: 视频上传与SLRequest
它明确指出了如何与社会结构集成在iOS 6中(SLRequest)使用它,甚至还有如何使用Facebook的SDK。