Инстаграм открыт UTI напрямую - PullRequest
14 голосов
/ 29 июня 2011

Я недавно наткнулся на следующую интересную особенность: Instagram iPhone Hooks

Мне было интересно, можно ли сразу открыть приложение через контроллер управления документами, БЕЗ необходимость показа предварительного просмотра (- presentPreviewAnimated :) или листа действий (- presentOpenInMenuFromRect: inView: animated :). Мне кажется, что это единственный путь, но я могу что-то упустить.

-(void) saveToInstagram {
    NSURL *url;
    UIDocumentInteractionController *dic;
    CGRect rect = CGRectMake(0 ,0 , 0, 0);
    UIImage *i = imageView.image;
    CGRect cropRect = CGRectMake(i.size.width - 306 ,i.size.height - 306 , 612, 612);
    NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.ig"];
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageView.image CGImage], cropRect);
    UIImage *img = [[UIImage alloc] initWithCGImage:imageRef];
    CGImageRelease(imageRef);

    [UIImageJPEGRepresentation(img, 1.0) writeToFile:jpgPath atomically:YES];
    url = [[NSURL alloc] initFileURLWithPath:jpgPath];
    dic = [self setupControllerWithURL:url usingDelegate:self];
    [dic presentOpenInMenuFromRect:rect inView:self.view animated:YES];
    [dic retain];
    [img release];
    [url release];
}

- (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate {

    UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL];
    interactionController.delegate = interactionDelegate;

    return interactionController;
}

- (void)documentInteractionControllerWillPresentOpenInMenu:(UIDocumentInteractionController *)controller {

}

Ответы [ 2 ]

5 голосов
/ 22 марта 2012

Сначала сохраните JPEG с расширением .ig или .igo вместо .jpg или .jpeg, затем создайте NSURL с директивой file: //.Также я использовал расширение .igo и UTI com.instagram.exclusivegram для эксклюзивности в Instagram, но вы можете использовать расширение .ig и UTI com.instagram.gram

Например:

// URL TO THE IMAGE FOR THE DOCUMENT INTERACTION
NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]];

docInteractionController.UTI = @"com.instagram.exclusivegram";
[self setupDocumentControllerWithURL:igImageHookFile];

// OPEN THE HOOK
[docInteractionController presentOpenInMenuFromRect:self.frame inView:self animated:YES];
2 голосов
/ 16 июля 2011

Единственный способ сделать это будет, если Instagram зарегистрирует пользовательский обработчик URL (например, igram: //) и сможет принимать данные либо как часть этого URL (например, в кодировке base64), либо через монтажную панель.

В основном, ограничения для обхода UIDocumentInteractionController (и этого метода):

  1. Приложениям не разрешается запрашивать или напрямую запускать другие приложения.
  2. Приложения не могут обычно открывать файлы из изолированной средыпользовательский каталог других приложений.
...