I'm already able to share photos to Whatsapp but the way I do this is by providing Whatsapp option in a UIActivityViewController
and then showing a UIDocumentInteractionController
.
From this UIDocumentInteractionController
, I choose the Whatsapp option which redirects the user to Whatsapp and enables him to share the photo.
So far my code is like this:
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];
}
}
I want to be able to select the option from a UIActivityViewController
and directly show Whatsapp.
Is there a way to jump this second part of presenting the UIDocumentInteractionController
and selecting the Whatsapp app option programmatically?
Currently, the user has to select the Whatsapp option twice in order to share the image.
PS: I'm using UIActivityViewController
because I'm using other activities too.
So basically, you want to share an image via Facebook or Whatsapp, plus provide an option to save the image.
Well... Lets break this down slowly for the 2 quickest ways.
UIActivityViewController
If you share image via UIActivityViewController
then in order to provide Whatsapp option, you'll need to create a custom UIActivity
(See Stackoverflow Question).
The problems with this are:
UIDocumentInteractionController
If you share image via UIDocumentInteractionController
then in order to provide the Facebook option, you'll need to specify the UTI as public.image
.
The problems with this are:
public.image
UTI will populate your UIDocumentInteractionController
with alot more options than just Facebook and Whatsapp.Save
option, rather than
-presentOpenInMenuFromRect:inView:animated:
method that displays only apps that open this file type...-presentOptionsMenuFromRect:inView:animated:
method in order to show the option Save to Album
. But this will include other options such as Mail
etc.If you use only UIDocumentInteractionController
then you should accept the fact that you cannot show just Facebook + Whatsapp + Save (due to the reasons mentioned above)
If you use UIActivityViewController
and don't want to create a custom UIActivity
for Whatsapp, then you're stuck but... if you decide to use a custom UIActivity
then you're still stuck because there's no provision to share an image object with Whatsapp using UIActivityViewController
.
There doesn't seem to be any easy way to have just Facebook + Whatsapp + Save option.
The thing that complicates it is Whatsapp which forces you to use UIDocumentInteractionController
which seems like the only way to share an image on Whatsapp (currently) and due to it's limited URL scheme, there's no point providing it in UIActivityViewController
.
Furthermore, using UIDocumentInteractionController
in turns leads you to provide more options than you would want.
Honestly, this looks pretty bleak right now.