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 android world - Droidcon Italy 2016

906 views

Published on

Making your app engaging, so that users who have installed it actually use it, is crucial to your app’s success. In this speech, we explore a number of Android and Google features you can take advantage of that help make your app a more useful and embedded part of the user’s Android experience.

Published in: Mobile
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Engage & retain users in the Android world Matteo Bonifazi TURIN 07-08 APRIL 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? http://developer.android.com/reference/android/os/UserManager.html
  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 https://think.storage.googleapis.com/docs/mobile-app-marketing-insights.pdf
  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 'com.google.gms:google-services:2.0.0-alpha5' apply plugin: 'com.google.gms.google-services <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 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
  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(); 100 max message length
  21. 21. App Invites public void sendInvite() { Intent intent = new AppInviteInvitation.IntentBuilder("Send Invitation") .setEmailHtmlContent("<html><body>" + "<a href="%%APPINVITE_LINK_PLACEHOLDER%%">GOAT Checker Invitation</a> </body></html>") .setEmailSubject("XYZ Offer").build(); startActivityForResult(intent, REQUEST_INVITE); } mClient = new GoogleApiClient.Builder(this).addApi(AppInvite.API).build(); 50 KB max HTML CONTENT
  22. 22. 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 :)
  23. 23. 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)); } }
  24. 24. 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()); }});
  25. 25. Let’s start integrating App Invites Goat Checker story
  26. 26. Goat Checker story Number of downloads
  27. 27. Goat Checker story App usage is still flat
  28. 28. Average app user has 36 apps installed App usage
  29. 29. App usage 26% of installed smartphone apps are used daily 1 in 4 apps are never used Most installed apps are not often used
  30. 30. 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.
  31. 31. App Indexing Promote the app in the search results
  32. 32. App Indexing Engage your users with install buttons for your app in the Google search result
  33. 33. App Indexing Re-engage users through Google Search App autocompletions
  34. 34. App Indexing Better poised in Now on Tap
  35. 35. 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="goatchecker.webs.com/" android:scheme="http" /> </intent-filter> </activity>
  36. 36. 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 } }
  37. 37. App Indexing android-app://dekra.goatchecker/http/goatchecker.webs.com Protocol Package ID PathScheme App Indexing Markup ● http ● custom
  38. 38. App Indexing <link rel=“alternate” href=“android-app://dekra.goatchecker/http/goatchecker.webs.com” /> Approve request on Webmaster Tools - https://www.google.com/webmasters/tools <html> <head> ... <link rel="alternate" href="android-app://dekra. goatchecker/http/goatchecker.webs.com" /> ... </head> <body> … </body> In the web page
  39. 39. 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
  40. 40. 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(); }
  41. 41. 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(); }
  42. 42. App Indexing App Indexing example https://developers.google.com/app-indexing/partners/case-studies
  43. 43. Thank you for your attention TURIN 07-08 MARCH 2016 +Matteo Bonifazi - @mbonifazi matteobonifazi[at]gmail[dot]com http://androidinsettegiorni.wordpress.com All pictures belong to their respective authors Discover today if you are a goat

×