0

iOS 6.3 アプリ内で Facebook SDK 3.6 を使用して、ビデオを Facebook にアップロードしています。

これに関する多くのスタック オーバーフローの投稿を見てきましたが、それらはすべて何年も前のものであり、はるかに古い Facebook SDK を使用しています。

うまくいく場合もあれば、次のメッセージで失敗する場合もあります。

unexpected error:Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be     completed. (com.facebook.sdk error 5.)" UserInfo=0x1e2affc0 {com.facebook.sdk:HTTPStatusCode=500, com.facebook.sdk:ParsedJSONResponseKey={
body = {
"error_code" = 1;
"error_msg" = "An unknown error occurred";
};
code = 500;
}, com.facebook.sdk:ErrorSessionKey=, expirationDate: 4001-01-01 00:00:00 +0000, refreshDate: 2013-07-30 10:54:22 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(
"publish_stream"
)>}

これが私のコードです:

FBRequestConnection *_currentConnection;

[FBSession.activeSession requestNewPublishPermissions:@[@"publish_stream"]
                                          defaultAudience:FBSessionDefaultAudienceOnlyMe
                                        completionHandler:^(FBSession *session, NSError *error) {
                                            if (!error) {

NSError *attributesError;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:url.path error:&attributesError];

NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
long long fileSize = [fileSizeNumber longLongValue];

NSLog(@"file size: %lld", fileSize);

NSString *filename = [url lastPathComponent];
NSLog(@"filename: %@", filename);
NSString *mimeType = [self MIMETypeForFilename:filename
                                       defaultMIMEType:@"video/mp4"];

NSLog(@"mime type: %@", mimeType);

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       videoData, filename,
                                       mimeType, @"contentType",
                                       self.song.name, @"title",
                                       _videoDescription, @"description",
                                       nil];




        FBRequest *request = [FBRequest requestWithGraphPath:@"me/videos"
                                                  parameters:params
                                                  HTTPMethod:@"POST"];



        _currentConnection = [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

            self.stageLabel.text = @"";

            NSLog(@"result: %@, error: %@", result, error);
            if(error) {
                // Facebook SDK * error handling *
                // if the operation is not user cancelled
                if (error.fberrorCategory != FBErrorCategoryUserCancelled) {
                    [self showAlert:@"Video Post" result:result error:error];
                }

                self.uploadBarButtonItem.enabled = YES;
            } else {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Video Uploaded" message:@"Video has been uploaded"
                                                               delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alert show];
                [self.delegate facebookUploaderUploadSucceeded:self];
            }

            // Delete the temp video
            NSError *err;
            [[NSFileManager defaultManager] removeItemAtURL:_sourceURL error:&err];
            NSLog(@"Deleting video %@: %@", _sourceURL, [err localizedDescription]);


        }];



    }];

}
}];
4

1 に答える 1

0

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

-(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 を使用した制限が定義されています。別のアプリを試してください。
  • 公開許可が間違っています。publish_actionsスピンしてください。
于 2014-06-28T14:00:45.443 に答える