0

我正在寻找一个使用 iOS 6 和 SLRequest 将视频发布到 facebook 的示例。我已经有了用于上传照片的代码。

提前致谢!

4

2 回答 2

4

分享视频到 FB :

  • 在 developer.facebook.com 上创建一个应用程序
  • 在 appName-info.plist 中提及 AppId
  • 在 iOS 平台下您的应用页面的 develper.facebook.com 中提及应用 BundleID

然后在编码:

我们必须请求读取权限然后写入权限。

-(void)shareOnFB
{
      __block ACAccount * facebookAccount;
      ACAccountStore *accountStore = [[ACAccountStore alloc] init];
      NSDictionary *emailReadPermisson = [[NSDictionary alloc] initWithObjectsAndKeys:
                                    FB_APP_ID,ACFacebookAppIdKey,
                                    @[@"email"],ACFacebookPermissionsKey,
                                    ACFacebookAudienceFriends,ACFacebookAudienceKey,
                                    nil];

      NSDictionary *publishWritePermisson = [[NSDictionary alloc] initWithObjectsAndKeys:
                                       FB_APP_ID,ACFacebookAppIdKey,
                                       @[@"publish_stream"],ACFacebookPermissionsKey,
                                       ACFacebookAudienceFriends,ACFacebookAudienceKey,
                                       nil];

     ACAccountType *facebookAccountType = [accountStore
                                      accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
      //Request for Read permission

    [accountStore requestAccessToAccountsWithType:facebookAccountType options:emailReadPermisson completion:^(BOOL granted, NSError *error) {

    if (granted)
    {
        //Request for write permission
        [accountStore requestAccessToAccountsWithType:facebookAccountType options:publishWritePermisson completion:^(BOOL granted, NSError *error) {

        if (granted)
        {
             NSArray *accounts = [accountStore
                                     accountsWithAccountType:facebookAccountType];
             facebookAccount = [accounts lastObject];
             NSLog(@"access to facebook account ok %@", facebookAccount.username);
             [self uploadWithFBAccount:facebookAccount];
        } 
        else 
        {
             NSLog(@"access to facebook is not granted");
               // extra handling here if necesary
             dispatch_async(dispatch_get_main_queue(), ^{
                 // Fail gracefully...
                NSLog(@"%@",error.description);
                [self errorMethodFromFB:error];
                });
         }
      }];
    }
    else
    {
       [self errorMethodFromFB:error];
    }
  }];
}

然后处理来自facebook的错误方法

-(void)errorMethodFromFB:(NSError *)error
{

    NSLog(@"access to facebook is not granted");
   // extra handling here if necesary

  dispatch_async(dispatch_get_main_queue(), ^{

      // Fail gracefully...
      NSLog(@"%@",error.description);

      if([error code]== ACErrorAccountNotFound)
          [self throwAlertWithTitle:@"Error" message:@"Account not found. Please setup your account in settings app."];
      if ([error code] == ACErrorAccessInfoInvalid)
          [self throwAlertWithTitle:@"Error" message:@"The client's access info dictionary has incorrect or missing values."];
     if ([error code] ==  ACErrorPermissionDenied)
          [self throwAlertWithTitle:@"Error" message:@"The operation didn't complete because the user denied permission."];
     else
          [self throwAlertWithTitle:@"Error" message:@"Account access denied."];
  });
}

然后消息提醒

-(void)throwAlertWithTitle:(NSString *)title message:(NSString *)msg
{
     [[[UIAlertView alloc]initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]show];
}

处理上传方法

-(void)uploadWithFBAccount:(ACAccount *)facebookAccount
{
    ACAccountCredential *fbCredential = [facebookAccount credential];
    NSString *accessToken = [fbCredential oauthToken];

    NSURL *videourl = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/me/videos?access_token=%@",accessToken]];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* foofile = [documentsDirectory stringByAppendingPathComponent:@"me.mov"];
    BOOL fileExists = [fileManager fileExistsAtPath:foofile];
   if (fileExists) 
   {
       NSLog(@"file saved");
   }
   NSString *filePath = foofile;
   NSURL *pathURL = [[NSURL alloc]initFileURLWithPath:filePath isDirectory:NO];
   NSData *videoData = [NSData dataWithContentsOfFile:filePath];
   NSDictionary *params = @{
                         @"title": @"Me  silly",
                         @"description": @"Me testing the video upload to Facebook with the new Social Framework."
                         };

   SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                              requestMethod:SLRequestMethodPOST
                                                        URL:videourl
                                                 parameters:params];
  [uploadRequest addMultipartData:videoData
                       withName:@"source"
                           type:@"video/quicktime"
                       filename:[pathURL absoluteString]];

    uploadRequest.account = facebookAccount;

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
        [uploadRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
            NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
            NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

           if(error)
           {
                 NSLog(@"Error %@", error.localizedDescription);
           }
           else
           {
                [[[UIAlertView alloc]initWithTitle:@"Congratulations!" message:@"Your video is suucessfully posted to your FB newsfeed" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]show];
                NSLog(@"%@", responseString);
           }
       }];
   });
}
于 2014-03-11T12:06:12.360 回答
1

查看这篇文章:使用 SLRequest 上传视频

它清楚地指出了如何将它与集成在 iOS 6 中的社交框架 (SLRequest) 一起使用,甚至还指出了如何使用 Facebook 的 SDK。

于 2012-11-30T12:47:21.473 回答