Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Engage and retain users in the mobile world


Published on

"Engage and retain users in the mobile world" by Matteo Bonifazi
App stores are growing day by day and millions of apps have been downloaded by users every day. Crafting an awesome mobile app does not mean having a great success in the market. It becomes crucial for app success to make your app engaging so that users who have installed actually use it. With this talk, we are diving into several techniques, like App Indexing and App Invites, that help make the mobile app a more useful and embedded part of the user's experience.

Published in: Mobile
  • Be the first to comment

  • Be the first to like this

Engage and retain users in the mobile world

  1. 1. Engage and retain users in the mobile world Matteo Bonifazi ROME 18-19 MARCH 2016
  2. 2. Who I am? +Matteo Bonifazi Android Google Developer Expert Member of GDG Rome @mbonifazi matteobonifazi[at]gmail[dot]com
  3. 3. Do you need any Android book? Sviluppare applicazioni per Android in sette giorni Android Programmazione Avanzata
  4. 4. Contents ● Goat Checker story ● User acquisition ● App Invites ● App usage ● App Indexing API
  5. 5. Goat Checker story For a great app, all we need is a great idea!!!
  6. 6. Where can we find a good idea? Goat Checker story
  7. 7. Goat Checker story What is the best scored Android question?
  8. 8. Goat Checker story THE IDEA Understand if Android user is a goat or not
  9. 9. After the idea, let’s start programming Goat Checker story
  10. 10. Goat Checker story Nobody cares to know if he/she is a goat or not
  11. 11. Goat Checker story
  12. 12. 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
  13. 13. Implement invitation from scratch App Invites
  14. 14. 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
  15. 15. App Invites App Invites widget makes easy for your users to send invites
  16. 16. App Invites Send actionable cards with Install button
  17. 17. App Invites Personalized onboard flows to offer discount offer or content
  18. 18. App Invites
  19. 19. App Invites classpath '' apply plugin: ' <meta-data android:name="" android:value="@integer/google_play_services_version" /> AndroidManifest.xml build.gradle compile '' project configuration google-services.json
  20. 20. 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();
  21. 21. 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();
  22. 22. 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)); } }
  23. 23. App Invites boolean autoLaunchDeepLink = true; AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink) .setResultCallback(new ResultCallback<AppInviteInvitationResult>(){ @Override public void onResult(AppInviteInvitationResult result) { Log.d(TAG, "getInvitation:onResult:+result.getStatus()); }});
  24. 24. Let’s start integrating App Invites Goat Checker story
  25. 25. Goat Checker story Number of downloads
  26. 26. Goat Checker story App usage is still flat
  27. 27. Average app user has 36 apps installed App usage
  28. 28. App usage 26% of installed smartphone apps are used daily. 1 in 4 apps are never used. Most installed apps are not used often
  29. 29. App usage 38% of app users are likely to download an app when it’s required to complete a purchase, half of which would uninstall it after purchase is complete. Consumers often abandon apps immediately after a download.
  30. 30. App Indexing
  31. 31. App Indexing Engage your users with install buttons for your app in the Google search result
  32. 32. App Indexing Re-engage users through Google Search App autocompletions
  33. 33. App Indexing <activity android:name=".GoatActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="" android:scheme="http" /> </intent-filter> </activity>
  34. 34. 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 } }
  35. 35. App Indexing android-app://dekra.goatchecker/http/ Protocol Package ID PathScheme App Indexing Markup
  36. 36. App Indexing <link rel=“alternate” href=“android-app://dekra.goatchecker/http/” /> Approve request on Webmaster Tools - <html> <head> ... <link rel="alternate" href="android-app://dekra. goatchecker/http/" /> ... </head> <body> … </body> In the web page
  37. 37. App Indexing compile '' build.gradle Uri APP_URI = Uri.parse ("android-app://dekra.goatchecker/http/"); Uri WEB_URL = Uri.parse(""); URI definition mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); Google Client
  38. 38. App Indexing mUrl = ""; 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(); }
  39. 39. 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(); }
  40. 40. App Indexing App Indexing example
  41. 41. iOS App Invites ● App Indexing - from iOS 9 ● ● com/library/ios/documentation/General/Conceptual/AppSearch/ iOS Search API - from iOS 9
  42. 42. Questions?
  43. 43. Thanks! ROME 18-19 MARCH 2016 +Matteo Bonifazi - @mbonifazi matteobonifazi[at]gmail[dot]com All pictures belong to their respective authors Discover today if you are a goat