Обмен изображениями с Whatsapp & Facebook

Я уже могу поделиться фотографиями с Whatsapp, но так, как я это делаю, это предоставить опцию Whatsapp в UIActivityViewController, а затем показать UIDocumentInteractionController.

Из этого UIDocumentInteractionController я выбираю вариант Whatsapp, который перенаправляет пользователя в Whatsapp и позволяет ему делиться фотографией.

Пока мой код выглядит так:

if ([activityType isEqualToString:@"whatsappSharing"]) {
    if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"whatsapp://app"]]) {
        NSString *savePath  = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.wai"];

        [UIImageJPEGRepresentation(finalImage, 1.0) writeToFile:savePath atomically:YES];

        weakDocumentInteraction = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:savePath]];
        weakDocumentInteraction.UTI = @"net.whatsapp.image";
        weakDocumentInteraction.delegate = weakSelf;

        [weakDocumentInteraction presentOpenInMenuFromRect:CGRectZero inView:weakSelf.view animated:YES];
    }
}

Я хочу иметь возможность выбрать вариант из UIActivityViewController и сразу показать Whatsapp.

Есть ли способ перескакивать эту вторую часть представления UIDocumentInteractionController и программно выбирать вариант приложения Whatsapp?

В настоящее время пользователю необходимо дважды выбрать вариант Whatsapp для совместного использования изображения.

PS: Я использую UIActivityViewController, потому что я тоже использую другие действия.

Ответ 1

Таким образом, вы хотите поделиться изображением через Facebook или Whatsapp, а также предоставить возможность сохранить изображение.

Ну... Давайте медленно разложим это на 2 быстрых пути.


Facebook + Whatsapp

Через UIActivityViewController

Если вы делитесь изображением через UIActivityViewController, то для того, чтобы предоставить параметр Whatsapp, вам нужно создать пользовательский UIActivity (См. Вопрос о стоп-потоке).

проблемы:

  • Whatsapp не предоставил схему URL для передачи объекта изображения (пока).
    Посмотрите JBWhatsAppActivity, если вам это вообще интересно.

Через UIDocumentInteractionController

Если вы обмениваетесь изображениями с помощью UIDocumentInteractionController, то для предоставления опции Facebook вам нужно указать UTI как public.image.

проблемы:

  • public.image UTI заполнит ваш UIDocumentInteractionController большим количеством опций, чем только Facebook и Whatsapp.
  • Для параметра Save, а не
    • Используя метод -presentOpenInMenuFromRect:inView:animated:, который отображает только те приложения, которые открывают этот тип файла...
    • Вам нужно будет использовать метод -presentOptionsMenuFromRect:inView:animated:, чтобы показать опцию Save to Album. Но это будет включать другие параметры, такие как Mail и т.д.

Резюме:

Если вы используете только UIDocumentInteractionController, то вы должны принять тот факт, что вы не можете показать только Facebook + Whatsapp + Save (по причинам, упомянутым выше)

Если вы используете UIActivityViewController и не хотите создавать пользовательский UIActivity для Whatsapp, то вы застряли , но..., если вы решите использовать пользовательский UIActivity то вы все еще застряли, потому что нет никаких условий для совместного использования объекта изображения с помощью Whatsapp с помощью UIActivityViewController.

Вывод:

Кажется, что нет простого способа иметь только функцию Facebook + Whatsapp + Save.

То, что усложняет его, - это Whatsapp, который заставляет вас использовать UIDocumentInteractionController, который кажется единственным способом поделиться изображением на Whatsapp (в настоящее время) и из-за его ограниченной схемы URL, там нет точки, предоставляя его в UIActivityViewController.

Кроме того, использование UIDocumentInteractionController по очереди приводит к предоставлению большего количества параметров, чем вы хотели бы.

Честно говоря, сейчас это выглядит довольно мрачно.

Ответ 2

Хорошо, если я правильно понимаю вопрос, есть возможность поделиться им легко через 1 UIDocumentInteractionController, просмотрите мой старый вопрос и ответ: fooobar.com/info/449969/....