0

I am looking for an example where a video is posted to facebook using iOS 6 & SLRequest. I already have my code working for uploading a photo.

Thanks in advance!

user1693199
  • 39
  • 2
  • 5

2 Answers2

4

For sharing a Video to FB :

  • Create an app on developer.facebook.com
  • mention the AppId in appName-info.plist
  • mention app BundleID in develper.facebook.com of your app page under iOS platform

Then on coding:

we have to request for read permission then write permission .

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

Then Handle the error method from 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."];
  });
}

Then message alert

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

Handle Uploading method

-(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);
           }
       }];
   });
}
Vaibhav Sharma
  • 1,123
  • 10
  • 22
Jayaprada
  • 944
  • 8
  • 11
1

Check out this post: Video Upload with SLRequest

It clearly points out how to use it with the Social Framework integrated in iOS 6 (SLRequest) and even also how to use Facebooks SDK.

Community
  • 1
  • 1
tommy2go
  • 33
  • 8