Skip to main content

Complete (working) code to verify an Android app user phone number through SMS

Update from Thursday September 14th 2017: 
The very same day I posted this (the day before yesterday), I realized that it looked like Google had just made it effectively obsolete 
 
 
I thought that at least I could claim that I chose a very demanded functionality to blog about, since Google decided to add a new API to provide this very same service.
Even the names are quite similar, I called it "SMS Verifier" and they call it "SMS Retriever".
But after looking into this new Google Services API, I found out that it requires to use a paid third-party service such as Twilio... very disappointing!

So my original post (which follows below) is still relevant after all, since it allows you to verify the user's phone number for free. 

Original post: Tuesday September 12th 2017
It was about time for me to give back to the open source community, so I have just pushed the complete (working) code to verify the user's phone number from within an Android app to Github.

When I googled this functionality (before deciding to write the code myself), I just found few code snippets such as this one, and I also realised that there is a company trying to monetize it through a pay-per-use web API. 

But why would you need to verify the user's phone number?
Well, because I think the phone number is probably the best user identifier you can use for your mobile app. 
I believe it is better than asking the user to create yet another user name (or email account) and password, or allow them to authenticate using Facebook or any other social network (not everybody has a Facebook account but obviously everybody who owns a phone has a SIM card, and  hence, a phone number).

Even the product owner of Skype admitted it to me while in a tech talk at the Microsoft offices in Prague, when I asked how come WhatsApp became much more popular than Skype on mobile devices when the latter had a huge advantage since it already had the biggest share of the interpersonal communication market on PC before smart phones became mainstream.
WhatsApp registration and login was (ans still is) much simpler than Skype's, because it uses the user's phone number as identifier.
How many Skype accounts do you have? Or better, how many Skype accounts have you created? I must have created half a dozen myself, most of the people just create a new account when they forget or lose their password.
But with the phone number is a different story, most of the people just have one phone number at a time.

And why do you need to use SMS?
Because the same way a computer connected to the internet does not know her public IP address, a mobile device does not know his telephone number, only the network operator knows it, so we need to use SMS to verify that the phone number entered by the user is really theirs.

So what does the code do
Well, better than explain it with words, just have look at the following diagram

But better, have a look to the code.
I followed the MVC model, so there are 3 main parent packages.
The model classes do not talk to any outer application classes.
The controller classes just talk to the model classes.  
The view classes just talk to the controller classes.  

The code seems to be working fine, but please note that I just pushed to the Github repository the files which I modified while coding this PoC app, so there are many files (mainly resource files) which are missing in the repo but they are simply the default files which you get when creating a new project using Android Studio.

Comments

  1. Its an incredible joy perusing your post. It's brimming with data I am searching for and I want to post a remark that "The substance of your post is marvelous" Great work.
    android app development courses in chennai

    ReplyDelete

Post a Comment

Popular posts from this blog

Using Apache Kafka to implement event-driven microservices

When talking about microservices architecture, most people think of a network of stateless services which communicate through HTTP (one may call it RESTful or not, depending on how much of a nitpicker one is).

But there is another way, which may be more suitable depending on the use case at hand.
I am talking about event-driven microservices, where in addition to the classic request-response pattern, services publish messages which represent events (facts) and subscribe to topics (or queues depending on the terminology used) to receive events/messages.

To fully understand and embrace this new software design paradigm is not straight-forward but it is totally worth it (at least looking into it).
There are several interconnected concepts which need to be explored in order to discover the advantages of event-driven design and the evolutionary path which led to it, for example:
Log (including log-structured storage engine and write-ahead log)Materialized ViewEvent SourcingCommand Query Respons…

Shared Ledger Simulator

I have been interested in the shared/distributed ledger technology (a.k.a. block chain, a.k.a. the magic behind cryptocurrencies) for more than a year already but recently I had finally put real time and effort into it.

And since I believe that the best way to understand something is to get your hands dirty, that is what I have done, after I got a grasp of the core principles (or that is what I thought back then), I decided to code my own shared ledger simulator.

Initially, I also considered to look into the main existing code bases (e.g., the source code of the main/official Bitcoin client/miner or Ethereum's) since they are open source, but seeing code like thisput me off... That file is 3229 lines big!!! Plus it is written in C++.
Do not get me wrong, I truly believe Satoshi Nakamoto (i.e., whoever hides behind that name) is a genius and also a great software developer, but he/she/they for sure did not have readability as their main priority.

I also noticed that some other people h…

Vert.x microservices: an (opinionated) application

First of all, sorry for the tautology in the title, a library can be either opinionated or un-opinionated (such as Vert.x is), but an application can only be opinionated.
However, I decided to include "opinionated" to help getting my point across even though is redundant.
The Motivation  I am a big fan of Vert.x and the official documentation is quite good, yet it is not straight-forward to understand how it works and how to use it.
There are a lot of blogs and articles describing Vert.x terminology and its concurrency model.
There are also tons of "Hello World" Vert.x applications on Github, and the rest seem to be just variations of the already typical "Web chat application using Vert.x".
On top of that, many of them are outdated (using AngularJS instead of Angular2+, for example).

The only two exceptions which I found are:
vertx-microservices-workshop: a demo application by the Vert.x development team.
ngrx-realtime-app: proof of concept application focu…