例如,使用在SLRequest IOS 6上传视频至Facebook的(无对话)(example o

2019-08-03 04:16发布

我想找一份视频张贴使用的是iOS 6 SLRequest Facebook的一个例子。 我已经有我的代码工作上传照片。

提前致谢!

Answer 1:

分享视频到FB:

  • 创建于developer.facebook.com的应用
  • 提及APPNAME-的info.plist的的AppId
  • 提到应用BundleID下iOS平台应用页面的develper.facebook.com

然后在编码:

我们不得不要求读取权限,然后写权限。

-(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);
           }
       }];
   });
}


Answer 2:

看看这篇文章: 视频上传与SLRequest

它明确指出了如何与社会结构集成在iOS 6中(SLRequest)使用它,甚至还有如何使用Facebook的SDK。



文章来源: example of uploading video to facebook in ios 6 using SLRequest (without dialog)