Share image/text through WhatsApp in an iOS app

IphoneIos

Iphone Problem Overview


Is it possible to share images, text or whatever you want through Whatsapp in a iOS app? I'm searching on google but I only found results talking about Android implementations.

Iphone Solutions


Solution 1 - Iphone

Is now possible in this way:

Send Text - Obj-C

NSString * msg = @"YOUR MSG";
NSString * urlWhats = [NSString stringWithFormat:@"whatsapp://send?text=%@",msg];
NSURL * whatsappURL = [NSURL URLWithString:[urlWhats stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) {
	[[UIApplication sharedApplication] openURL: whatsappURL];
} else {
	// Cannot open whatsapp
}

Send Text - Swift

let msg = "YOUR MSG"
let urlWhats = "whatsapp://send?text=\(msg)"
if let urlString = urlWhats.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) {
	if let whatsappURL = NSURL(string: urlString) {
		if UIApplication.sharedApplication().canOpenURL(whatsappURL) {
			UIApplication.sharedApplication().openURL(whatsappURL)
		} else {
			// Cannot open whatsapp
		}
	}
}

Send Image - Obj-C

-- in .h file

<UIDocumentInteractionControllerDelegate>

@property (retain) UIDocumentInteractionController * documentInteractionController;

-- in .m file

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];
}

Send Image - Swift

let urlWhats = "whatsapp://app"
if let urlString = urlWhats.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) {
	if let whatsappURL = NSURL(string: urlString) {
	
		if UIApplication.sharedApplication().canOpenURL(whatsappURL) {
			
			if let image = UIImage(named: "image") {
				if let imageData = UIImageJPEGRepresentation(image, 1.0) {
					let tempFile = NSURL(fileURLWithPath: NSHomeDirectory()).URLByAppendingPathComponent("Documents/whatsAppTmp.wai")
					do {
						try imageData.writeToURL(tempFile, options: .DataWritingAtomic)
						self.documentInteractionController = UIDocumentInteractionController(URL: tempFile)
						self.documentInteractionController.UTI = "net.whatsapp.image"
						self.documentInteractionController.presentOpenInMenuFromRect(CGRectZero, inView: self.view, animated: true)
					} catch {
						print(error)
					}
				}
			}
			
		} else {
			// Cannot open whatsapp
		}
	}
}

> Because a new security feature of iOS 9, you need add this lines on > .plist file: > > LSApplicationQueriesSchemes > > whatsapp > > More information about url sheme: https://developer.apple.com/videos/play/wwdc2015-703/

I did not find a single solution for both. More information on http://www.whatsapp.com/faq/en/iphone/23559013

I made a small project to help some. https://github.com/salesawagner/SharingWhatsApp

Solution 2 - Iphone

It is now possible. Have not tried yet though.

The latest release notes for whatsapp indicate that you can through the share extension:

WhatsApp accepts the following types of content:

  • text (UTI: public.plain-text)

  • photos (UTI: public.image)

  • videos (UTI: public.movie)

  • audio notes and music files (UTI: public.audio)

  • PDF documents (UTI: com.adobe.pdf)

  • contact cards (UTI: public.vcard)

  • web URLs (UTI: public.url)

Solution 3 - Iphone

No this is not possible, whatsapp does not have any public API you can use.

Please note that this answer is correct for 2011 when there was no API for WhatsApp.

Now there is an api available for interacting with WhatsApp: http://www.whatsapp.com/faq/en/iphone/23559013

The Objective-C call to open one of these URLs is as follows:

NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%2C%20World!"];
if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) {
    [[UIApplication sharedApplication] openURL: whatsappURL];
}

Solution 4 - Iphone

This is the correct code for share link to whats app users.

NSString * url = [NSString stringWithFormat:@"http://video...bla..bla.."];
url =    (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef) url, NULL,CFSTR("!*'();:@&=+$,/?%#[]"),kCFStringEncodingUTF8));

  NSString * urlWhats = [NSString stringWithFormat:@"whatsapp://send?text=%@",url];
NSURL * whatsappURL = [NSURL URLWithString:urlWhats];
if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) {
    [[UIApplication sharedApplication] openURL: whatsappURL];
} else {
    // can not share with whats app
}

Solution 5 - Iphone

Simple code and Sample code ;-)

Note:- You can only share text or image, both sharing together in whatsApp is not working from whatsApp side

 /*
    //Share text
    NSString *textToShare = @"Enter your text to be shared";
    NSArray *objectsToShare = @[textToShare];
    
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
    [self presentViewController:activityVC animated:YES completion:nil];
     */
    
    //Share Image
    UIImage * image = [UIImage imageNamed:@"images"];
    NSArray *objectsToShare = @[image];
    
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
    [self presentViewController:activityVC animated:YES completion:nil];

Solution 6 - Iphone

Swift 3 version of Wagner Sales' answer:

let urlWhats = "whatsapp://app"
if let urlString = urlWhats.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) {
  if let whatsappURL = URL(string: urlString) {
    if UIApplication.shared.canOpenURL(whatsappURL) {
      
      if let image = UIImage(named: "image") {
        if let imageData = UIImageJPEGRepresentation(image, 1.0) {
          let tempFile = NSURL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Documents/whatsAppTmp.wai")
          do {
            try imageData.write(to: tempFile!, options: .atomic)
            
            self.documentIC = UIDocumentInteractionController(url: tempFile!)
            self.documentIC.uti = "net.whatsapp.image"
            self.documentIC.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true)
          }
          catch {
            print(error)
          }
        }
      }
      
    } else {
      // Cannot open whatsapp
    }
  }
}

Solution 7 - Iphone

For Swift 4 - Works fine

delclare

var documentInteractionController:UIDocumentInteractionController!

func sharePicture() {
    let urlWhats = "whatsapp://app"
    if let urlString = urlWhats.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) {
        if let whatsappURL = NSURL(string: urlString) {
            
            if UIApplication.shared.canOpenURL(whatsappURL as URL) {
                
                let imgURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
                let fileName = "yourImageName.jpg"
                let fileURL = imgURL.appendingPathComponent(fileName)
                if let image = UIImage(contentsOfFile: fileURL.path) {
                    if let imageData = image.jpegData(compressionQuality: 0.75) {
                        let tempFile = NSURL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Documents/yourImageName.jpg")
                        do {
                            try imageData.write(to: tempFile!, options: .atomicWrite)
                            self.documentInteractionController = UIDocumentInteractionController(url: tempFile!)
                            self.documentInteractionController.uti = "net.whatsapp.image"
                            self.documentInteractionController.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true)
                        } catch {
                            print(error)
                        }
                    }
                }
            } else {
                // Cannot open whatsapp
            }
        }
    }
}

Do not forget to edit the .plist with the following lines

<key>LSApplicationQueriesSchemes</key>
 <array>
  <string>whatsapp</string>
 </array>

Enjoy!!!

Solution 8 - Iphone

I added a Whatsapp Sharer to ShareKit.

Check out here: https://github.com/heringb/ShareKit

Solution 9 - Iphone

WhatsApp provides two ways for your iPhone app to interact with WhatsApp:

  • Through a custom URL scheme
  • Through the iOS Document Interaction API

For more information Visit this link

Thanks.

Solution 10 - Iphone

Yes it's possible :

NSMutableArray *arr = [[NSMutableArray alloc]init];
    NSURL *URL = [NSURL fileURLWithPath:path];
    NSString *textToShare = [NSString stringWithFormat:@"%@ \n",_model.title];
    NSString *SchoolName= [[AppUtility sharedUtilityInstance]getAppConfigInfoByKey:@"SchoolName" SecondKeyorNil:Nil];
    [arr addObject:textToShare];
    [arr addObject:URL];
    [arr addObject:_model.body];
    [arr addObject:SchoolName];
    TTOpenInAppActivity *openInAppActivity = [[TTOpenInAppActivity alloc] initWithView:_parentController.view andRect:((UIButton *)sender).frame];
    
    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:arr applicationActivities:@[openInAppActivity]];

    // Store reference to superview (UIActionSheet) to allow dismissal
    openInAppActivity.superViewController = activityViewController;
    // Show UIActivityViewController
    [_parentController presentViewController:activityViewController animated:YES completion:NULL];

Solution 11 - Iphone

Swift 3 version for sending text:

func shareByWhatsapp(msg:String){
        let urlWhats = "whatsapp://send?text=\(msg)"
        if let urlString = urlWhats.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
            if let whatsappURL = NSURL(string: urlString) {
                if UIApplication.shared.canOpenURL(whatsappURL as URL) {
                    UIApplication.shared.openURL(whatsappURL as URL)
                } else {

                    let alert = UIAlertController(title: NSLocalizedString("Whatsapp not found", comment: "Error message"),
                                                  message: NSLocalizedString("Could not found a installed app 'Whatsapp' to proceed with sharing.", comment: "Error description"),
                                                  preferredStyle: UIAlertControllerStyle.alert)
                    
                    alert.addAction(UIAlertAction(title: NSLocalizedString("Ok", comment: "Alert button"), style: UIAlertActionStyle.default, handler:{ (UIAlertAction)in
                    }))
                    
                    self.present(alert, animated: true, completion:nil)
                    // Cannot open whatsapp
                }
            }
        }
}

Also, you need to add whatsapp to LSApplicationQueriesSchemes in your Info.plist

Solution 12 - Iphone

Swift 4

let urlWhats = "whatsapp://app"
        if let urlString = urlWhats.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed) {
    
            if let whatsappURL = URL(string: urlString) {
                
                if UIApplication.shared.canOpenURL(whatsappURL) {
                    
                        if let imageData = UIImageJPEGRepresentation(image, 1.0) {
                            let tempFile = NSURL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Documents/whatsAppTmp.wai")!
                            do {
                                try imageData.write(to: tempFile, options: .atomic)
                                self.documentController = UIDocumentInteractionController(url: tempFile)
                                self.documentController.uti = "net.whatsapp.image"
                                self.documentController.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true)
                            } catch {
                                print(error)
                            }
                        }
                    
                } else {
                    let ac = UIAlertController(title: "MessageAletTitleText".localized, message: "AppNotFoundToShare".localized, preferredStyle: .alert)
                    ac.addAction(UIAlertAction(title: "OKButtonText".localized, style: .default))
                    present(ac, animated: true)
                    
                    print("Whatsapp isn't installed ")

                    // Cannot open whatsapp
                }
            }
        }

Solution 13 - Iphone

NSString *shareText = @"http:www.google.com";
NSArray *objectsToShare = @[shareText];

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

if (isIphone)
{
    [self presentViewController:activityVC animated:YES completion:nil];
}
else {
    UIPopoverController *popup = [[UIPopoverController alloc]         initWithContentViewController:activityVC];
    [popup presentPopoverFromRect:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/4, 0, 0)inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlbert Arredondo AlfaroView Question on Stackoverflow
Solution 1 - IphoneWagner SalesView Answer on Stackoverflow
Solution 2 - IphoneAdelView Answer on Stackoverflow
Solution 3 - IphonerckoenesView Answer on Stackoverflow
Solution 4 - IphoneDevyani ShindeView Answer on Stackoverflow
Solution 5 - IphoneMehulView Answer on Stackoverflow
Solution 6 - IphoneJoeGalindView Answer on Stackoverflow
Solution 7 - Iphoneoscar castellonView Answer on Stackoverflow
Solution 8 - IphoneBerniView Answer on Stackoverflow
Solution 9 - IphoneHimanshu GargView Answer on Stackoverflow
Solution 10 - IphoneHassan RefaatView Answer on Stackoverflow
Solution 11 - IphonemourodrigoView Answer on Stackoverflow
Solution 12 - IphoneSaranjithView Answer on Stackoverflow
Solution 13 - Iphonesaurabh rathodView Answer on Stackoverflow