38

I have googled, and get some solutions, it seems the only possible way is thru UIDocumentInteractionController. I have found the result that able to share text ONLY, also found result that share image ONLY.

But what I want is share BOTH.

I know this question may be duplicated, I just wanted to make it clear, here is the screenshot...

WhatsApp share image + text

(This is shared from Android)

Js Lim
  • 3,625
  • 6
  • 42
  • 80

5 Answers5

17

You can use UIActivityViewController to share image , text or URL .Here is a small example :

NSString *textToShare = @"Enter your text to be shared";
UIImage * image = [UIImage imageNamed:@"imagename"];

NSArray *objectsToShare = @[textToShare, image];

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];


[self presentViewController:activityVC animated:YES completion:nil];

Run the above code and select whats app to share if you want you can share by other mediums also . This is apple' s default share method

vijay
  • 1,475
  • 2
  • 16
  • 26
Gauraw
  • 304
  • 2
  • 5
  • 13
  • 2
    in this way "textToShare" string not share in whats app...so, that's not working for me... – ramesh bhuja Apr 22 '16 at 05:52
  • 2
    Its working fine, But image only sharing not content. – vijay May 09 '16 at 07:50
  • Can we use this with Swift 2? – Marc Lemien Jul 07 '16 at 12:25
  • 1
    @MarcLemien You can try this code : let shareText = "Hello, world!" if let image = UIImage(named: "myImage") { let vc = UIActivityViewController(activityItems: [shareText, image], applicationActivities: []) presentViewController(vc, animated: true, completion: nil) } – Gauraw Jul 14 '16 at 13:28
  • One workaround i was thinking of, we can copy the caption to clipboard and ask the user to manually paste it in the Whatsapp caption textfield. Doesn't serve the actual purpose but can be a valid workaround. – Piyush Verma Sep 06 '16 at 05:19
  • image or text share, both sharing is not possible – Mehul Apr 27 '17 at 08:27
  • @Chandni you or anyone able to do this? – Samkit Jain Feb 21 '19 at 11:52
  • 1
    this answer seems to be incorrect, There is no way image and text are sharing using uactivitycontroller. Can any one please shed some light on this. – Pulkit Kumar Singh Sep 17 '19 at 12:19
1

something not usually mentioned the user doesn't actually needs to share a text message and an image.

If your text contains URL then the whatsapp application will try to retrieve info about the URL and show a preview

In order for this to work you need to make the URL conform to open graph protocol. that basically means that the URL needs to have meta tags in its DOM which contain the relevant preview data

Arkadi
  • 11
  • 1
  • But for that, the user will have to integrate the image in the meta-tags of the website. With this method, the user will only get the image of the website, not the actual product in this case. – Piyush Verma Sep 06 '16 at 05:25
-3

Good one,

As I know it is not possible in ios. But I am having an alternate solution for it by which you can share text and image both.But it's a tricky or I think stupid solution.

  1. Create a View where you can put your image.Write text on that view whatever you want to write.
  2. Take Screen shot of that view with help of code.You will get image (image of view where text and image added).
  3. Just share that image via document interaction controller.

This is just a possible solution if you want text and image both.But if you want to share link with text than . . . . . . .

Anil solanki
  • 962
  • 4
  • 20
-5

You can use UIDocumentInteractionController for this purpose like this:

@property (retain) UIDocumentInteractionController * documentInteractionController;


if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"whatsapp://app"]]){

    UIImage     * iconImage = [UIImage imageNamed:@"YOUR IMAGE"];
    NSString    * savePath  = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.wai"];

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

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

    [_documentInteractionController presentOpenInMenuFromRect:CGRectMake(0, 0, 0, 0) inView:self.view animated: YES];


} else {
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"WhatsApp not installed." message:@"Your device has no WhatsApp installed." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
}

Check this answer for reference: https://stackoverflow.com/a/20601051/2082569

Also you can have a look at Socialize SDK that is also very easy to use and integrates with various social SDKs. Check this documentation for Whatsapp sharing: http://socialize.github.io/socialize-sdk-ios/whatsapp.html

Community
  • 1
  • 1
atulkhatri
  • 10,896
  • 3
  • 53
  • 89
  • 6
    I don't see property that set the message. The code above I already tested many times, only can share image. My question is **HOW TO SHARE BOTH IN A SINGLE SHARE** – Js Lim Apr 20 '15 at 09:38
-5

Please check below project on github

https://github.com/salesawagner/SharingWhatsApp

typedef enum{
    kSendText = 0,
    kSendImage,
    kSendTextWithImage,
    kSendAudio,
    kSendCancel
} options;
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

    switch (buttonIndex) {
        case kSendText:
            [[WASWhatsAppUtil getInstance] sendText:@"Text"];
            break;
        case kSendImage:
            [[WASWhatsAppUtil getInstance] sendImage:[UIImage imageNamed:@"image.jpg"] inView:self.view];
            break;
        case kSendTextWithImage:
            NSLog(@"Send text with image");
        case kSendAudio:
            [[WASWhatsAppUtil getInstance] sendAudioinView:self.view];
            break;
        default:
            NSLog(@"Cancel send");
            break;
    }

}
Janak LN
  • 138
  • 2
  • 15