私のアプリの1つは、Facebookアカウントにビデオをアップロードすることです。Webで確認しましたが、ほとんどのソリューションが古いか削除されていることがわかりました。更新された解決策はありますか?
コメントを歓迎します
私のアプリの1つは、Facebookアカウントにビデオをアップロードすることです。Webで確認しましたが、ほとんどのソリューションが古いか削除されていることがわかりました。更新された解決策はありますか?
コメントを歓迎します
Facebookに公開する前に、ネイティブ統合またはFacebook SDKのいずれかを使用して、公開(書き込み)権限を取得する必要があります。ルールでは、書き込み権限の前にまず読み取り権限を取得する必要があります。
したがって、動画をアップロードする前に、基本的な情報(たとえば、電子メール)を要求する必要があることを確認してください。これを取得したら、書き込み権限を要求できます。動画のアップロードに必要な権限はpublish_stream
です。
ネイティブiOS6Facebook統合を使用するには、次のrequestForServiceType:requestMethod:URL:parameters:
方法を使用する必要があります。SLRequest
- (void)upload{
NSURL *videourl = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"me" ofType:@"mov"];
NSURL *pathURL = [[NSURL alloc]initFileURLWithPath:filePath isDirectory:NO];
NSData *videoData = [NSData dataWithContentsOfFile:filePath];
NSDictionary *params = @{
@"title": @"Me being silly",
@"description": @"Me testing the video upload to Facebook with the new system."
};
SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodPOST
URL:videourl
parameters:params];
[uploadRequest addMultipartData:videoData
withName:@"source"
type:@"video/quicktime"
filename:[pathURL absoluteString]];
uploadRequest.account = self.facebookAccount;
[uploadRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
if(error){
NSLog(@"Error %@", error.localizedDescription);
}else
NSLog(@"%@", responseString);
}];
}
ここで重要なのは、ビデオデータはパラメータディクショナリに入らないため、メソッドSLRequest
を使用してオブジェクトに追加する必要があるということです。addMultipartData:withName:type:filename:
また、ビデオデータを追加するときは、ファイル名が非常に重要であることに注意してください。ここでは、ファイルのフルパスを使用しています。
iOS 6より前のバージョンのiOSをサポートする必要がある場合、またはその他の理由でFacebook SDK 3.1を使用する場合は、ビデオのアップロードが少し異なります。
ビデオの詳細を含むFBRequest
オブジェクトとを使用する必要があります。NSDictionary
私が使用することをお勧めするメソッドはrequestWithGraphPath:parameters:HTTPMethod:
、です。他のメソッドのいくつかを使用してリクエストオブジェクトを作成できるはずですが、このメソッドを優先的に使用しました。
次のコードは、FacebookSDK3.1と連携してビデオをアップロードします。
- (void)upload{
if (FBSession.activeSession.isOpen) {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"me" ofType:@"mov"];
NSURL *pathURL = [[NSURL alloc]initFileURLWithPath:filePath isDirectory:NO];
NSData *videoData = [NSData dataWithContentsOfFile:filePath];
NSDictionary *videoObject = @{
@"title": @"FB SDK 3.1",
@"description": @"hello there !",
[pathURL absoluteString]: videoData
};
FBRequest *uploadRequest = [FBRequest requestWithGraphPath:@"me/videos"
parameters:videoObject
HTTPMethod:@"POST"];
[uploadRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error)
NSLog(@"Done: %@", result);
else
NSLog(@"Error: %@", error.localizedDescription);
}];
}
}
ご覧のとおり、前のソリューションとは異なり、ビデオデータを辞書に追加します。これは、 and (2つのオプションのパラメーター)parameters
とともに存在します。また、Facebookのドキュメントで指定されているように、ここにはキーがないことに注意してください。キーの名前は、ビデオのファイル名です。なぜこれがすべきでないのかわかりませんが、ソースを使用するとcom.facebook.sdkエラー5が発生します。title
description
source
source
私がFacebookに提出したと述べたバグは、このリンクでこのレポートを見ることができます-ドキュメントの解釈を間違えない限り。そのバグを試して、再現できる場合は報告してください。ありがとう !
publish_stream
video_upload
アップロード(読み取り)するのに十分ではない場合は、" "許可を求める必要があります。