如何在 facebook SDK 中分享视频?
Posted
技术标签:
【中文标题】如何在 facebook SDK 中分享视频?【英文标题】:How to share video in facebook SDK? 【发布时间】:2013-10-25 11:25:02 【问题描述】:我在资源中存在文件的地方编写了如下代码。它不为空。
我成功添加了图片,但卡在了视频上。
-(void)uploadVideo
NSLog(@"UPload Videio ");
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"abc" ofType:@"mp4"];
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfFile:filePath options:NSDataReadingUncached error:&error];
if(data == nil && error!=nil)
//Print error description
NSLog(@"error is %@", [error description]);
NSLog(@"data is %@", data);
NSDictionary *parameters = [NSDictionary dictionaryWithObject:data forKey:@"sample.mov"];
if (FBSession.activeSession.isOpen)
[FBRequestConnection startWithGraphpath:@"me/videos"
parameters:parameters
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
// [FBRequestConnection setVideoMode:NO];
if(!error)
NSLog(@"OK: %@", result);
else
NSLog(@"Error: %@", error.localizedDescription);
];
else
// We don't have an active session in this app, so lets open a new
// facebook session with the appropriate permissions!
// Firstly, construct a permission array.
// you can find more "permissions strings" at http://developers.facebook.com/docs/authentication/permissions/
// In this example, we will just request a publish_stream which is required to publish status or photos.
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"publish_stream",
nil];
//[self controlStatusUsable:NO];
// OPEN Session!
[FBSession openActiveSessionWithPermissions:permissions
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState status,
NSError *error)
// if login fails for any reason, we alert
if (error)
// show error to user.
else if (FB_ISSESSIONOPENWITHSTATE(status))
// no error, so we proceed with requesting user details of current facebook session.
[FBRequestConnection startWithGraphPath:@"me/videos"
parameters:parameters
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
// [FBRequestConnection setVideoMode:NO];
if(!error)
NSLog(@"Result: %@", result);
else
NSLog(@"ERROR: %@", error.localizedDescription);
];
//[self promptUserWithAccountNameForUploadPhoto];
// [self controlStatusUsable:YES];
];
作为回报,我收到错误
The operation couldn’t be completed. (com.facebook.sdk error 5.)
如何使用 facebook ios SDK 将视频上传到 facebook?
谢谢
【问题讨论】:
查看FB推荐的视频格式。 从哪里传,只能传链接吗? facebook.com/help/www/218673814818907 他们推荐mp4。 请在此处使用新的 facebook SDK ***.com/a/29427089/2787452查看它 【参考方案1】:这是一种将视频上传到 Facebook 的方法。此代码正在测试并且 100% 正常工作。
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
ACAccountType *facebookAccountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// Specify App ID and permissions
NSDictionary *options = @ACFacebookAppIdKey: FACEBOOK_ID,
ACFacebookPermissionsKey: @[@"publish_stream", @"video_upload"],
ACFacebookAudienceKey: ACFacebookAudienceFriends; // basic read permissions
[accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *e)
if (granted)
NSArray *accountsArray = [accountStore accountsWithAccountType:facebookAccountType];
if ([accountsArray count] > 0)
ACAccount *facebookAccount = [accountsArray objectAtIndex:0];
NSDictionary *parameters = @@"description": aMessage;
SLRequest *facebookRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodPOST
URL:[NSURL URLWithString:@"https://graph.facebook.com/me/videos"]
parameters:parameters];
[facebookRequest addMultipartData: aVideo
withName:@"source"
type:@"video/mp4"
filename:@"video.mov"];
facebookRequest.account = facebookAccount;
[facebookRequest performRequestWithHandler:^(NSData* responseData, NSHTTPURLResponse* urlResponse, NSError* error)
if (error == nil)
NSLog(@"responedata:%@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
else
NSLog(@"%@",error.description);
];
else
NSLog(@"Access Denied");
NSLog(@"[%@]",[e localizedDescription]);
];
【讨论】:
publish_stream
和 video_upload
都不存在了。【参考方案2】:
推荐:
我认为这可能是权限问题,但我不确定错误是在哪里引发的。将抛出的委托方法未显示在您的代码中。我认为将您的代码与sample 中的步骤进行协调可能会有所帮助;如果是,请接受答案。
样本的一些关键方面:
权限:
- (IBAction)buttonClicked:(id)sender
NSArray* permissions = [[NSArray alloc] initWithObjects:
@"publish_stream", nil];
[facebook authorize:permissions delegate:self];
[permissions release];
构建请求:
- (void)fbDidLogin
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mov"];
NSData *videoData = [NSData dataWithContentsOfFile:filePath];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
videoData, @"video.mov",
@"video/quicktime", @"contentType",
@"Video Test Title", @"title",
@"Video Test Description", @"description",
nil];
[facebook requestWithGraphPath:@"me/videos"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
请求 didLoad 委托方法:
- (void)request:(FBRequest *)request didLoad:(id)result
if ([result isKindOfClass:[NSArray class]])
result = [result objectAtIndex:0];
NSLog(@"Result of API call: %@", result);
请求 didFail 委托方法:
- (void)request:(FBRequest *)request didFailWithError:(NSError *)error
NSLog(@"Failed with error: %@", [error localizedDescription]);
Facebook 视频权限Link
【讨论】:
【参考方案3】:此代码已在 FaceBook SDK 3.14.1 上成功测试
推荐:在.plist中
设置 FacebookAppID、FacebookDisplayName、
URL types->Item 0->URL Schemes 设置为带有 fb
前缀的 facebookappId
-(void)shareOnFaceBook
//sample_video.mov is the name of file
NSString *filePathOfVideo = [[NSBundle mainBundle] pathForResource:@"sample_video" ofType:@"mov"];
NSLog(@"Path Of Video is %@", filePathOfVideo);
NSData *videoData = [NSData dataWithContentsOfFile:filePathOfVideo];
//you can use dataWithContentsOfURL if you have a Url of video file
//NSData *videoData = [NSData dataWithContentsOfURL:shareURL];
//NSLog(@"data is :%@",videoData);
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
videoData, @"video.mov",
@"video/quicktime", @"contentType",
@"Video name ", @"name",
@"description of Video", @"description",
nil];
if (FBSession.activeSession.isOpen)
[FBRequestConnection startWithGraphPath:@"me/videos"
parameters:params
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
if(!error)
NSLog(@"RESULT: %@", result);
[self throwAlertWithTitle:@"Success" message:@"Video uploaded"];
else
NSLog(@"ERROR: %@", error.localizedDescription);
[self throwAlertWithTitle:@"Denied" message:@"Try Again"];
];
else
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"publish_actions",
nil];
// OPEN Session!
[FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState status,
NSError *error)
if (error)
NSLog(@"Login fail :%@",error);
else if (FB_ISSESSIONOPENWITHSTATE(status))
[FBRequestConnection startWithGraphPath:@"me/videos"
parameters:params
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
if(!error)
[self throwAlertWithTitle:@"Success" message:@"Video uploaded"];
NSLog(@"RESULT: %@", result);
else
[self throwAlertWithTitle:@"Denied" message:@"Try Again"];
NSLog(@"ERROR: %@", error.localizedDescription);
];
];
我遇到了错误:
The operation couldn’t be completed. (com.facebook.sdk error 5.)
在启动 facebook 时发生。下次我打开我的应用程序时,它运行良好,它总是第一次。尝试了应用程序中的所有内容,但似乎是在 Facebook SDK 方面。
看到com.facebook.sdk error 5
的几个原因:
【讨论】:
【参考方案4】:您之前是否请求过publish_stream
权限?
【讨论】:
该权限已替换为publish_actions
,请删除此答案/问题。以上是关于如何在 facebook SDK 中分享视频?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Facebook 上的 iPhone 应用程序中分享我的页面内容?
如何在 android 中使用 Twitter kit 3 在 Twitter 中分享视频?