Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sharing video to Facebook on iOS 8

I have some sharing code that works fine for iOS 7, but as of iOS 8, no longer works.

@IBAction func onShareButton(sender: UIButton) {
    let movie = NSBundle.mainBundle().URLForResource("IMG_0564", withExtension: "mp4")!
    let items = [movie]
    let activity = UIActivityViewController(activityItems: items, applicationActivities: nil)
    if activity.respondsToSelector("popoverPresentationController") {
        activity.popoverPresentationController?.sourceView = sender
    }
    self.presentViewController(activity, animated: true, completion: nil)
}

As I stated, this is working fine in iOS 7, but as of iOS 8, the video clip is no longer attached to the post (or visible in the share panel) when I choose to share to Facebook. All other options work, Mail, Save to Video, AirDrop, etc all seem to work fine.

I've also tried passing the items as AVAssets:

    let items = [movie].map { AVAsset.assetWithURL($0) }

and NSData:

    let items = [movie].map { NSData(contentsOfURL: $0) }

Neither of which had any effect on the problem.

The problem also occurs if I use the moral equivalent in Objective-C, it's language agnostic.

like image 912
David Berry Avatar asked Sep 15 '14 19:09

David Berry


2 Answers

I got the same problem and I found the key point is the file type. I have tried to share a .mp4 video, it won't attach video to the post. Once I use .mov video, it works for me.

like image 150
Ocean Lin Avatar answered Oct 12 '22 22:10

Ocean Lin


OK, I tried a workaround and it worked for me.

I had video data that I first saved to a file in documents directory and then I attached that file.

//write to a file
[videoData writeToFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.mov"] atomically:YES];

- (IBAction)ShareVideoWihFacebook:(id)sender
{

    //get the file url
    NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.mov"];

    NSURL *videoURL = [NSURL fileURLWithPath:path];

    UIActivityViewController * activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[videoURL,@"Created by ..."] applicationActivities:NULL];


    [activityVC setExcludedActivityTypes:@[ UIActivityTypeMail,UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypePrint, UIActivityTypePostToWeibo,UIActivityTypeMessage,UIActivityTypeAirDrop,UIActivityTypeSaveToCameraRoll]];

    [activityVC setValue:@"My Video" forKey:@"subject"];

    [activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
        //NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed);
    }];

    [self presentViewController:activityVC animated:TRUE completion:nil];
}
like image 27
tjay Avatar answered Oct 12 '22 22:10

tjay