engage and retain users in the android world - droidcon italy 2016

Download Engage and retain users in the android world - Droidcon Italy 2016

Post on 16-Apr-2017

684 views

Category:

Mobile

0 download

Embed Size (px)

TRANSCRIPT

  • Engage & retain users in the Android world

    Matteo Bonifazi

    TURIN 07-08 APRIL 2016

  • Who I am?

    +Matteo Bonifazi

    Android Google Developer Expert

    Member of GDG Rome

    @mbonifazi

    matteobonifazi[at]gmail[dot]com

  • Do you need any Android book?

    Sviluppare applicazioni per Android in sette giorni

    AndroidProgrammazione Avanzata

    http://www.edizionilswr.it/libri/sviluppare-applicazioni-per-android-2/http://www.edizionilswr.it/libri/sviluppare-applicazioni-per-android-2/http://www.edizionilswr.it/libri/sviluppare-applicazioni-per-android-2/http://www.edizionilswr.it/libri/sviluppare-applicazioni-per-android-2/http://www.edizionilswr.it/libri/sviluppare-applicazioni-per-android-2/http://www.edizionilswr.it/libri/android-2/http://www.edizionilswr.it/libri/android-2/http://www.edizionilswr.it/libri/android-2/http://www.edizionilswr.it/libri/android-2/

  • Contents

    Goat Checker story

    User acquisition

    App Invites

    App usage

    App Indexing API

  • Goat Checker story

    For a great app, all we need is a great idea!!!

  • Where can we find a good idea?

    Goat Checker story

  • Goat Checker storyWhat is the best scored Android question?

    http://developer.android.com/reference/android/os/UserManager.html

    http://developer.android.com/reference/android/os/UserManager.htmlhttp://developer.android.com/reference/android/os/UserManager.html

  • Goat Checker story

    THE IDEA

    Understand if Android user is a

    goat or not

  • After the idea, lets start programming

    Goat Checker story

  • Goat Checker story

    Nobody cares to know if he/she is

    a goat or not

  • Goat Checker story

  • User acquisition

    How people become aware about an app?

    32% family, friends and collegues

    13% TV

    17% search engines 14% company website

    24% app store

    stats from https://think.storage.googleapis.com/docs/mobile-app-marketing-insights.pdf

    https://think.storage.googleapis.com/docs/mobile-app-marketing-insights.pdf

  • Implement invitation from scratch

    App Invites

  • App Invites

    App Invites from Google

    App content sharing

    Personalized onboarding flows

    Compatible for both Android & iOS

    Sharing & installation stats are fully

    integrated with Google Analytics

  • App Invites

    App Invites widget makes easy for your users to send invites

  • App Invites

    Send actionable cards with Install button

  • App Invites

    Personalized onboard flows to offer discount offer or content

  • App Invites

  • App Invites

    classpath 'com.google.gms:google-services:2.0.0-alpha5'

    apply plugin: 'com.google.gms.google-services

    AndroidManifest.xml

    build.gradle

    compile 'com.google.android.gms:play-services-appinvite:8.4.0'

    project configuration

    https://developers.google.com/mobile/add?platform=android&cntapi=appinvite

    google-services.json

  • App Invites

    public void sendInvite() {

    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title)

    .setMessage(getString(R.string.invitation_message)) .setDeepLink(Uri.parse(getString(R.string.invitation_deep_link))) .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))

    .setCallToActionText(getString(R.string.invitation_cta)).build();

    startActivityForResult(intent, REQUEST_INVITE);

    }

    mClient = new GoogleApiClient.Builder(this).addApi(AppInvite.API).build();

    100 max message length

  • App Invites

    public void sendInvite() {

    Intent intent = new AppInviteInvitation.IntentBuilder("Send Invitation")

    .setEmailHtmlContent(""

    + "GOAT Checker Invitation ")

    .setEmailSubject("XYZ Offer").build();

    startActivityForResult(intent, REQUEST_INVITE);

    }

    mClient = new GoogleApiClient.Builder(this).addApi(AppInvite.API).build();

    50 KB max HTML CONTENT

  • App Invites

    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))

    ...

    .setOtherPlatformsTargetApplication(

    AppInviteInvitation.IntentBuilder.PlatformMode.PROJECT_PLATFORM_IOS,

    getString(R.string.ios_app_client_id))

    ...

    .build();

    No Windows Phone, sorry :)

  • App Invites

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_INVITE && resultCode == RESULT_OK ) {

    String[] ids = AppInviteInvitation.getInvitationIds(resultCode,data);

    Log.d(TAG, getString(R.string.sent_invitations_fmt, ids.length));

    }

    }

  • App Invites

    boolean autoLaunchDeepLink = true;

    AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)

    .setResultCallback(new ResultCallback(){

    @Override

    public void onResult(AppInviteInvitationResult result) {

    Log.d(TAG, "getInvitation:onResult:+result.getStatus());

    }});

  • Lets start integrating App Invites

    Goat Checker story

  • Goat Checker story

    Number of downloads

  • Goat Checker story

    App usage is still flat

  • Average app user has 36 apps installed

    App usage

  • App usage

    26% of installed smartphone apps are

    used daily

    1 in 4 apps are never used

    Most installed apps are not often used

  • App usage

    38% of app users are likely to download an app when its required to complete a

    purchase, half of which would uninstall it after purchase is complete.

    Consumers often abandon apps immediately after a download.

  • App Indexing

    Promote the app in the search results

  • App Indexing

    Engage your users with install buttons for your app in the Google search result

  • App Indexing

    Re-engage users through Google Search App autocompletions

  • App Indexing

    Better poised in Now on Tap

  • App Indexing

  • App Indexing

    protected void onNewIntent(Intent intent) {

    String action = intent.getAction();

    String data = intent.getDataString();

    if (Intent.ACTION_VIEW.equals(action) && data != null) {

    String productId = data.substring(data.lastIndexOf("/") + 1);

    Uri contentUri = GoatChecker.CONTENT_URI.buildUpon()

    .appendPath(productId).build();

    //Handle content

    }

    }

  • App Indexing

    android-app://dekra.goatchecker/http/goatchecker.webs.com

    Protocol Package ID PathScheme

    App Indexing Markup

    http custom

  • App Indexing

    Approve request on Webmaster Tools - https://www.google.com/webmasters/tools

    ... ...

    In the web page

  • App Indexing

    compile 'com.google.android.gms:play-services-appindexing:8.4.0'

    build.gradle

    Uri APP_URI = Uri.parse("android-app://dekra.goatchecker/http/goatchecker.webs.com");

    Uri WEB_URL = Uri.parse("http://goatchecker.webs.com/");

    URI definition

    mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();

    Google Client

  • App Indexing

    mUrl = "http://goatchecker.webs.com/";

    mTitle = "Are you a goat?";

    public Action getAction() {

    Thing object = new Thing.Builder()

    .setName(mTitle).setUrl(mUrl).build();

    return new Action.Builder(Action.TYPE_VIEW).setObject(object)

    .setActionStatus(Action.STATUS_TYPE_COMPLETED).build();

    }

  • App Indexing

    @Override

    public void onStart() {

    super.onStart();

    mClient.connect();

    AppIndex.AppIndexApi.start(mClient, getAction());

    }

    @Override

    public void onStop() {

    AppIndex.AppIndexApi.end(mClient, getAction());

    mClient.disconnect();

    super.onStop();

    }

  • App Indexing

    App Indexing example https://developers.google.com/app-indexing/partners/case-studies

    https://developers.google.com/app-indexing/partners/case-studies

  • Thank you for your attention

    TURIN 07-08 MARCH 2016

    +Matteo Bonifazi - @mbonifazi

    matteobonifazi[at]gmail[dot]com

    http://androidinsettegiorni.wordpress.comAll pictures belong to their respective authors

    Discover today if you are a goat

    http://androidinsettegiorni.wordpress.comhttp://androidinsettegiorni.wordpress.com