Instagram Video iPhone Hook

后端 未结 2 506
迷失自我
迷失自我 2021-01-01 07:37

The current best solution:

https://stackoverflow.com/a/21888830/1786820

I am trying to do one better, by opening the Instagram app with a preselected video f

相关标签:
2条回答
  • 2021-01-01 08:03

    I came up with the idea to allow my app to accept the instagram:// URL schema. The hook from Flipagram opened up in my app as the following:

    instagram://library?AssetPath=assets-library%3A%2F%2Fasset%2Fasset.mp4%3Fid%3D8864C466-A45C-4C48-B76F-E3C421711E9D%26ext%3Dmp4&InstagramCaption=Some%20Preloaded%20Caption

    The undocumented iPhone hook that allows you to automatically select assets from the iPhones photo roll, and preload a caption for the video. This should give you the same user experience that Flipagrams app has with sharing a video to Instagram.

    NSURL *videoFilePath = ...; // Your local path to the video
    NSString *caption = @"Some Preloaded Caption";
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library writeVideoAtPathToSavedPhotosAlbum:[NSURL URLWithString:videoFilePath] completionBlock:^(NSURL *assetURL, NSError *error) {
        NSURL *instagramURL = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@",[assetURL absoluteString].percentEscape,caption.percentEscape]];
        if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {
            [[UIApplication sharedApplication] openURL:instagramURL];
        }
    }];
    

    Works great!

    Update: Instagram has removed the ability to pass the caption to their app. The best solution now it to just copy the desired caption to the paste board.

    0 讨论(0)
  • 2021-01-01 08:19

    The answer is that it is not pulling the video from the camera roll at all, it might just look like it is.

    Documentation here: http://instagram.com/developer/mobile-sharing/iphone-hooks/

    The relevant bit is the bottom section "Document Interaction".

    You would do this by doing something like this:

    NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"instagram.igo"];
    NSData *data = // set this yourself
    
    NSError *error = nil;
    if (! [data writeToFile:filePath options:NSDataWritingAtomic error:&error])
    {
        // error here
    }
    
    self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
    self.documentInteractionController.delegate = self;
    self.documentInteractionController.UTI = @"com.instagram.exclusivegram";
    self.documentInteractionController.annotation = @{ @"InstagramCaption" : @"caption text here" };
    const BOOL couldOpen = [self.documentInteractionController presentOpenInMenuFromRect:CGRectZero inView:myView animated:YES];
    

    Set the data, the caption, and the view to present from yourself. Notice the UIDocumentInteractionController is also a property. It should be retained somewhere and not just a local variable in a method because it needs to exist outside of that scope when the method completes.

    0 讨论(0)
提交回复
热议问题