Build and Run Android from AOSP Source Code to a Nexus 7

Build and Run Android from Source Code to a Nexus 7

Before we go deep into the technical details of building Android from AOSP and installing it on actual hardware, let’s look at a true not very true scenario.

Building a Connected Android-based Bus Stop Display

Here’s a situation we’ve all been in: imagine you’re running late for an important meeting and you’re waiting nervously at the bus stop. Twenty minutes have gone by and there’s still no trace of it. You’re starting to get edgy.

Continue reading

Is It Possible to Use Android OS On Your Custom Device?

Use Android OS On Your Custom Device

Over the last few years we’ve been working on custom Android ROM projects for the hotel industry, where we’ve created a highly customizable level of system services and applications for Android devices.

We’ve also talked to CTOs and Product/Project Managers at various hardware companies and startups who are in the process of building their own custom devices for consumer or enterprise markets.

They are all looking for Android customization solutions, e.g., option to restrict access to system buttons, remove or lock system menus, add geo-fencing tracking or organize over-the-air (OTA) updates, along with the ability to monitor a fleet of Android devices.

We’ve realized that Android would be a good solution for a range of devices like ATMs, vending machines, automated bus-stops with a ticketing system, in-car systems, and even household robots.

But most companies don’t know where to begin.

What type of Android should you select? What are the restrictions and limitations of Android? How do you select hardware that works best with Android and minimize the dependency on closed-source proprietary drivers that will be outdated quickly?

How do you ensure that you build an Android that passes the Android Compatibility Tests? What Google services should you use and do you need them at all? Is it possible to organize the process so as to minimize the effort spent for major Android platform updates that come every year?

So in this article we are going to discuss the high-level considerations about using Android for your custom device and what type of Android you can choose.

Continue reading

How To Use a Landing Page To Promote Your App

How To Use a Landing Page To Promote Your App

What is a Landing page?

I’m pretty sure you’ve heard about them, but have you ever created one for your business? If not, why?

A landing page is a standalone page that visitors land on after clicking on an online marketing call-to-action. Each landing is designed for a specific marketing campaign. The purpose of a successful landing page is to grow your audience and convert visitors to customers, perhaps encouraging them to download the app, or purchase your product.

Almost Every Landing Page Consists Of These Elements:

  1. Your Unique Selling Proposition (USP)
    1. The main headline
    2. A supporting headline
    3. A reinforcement statement
    4. A closing argument
  2. The hero shot (images/video showing context of use)
  3. The benefits of your offering
    1. A bullet point list summary of benefits
    2. Benefits and features in detail
  4. Proof
    1. Social proof (I’ll have what she’s having)
    2. Trust indicators
  5. A single conversion goal – your Call-To-Action (CTA) (with or without a form)

Continue reading

Parse Migration: How to Change Cloud Code to Be Compatible with Parse Server

Migration to Parse Server brought not only infrastructure related issues but also cloud code compatibility ones. We described challenges we faced during refactoring and prepared the detailed checklist for you.

Special thank you to our iOS Engineer Igor for his significant contributions to this post.

Bye-bye cloud Parse, hello self-hosted one!

When we started writing on Parse, we expected that at some point, we may change backend provider. We don’t perceive Parse as long-term solution, but rather as a convenient tool to get things done. We have not taken fully to the backends on Parse. Nevertheless, we now have a dozen applications that use Parse.

We build our iOS applications in such a way as that if you suddenly needed to change the backend environment, you wouldn’t significantly modify the app’s code. For this purpose, we hide a networking layer deep inside the app, covering PFObjects with our classes (on ObjC) or protocols (on Swift).

The business logic is mainly implemented in the server-side code (using the Cloud functions and Cloud jobs) rather than coded inside the app.

When Facebook announced Parse shutdown on Jan. 2017 our first intent was to migrate backend code to the Parse Server instead of writing it from scratch using another stack.

Continue reading

Top 6 Most Popular Machine Learning API’s

Have you heard of machine learning? If you’ve ever used the internet before, your answer is probably yes. Seen as a buzzword by many, machine learning—together with big data, artificial intelligence, and virtual reality—is currently one of the most widely discussed concepts in the technology community.

Buzzword or not, machine learning has long since become something we use every day, one way or another. It’s working behind the scenes in most of our mobile apps, under the hood of most websites we visit, and is employed by the brands and service providers with whom we interact.

Continue reading

How We Migrated to Parse Server, Adventures With Heroku and Why We Broke Up

Parse made us to look for alternatives & Parse Open Server sounded like a good option. This almost ended up as a failure and we had to go curve road with Heroku.

Special thank you to our iOS Engineers Igor and Vitalii for their significant contributions to this post.

Well, we were using Parse for many years and had lots of apps (for both development and production) running on Parse. Each app uses Parse at 100%: database storage, file storage, custom Cloud Code, push notifications, app configurations, A/B testing and so on. On average, each of our apps has 4.5K lines of js/python server code.

How We migrated to Parse Open Server Part 1

Of course, we were somewhat frustrated after the Parse shutdown and began to look for a way out: maybe you read our ‘Life after Parse: what to do next’ post. Instead of thoroughly rewriting our backend or hosting on another MBaaS platform, we decide to migrate to Parse Open Server.

Why not Firebase or any other MBaaS? These services look promising, however using them means putting ourselves in a vendor lock-in again. Of course, there is also the added inconvenience of having to rewrite your cloud code and setup environment again.

So, the next stage of migration was deploying Parse Open Server on Heroku.

Continue reading

Use Android Studio Like a Pro!

Use Android Studio Like a Pro

This is a follow-up to the recent MadCode webinar “Use Android Studio Like a Pro”, where Michael and Nikolay (Android Engineers at Stanfy), shared their advice on how to get the most out of Android Studio by using codebase navigation and a set of handy shortcuts. Let the main Android app development tool make you more productive!

Presentation Assistant

To demonstrate which keyboard shortcuts are being used throughout this article, we are using the Presentation Assistant plugin:

Presentation Assistant in Android Studio

Presentation Assistant in Android Studio

Continue reading

7 Basic Tips on Launching a Mobile App

7 Basic Tips on Launching Your Mobile App

You have built your app. It is nice and shiny and you and your team did everything to make it useful and exciting as much as you could. You love everything about it. What’s next?

The reality.

No one will download it unless you are very, very loud. Even if people struggle to find your app the chances they’ll discover it organically are close to zero. So to get your first 1000 installs (or more) you need to hustle.

Continue reading

Do You Really Need a Spec for Your App?

Why You Don't Need A Specification Document Before Talking To A Dev Team

Photo credit

“Specification merely refers to the act of ‘To state explicitly or in detail’ or ‘to be Specific” (From Wikipedia, the free encyclopedia).

Is it really needed in real life, can the work be done after just a briefing?

– You are smart, you can figure out what to do.
– Oh, yes, I’m smart but not a mind-reader.

Continue reading

Advanced Natural Language Processing Tools for Bot Makers – LUIS, Wit.ai, Api.ai and others

Recent announcements of a bot framework for Skype from Microsoft and Messaging Platform for Messenger from Facebook just heated up the space around chat as a new platform that goes after mobile apps. More and more developers are coming up with an idea to make their own bot for Slack, Telegram, Skype, Kik, Messenger and, probably, several other platforms that might pop up in the next couple of months.

NLP for bots

Thus, we have a rising interest in the yet to be explored field of making smart bots with AI capabilities and conversational human-computer interaction as the main paradigm.

In order to build a good conversational interface we need to look beyond a simple search by a substring or regular expressions that we usually use while dealing with strings.

The task of understanding spoken language and free text conversation in plain English is not as straightforward as might seem from the first look.

Below we look at possible dialogue structure, how to understand the concepts behind advanced natural language processing tools, and look into details on the platforms that we can use for our bots today through the API – LUIS from Microsoft, Wit.ai from Facebook, Api.ai from Assistant team, Watson from IBM and Alexa Skill Set from Amazon.

A Dialogue Example

Let’s look at the ways we can ask a system to find ‘asian food near me.’ The variety of search phrases and utterances could look similar to this:

  • Asian food near me please
  • Food delivery place not far from here
  • Thai restaurants in my neighborhood
  • Indian restaurant nearby
  • Sushi express places please
  • Places with asian cuisine
  • Etc.

But if we are curious enough we can also ask Google Keyword Planner for other related ideas and extend our list by about 800 phrases related to the search term “asian food near me”. We use Keyword Planner for such tasks here because it is a great source of aggregated searches that users regularly do in Google.

Google Keywords ideas to for extending the bot dictionary

Google Keywords ideas to for extending the bot dictionary

Of course, not all of this is directly related to the original search intent, asian food near me. But given the results we see, they are still highly relevant to the service that we want to provide to the users; let’s say, for example, a curated list of Asian Food places.

So therefore we can try to steer the conversation towards the desired ‘asian food’ topic with the help of questions and suggestions from the bot.

Consider the next dialogue examples and a way to direct the conversation:

Examples of dialogues with a conversational bot

Examples of dialogues with a conversational bot

From the example above we can see how broad the variations of utterances can be that user can use for the intent to find food.

Also notice how users can say ‘Yes‘ and ‘No‘ during the dialogue for confirmation or decline of the suggested option.

Yes/No answers variations

Yes/No answers variations

As we just saw, we need some way to understand the language and conversational phrases that are more sophisticated than just a simple text search by phrase or even regular expressions.

Continue reading

User Retention In Mobile Apps: Best Practices

user retention in mobile apps best practices

Building a good mobile app is much more than actually writing the code and publishing the resulting product to an app store. Rather than that, it’s a nearly endless process of iterating and evolving your app, so that it would meet your customers’ requirements at any given time.

We can email you this article right now, just click here.

In today’s economy, app creators are engaged in the tightest competition possible for users’ attention, and for a place at their home screens. With that in mind, there’s no wonder that the user retention rate has become equally, if not more important in the world of mobile than the number of the app’s actual downloads.

Continue reading

Upgrading Approaches to the Secure Mobile Architectures

That’s the follow-up to the talk I first gave at #appbuilders16 conference in Zurich, Switzerland.

We’ll talk a bit about the most undervalued part of mobile security: ideas and concepts. Another name for this talk could be “Everything Will Be Broken,” but what should we do?

Intro: this is the picture

Let’s take a look at the problem domain. What’s on the landscape? The picture shows our typical infrastructure—an iOS app talking over some network connection to a server where we have some custom logic serving our tasks.

Typical infrastructure of iOS apps

Typical infrastructure of iOS apps

So, what do we care about while we’re making apps? User experience, fast & continuous delivery, and getting things done. And Swift, of course. Swift is very exciting!

What don’t we care about? Server crap. Everything not iOS is magical and unknown :)

Imagine you put on the Security Wizard Hat. What will you see?

Continue reading

App Engagement & Growth Are The Core Metrics You Should Focus On

 

App-Engagement-&-Growth-Are-The-Core-Metrics-You-Should-Focus-On-2

Over the past few decades a significant portion of the economy has shifted. Once companies and services were geared toward enticing you out of your money. Today what many are after is your time. Instagram is free, and so are Snapchat, Facebook, and YouTube! While you’re not paying with your money, you’re paying with an even more valuable asset, time, or as we call it “attention”.

The economic and business model of these apps is pretty simple: they get most of their revenue from paid advertising. The more time you’re spending on a platform, the more ads on this platform you’ll see, and the more money advertisers will spend.

Our current version of the internet lives and breathes off a currency of human attention.

Jesse Weaver

Continue reading

How to Monitor Mobile App Traffic With Sniffers

Are your QA engineers into monitoring apps’ traffic? Really, are they? The answer I usually hear is “why would I be?” Of course, this is irrelevant if your application works without access to a server and is purely offline. On the other hand, if your mobile app has network interactions, it is essential to make sure everything works smoothly there. Unfortunately, this part of testing is often used in web development but rarely used during mobile app development.

When I talk about analyzing app traffic I usually mean working with sniffers (that come in a form of proxy). These are special software that is intended to help you see network interactions in the form of HTTP or HTTPS requests and responses. While monitoring insecure HTTP traffic is relatively easy, working with HTTPS requires some additional actions (I’ll tell you about this in detail later).

How to Monitor Mobile App Traffic With Sniffers

Table of contents:

  1. Approaches to monitoring mobile application traffic
  2. Setting up your workflow
  3. How-to install a certificate on an Android
  4. How-to install a certificate on an iOS
  5. Working with proxy
  6. Optimizing your workflow with traffic sniffer
  7. When one proxy is not enough
  8. Summary

Continue reading

Migrating From Objective-C to Swift

Swift is becoming more and more popular today and has even become open-source! Personally I’ve been following its evolution since the very first version was released and already have two working projects in production. I’m very glad that iOS developers have such a great opportunity to use this modern and powerful language in their toolkit, but such a rush to new and not fully tested tools can sometimes lead to unforeseen bugs and time-consuming problems that no one has ever (or very rarely) faced. This might be one of the reasons people are scared of using new and fresh instruments.

Nevertheless there are different ways to try out new things. You can first play around with pet-projects or start adding new features to existing projects using new tools.  I strongly believe that Swift is the choice of the future, though Objective-C will probably stay with us for a very long time.

objectivec-swift-migration-2sm

To convince more of you to try Swift and save time by learning from mistakes I’ve made, I would like to share my experience of switching to this language after using good old Objective-C and discuss the differences between them.

Notice: This post was written while mostly using Swift 2.1 with Xcode 7.2 and migrating to Swift 2.2 in the end (no critical changes actually) :)

Continue reading