WhatsApp Encrypted: What should you do next?

We all know, WhatsApp, an Instant Messaging app has revolutionized one-to-one and group chat since its inception in January 2010. Soon, multiple Start-ups and SME’s understood its potential and made it an imperative part of their everyday functions. Organizations started utilizing it for chat/messaging and in increasing customer engagement. IP messaging has become the new norm for real-time customer support, product/brand promotion, announcements and offers business intelligence through analytics.

In the past, WhatsApp said that they would work on tools to help enterprises interact with their customer but with their recent announcement, it was told that they will protect their users’ privacy with an end to end encryption on all messages exchanged through their platform. This, in my opinion, is a clear signal for businesses to find alternatives of WhatsApp.

Why you must be thinking?

  • WhatsApp rulebook says “it is likely to ban your accounts if you: Send messages to people who don’t have your number in their phone book – Start many chats to people who have never written to you before”.
  • WhatsApp co-founder Jan Koum has clearly stated that WhatsApp is going to remain a standalone, person-to-person messaging app with no intrusions. He wrote this in a blog post after the Facebook acquisition. So it is likely that it may not open its API which can be used by developers.

A startup iCliniq, an online doctor consultation platform started in 2011 had to migrate from WhatsApp, as WhatsApp has blocked their account in the mid way of their expansion and they had to scout for alternatives.
(Source: http://yourstory.com/2015/07/icliniq-whatsapp/)
It was quite evident that there was a big challenge in deciphering out the right distributing channel. While migrating they lost users as WhatsApp still remain a default messaging application for millions.

But it leaves us thoughts to ponder upon:-

  • Should a startup depend on other platforms?
  • Should a start-up focus on multiple distribution channels?
  • Should instant messaging be an inbuilt option of an application?

Let us try and find the answers!

  • This one is easy as we always remember.
  • Business School professors always ask its budding managers to focus on “Omni-Channel Approach”. So, one should neither depend on Facebook, Twitter, WhatsApp, Telegram etc but have multi-channel sales approach that provides the user with an integrated user experience.

  • With the rise of white label and fully customizable native chat/messaging SDK‘s; any business can now easily integrate WhatsApp like real-time communication on their website and mobile applications in just a few minutes.

So, now if you are thinking about adding chat/messaging to your mobile apps and website, you may consider using Applozic a feature-as-a-Service for complete communication solution. Think about any type of conversation 1-to-1, 1-to-many, group chat, context based chat etc, you have it all at one place. It is a platform that offers application to user messaging, cross application communication, SMS and Email fallback support along with Dashboard option that has rich insights and analytics.

Applozic Android/iOS Chat SDK Review by FinancesOnline

We are happy to have a very positive Applozic review from FinancesOnline in which they awarded us with a Great User Experience Award for their IT management category and their Rising Star Award for 2016.

Recently we announced our availability for Enterprises “Messaging as a Service Platform for Enterprises/Developers” and we have already won 5 hearts with millions of user engaged on our platform. We strongly believe that such adoption and reviews will only help us to enhance and expand these essential relationships with our customers and the developers community in coming days.

Contacts UI, Contacts Framework and create VCard(VCF) in Objective-C

From iOS 9+ version AddressBookUI.framework and Addressbook.framework becomes deprecated. Apple introduced ContactUI.framework and Contact.framework with enhancements over AddressBookUI.framework and Addressbook.framework. In this blog we will talk about how to use these two new frameworks and export VCard. Let’s start picking contact from phone contacts and access basic information of that person.Screen Shot 2016-05-13 at 2.50.41 PM

Step 1. Create new Xcode project name “ContactDemo” and import Contacts.framework and ContactsUI.framework as shown in picture.

Screen Shot 2016-05-13 at 2.41.17 PM

Step 2. In project add Button, ImageView and 3 labels as shown in picture :

Screen Shot 2016-05-13 at 3.23.29 AM

Step 3. Create outlets of button action, imageview and labels in respective view controller as :

@property (weak, nonatomic) IBOutlet UIImageView *personImage;
@property (weak, nonatomic) IBOutlet UILabel *personName;
@property (weak, nonatomic) IBOutlet UILabel *emailId;
@property (weak, nonatomic) IBOutlet UILabel *phoneNo;

- (IBAction)selectAction:(id)sender;

Step 4. Add delegate “CNContactPickerDelegate" to viewcontroller.

Step 5. Add delegate method :

- (void) contactPicker:(CNContactPickerViewController *)picker
didSelectContact:(CNContact *)contact {
[self getContactDetails:contact];

This delegate method will return contact in the form of CNContact object which will be further processed in local method

-(void)getContactDetails:(CNContact *)contactObject {

NSLog(@"NAME PREFIX :: %@",contactObject.namePrefix);
NSLog(@"NAME SUFFIX :: %@",contactObject.nameSuffix);
NSLog(@"FAMILY NAME :: %@",contactObject.familyName);
NSLog(@"GIVEN NAME :: %@",contactObject.givenName);
NSLog(@"MIDDLE NAME :: %@",contactObject.middleName);

NSString * fullName = [NSString stringWithFormat:@"%@ %@",contactObject.givenName,contactObject.familyName];
[self.personName setText:fullName];

if(contactObject.imageData) {
NSData * imageData = (NSData *)contactObject.imageData;
UIImage * contactImage = [[UIImage alloc] initWithData:imageData];
[self.personImage setImage:contactImage];

NSString * phone = @"";
NSString * userPHONE_NO = @"";
for(CNLabeledValue * phonelabel in contactObject.phoneNumbers) {
CNPhoneNumber * phoneNo = phonelabel.value;
phone = [phoneNo stringValue];
if (phone) {
userPHONE_NO = phone;

NSString * email = @"";
NSString * userEMAIL_ID = @"";
for(CNLabeledValue * emaillabel in contactObject.emailAddresses) {
email = emaillabel.value;
if (email) {
userEMAIL_ID = email;

NSLog(@"PHONE NO :: %@",userPHONE_NO);
NSLog(@"EMAIL ID :: %@",userEMAIL_ID);
[self.emailId setText:userEMAIL_ID];
[self.phoneNo setText:userPHONE_NO];

Step 6. Create “CNContactPickerViewController” class object and register its delegate in button IBAction method :

- (IBAction) selectAction:(id)sender {
CNContactPickerViewController *contactPicker = [CNContactPickerViewController new];
contactPicker.delegate = self;
[self presentViewController:contactPicker animated:YES completion:nil];

“[self presentViewController:contactPicker animated:YES completion:nil];” will present view of contact list.

Step 7. Run project

A . Main View

Screen Shot 2016-05-13 at 2.38.04 AM


B. On Tapping “Select Contact” button CNContactPickerViewController will open as shown in picture :

Screen Shot 2016-05-13 at 2.39.11 AM


C. Pick one contact and view will dismiss and you will get details of that contact as shown in picture :

Screen Shot 2016-05-13 at 2.39.25 AM

Earlier we have write permission code to access contacts but now it implicitly grants permission for accessing contacts. With this framework we can also generate VCard(VCF) and share among other platforms. Here is the steps to create VCard.

Step 1. Pick contact from CNContactPickerViewController and you will get CNContact Object in delegate as mention above.

Step 2. Save contact in document directory. As data is stored in NSData form so to convert contact to NSData
use “CNContactVCardSerialization” class that represents VCard in NSData format.

- (NSString *) saveContactToDocumentDirectory:(CNContact *)contact {

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,     NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString * VCardPath = [documentsDirectory stringByAppendingString:@"/VCard.vcf"];

NSArray *array = [[NSArray alloc] initWithObjects:contact, nil];

NSError *error;
NSData *data = [CNContactVCardSerialization dataWithContacts:array error:&error];
[data writeToFile:VCardPath atomically:YES];

return VCardPath;

CNContactVCardSerialization class method “dataWithContacts:error:” takes array of contact objects(CNContact class Object).

“saveContactToDocumentDirectory” method will return the file path of Vcard. With File path you can export contact anywhere you want.

If you are still using iOS<9 Here is the sample code  VCard Using AddressBook