Contextual Series: Gathering User Information

This is the third part of my contextual series which will focus on a few technical details on how to gather user information.  I cannot stress this enough, be wary of the user’s privacy.  Make sure that anything you do is covered under your privacy policy and that the data you gather is done with the user’s consent.  As soon as a user considers their experience with your product as being creepy, you have lost the user.

Social networks like Facebook provide us with a wealth of data.  Social networks are a great way to get a user to consent to data without having to get them to fill in forms.  The information these social networks provide to you are bound by terms of service, terms of user and of course a privacy policy. Make sure you keep these in mind while thinking of ways you can use the data.

Before considering social networks as your primary source for data, keep in mind that with the modern web and native applications, your product may already have access to a lot of data that may be useful to you, especially regarding the user’s location. More specific information on a user, like age and gender will require input methods. If the user’s social connections are important to your product or you don’t want to submit users to numerous input fields social networks would be important.

Data already available to you

If you are working with server technologies in general you will have access to the user’s IP address. Using services like GeoIP you can easily get location information on a user. Keep in mind that the accuracy of these solutions aren’t completely accurate as they often point the user to a hub more if you use the Long and Lat. However if all you need is the country, state or city the user lives in, chances are this will be a great solution.  If we look at the code to do this in PHP, it is really quite simple.


$userDetails = geoip_record_by_name ( $_SERVER['REMOTE_ADDR'] );
echo "Country: ".$userDetails['country']."<br/>";
echo "Country Code: ".$userDetails['country_code']."<br/>";
echo "State: ".$userDetails['region']."<br/>";
echo "City: ".$userDetails['city']."<br/>";
echo "Long: ".$userDetails['longitude']."<br/>";
echo "Lat ".$userDetails['latitude']."<br/>";

Other important pieces of information you should gather are the user’s locale along with their browser.  While the browser itself may not be useful in many cases, it can be in some if you choose for whatever reason to block access from some websites. As for the locale this is becoming an important piece of information products will want to have on their products. More and more are products looking to localize their game, app or service.

bell_langselect

Bell appears to have ditched their initial landing experience. But users are still given this popup.

With the information you get from browsers and IP addresses, landing pages should be left for the history books. Using the information you have choose the location and language for the user with the option for them to change it at any time.

Mobile devices, like on the web also have access to the same information but will require to use some additional tools.  In some cases, you may even be able to use services, like Flurry, to get best guess demographic information on your users.

Requesting Additional Information

Additional information is sometimes at your fingertips and doesn’t require much for the user to provide the details to you.  As I mentioned earlier you can get the user’s location based on their IP. That location isn’t usually accurate and usually isn’t reflective of the actual user location. But if you are building a product that is consumed on the web, you have HTML5’s navigator feature that can be of great help!

if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function(position){
alert("Success!! You are located at: "+position);
},
function(msg){
alert("Error. "+msg);
}
);
} else {
alert("Error. "+msg);
}

The end result is a page that requests your physical location. Upon accepting, the page has your location and it can be used to for example place you on a map. Here is an example found here.

The web page is requesting to find my physical location.

The web page is requesting to find my physical location.

Permission granted to the requesting page. They can now find me.

Permission granted to the requesting page. They can now find me.

On mobile devices, you have similar options available to you where you can request information from the user. Whether it would be access to their current location, their contact list, or any of their other sensors.

Chances are that you won’t get to know much about who the user is and what they like based on the information we’ve gathered so far.  If there is such a need, this is where integrating with social networks like Facebook becomes important.  I won’t dive into the Facebook integration here. That process can be quite lengthy to write even though the user flow is relatively simple. Here’s a summary of the steps you’ll take to get it working:

  1. Choose the SDK for your development environment: iOS, Android, Javacript or others.
  2. Integrate the SDK into your app
  3. Read the instructions on integrating the Facebook login
  4. Choose the information you need and request permission from users
  5. Keep in mind Facebook’s best practices while integrating login

When requesting information from a user on Facebook, ask for the bare minimum on the initial installation. You want to reduce the amount of friction and barrier to entry. If the user is asked to provide a lot of information without really knowing what the product is, chances are they will hit cancel and move on.  By requesting the bare minimum for the user to login and start using your product, you can request further permissions at a later point. For example, there is no need to ask the user to post to their wall upon login. You can request this permission later in their experience, when they find the true value of your product.

Information Overload

So far we’ve found that getting information from a user can be simple and in many cases non-invasive. It is important that you mention in your privacy policy what information you are gathering and what you intend to do with the information. There are some out there, like myself, who like to understand what is happening with our data.  I don’t often have a problem handing it out either, unless your product looks sketchy.

You may not always get the information you need through all these available services and sometimes you need to take the old fashioned route forcing the user to fill in forms. If you need to do so, make the experience easy for the user without making it seem like a chore.  If the user happens to see the form has 20 fields, you may have a significant amount of churn as a result. You may find far better success by breaking up your 20 inputs into multiple steps or asking some of the questions later in the user’s product experience.

With each app’s needs being completely different, it is important to listen to your users and review your analytics often.  Login and registration has low conversation rates in many products. This is because users don’t see the value in the product. We can’t all product viral hits like Candy Crush that gets people to blindly install their games because people are talking about it every day.  User experience and keeping the user happy is crucial to your success.