3

リソースにファイルが存在する場所に、以下のようなコードを書きました。null ではありません。

画像の追加には成功しましたが、ビデオに行き詰まりました。

-(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 にビデオをアップロードするには?

ありがとう

4

4 に答える 4

3

動画を 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]);
    }
}];
于 2014-02-20T01:14:13.580 に答える
0

おすすめ:

これはアクセス許可の問題である可能性があると思いますが、エラーがスローされている場所がわかりません。スローされるデリゲート メソッドがコードに表示されていません。コードをこのサンプルの手順と調整すると役立つと思います。もしそうなら、答えを受け入れてください。

サンプルのいくつかの重要な側面:

権限:

- (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 動画の許可リンク

于 2013-10-25T12:06:26.573 に答える
0

このコードは、FaceBook SDK 3.14.1で正常にテストされています

推奨事項: .plist 内

FacebookAppID、FacebookDisplayName、
URL タイプを設定 -> 項目 0 -> URL スキームを facebookappId プレフィックスに設定fb

-(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:

  • セッションは開いていません。検証。
  • Facebook は、あなたがシステムにスパム行為を行っていることを検出しました。動画名変更。
  • Facebook には、SDK を使用した制限が定義されています。別のアプリを試してください。
于 2014-06-28T14:07:21.543 に答える