5

私のアプリの1つは、Facebookアカウントにビデオをアップロードすることです。Webで確認しましたが、ほとんどのソリューションが古いか削除されていることがわかりました。更新された解決策はありますか?

コメントを歓迎します

4

2 に答える 2

20

コンテクスト

Facebookに公開する前に、ネイティブ統合またはFacebook SDKのいずれかを使用して、公開(書き込み)権限を取得する必要があります。ルールでは、書き込み権限の前にまず読み取り権限を取得する必要があります。

したがって、動画をアップロードする前に、基本的な情報(たとえば、電子メール)を要求する必要があることを確認してください。これを取得したら、書き込み権限を要求できます。動画のアップロードに必要な権限はpublish_streamです。

iOS6ネイティブFacebook統合の使用

ネイティブ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:

また、ビデオデータを追加するときは、ファイル名が非常に重要であることに注意してください。ここでは、ファイルのフルパスを使用しています。

FacebookSDK3.1ライブラリの使用

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が発生します。titledescriptionsourcesource

私がFacebookに提出したと述べたバグは、このリンクでこのレポートを見ることができます-ドキュメントの解釈を間違えない限り。そのバグを試して、再現できる場合は報告してください。ありがとう !

于 2012-10-13T02:34:16.313 に答える
1

publish_streamvideo_uploadアップロード(読み取り)するのに十分ではない場合は、" "許可を求める必要があります。

于 2013-04-03T07:10:28.553 に答える