Selling Physical GoodsThrough Apps & Other Monetization Strategies (MBL306) | AWS re:Invent 2013

1,251 views

Published on

How to make your app work as hard for you as you’ve worked on it is a common concern for most developers. In this session, learn how to implement monetization technology to help your Android app step up its game regardless of which store customers use to download your apps. This session covers a new API that helps you earn advertising fees for physical goods you sell in the context of your mobile app. The session offers code samples and best practices for bundling physical and digital goods for a seamless buying experience in your game or app. Learn how to implement more traditional monetization technology such as in-app purchasing and display ads.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,251
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
26
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Selling Physical GoodsThrough Apps & Other Monetization Strategies (MBL306) | AWS re:Invent 2013

  1. 1. Taking In-App Purchasing to the Next Level: Selling Physical Goods Through Your App & Other Monetization Strategies David Isbitski, Developer Evangelist Apps and Games November 14, 2013 © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.
  2. 2. Agenda • Introducing the Mobile Associates API – Setting up your App – LinkService – Shopping Service • Mobile Ads API • In-App Purchasing API
  3. 3. Introducing the Mobile Associates API
  4. 4. Amazon Mobile Associates developer.amazon.com/sdk/mobile-associates.html
  5. 5. Amazon Mobile Associates 6% Offer Physical and Digital Items for Sale Earn up to 6% Advertising Fees Leverage Amazon’s Checkout Experience
  6. 6. Incentivize Users with Bundles • • Drive further engagement by tying the purchase of physical products to digital content in your app Upon purchase, you’ll get a receipt to fulfill your users’ digital content Create an In-App Shop • Display products in a customizable in-app storefront • Users can view and buy products from Amazon without leaving your app • Easily populate your storefront by specifying items or using a search term
  7. 7. Sell One or Many Products • Create a button/link to a customizable listing of one or more products – Purchase completed in-app for devices with Amazon Appstore – Purchase linked to Amazon for Google Play devices
  8. 8. Key Benefits of Mobile Associates • Better user experience – Learn more about a product and buy it from the app • Incremental monetization – Complementary to IAP & Mobile Ads – Up to 6% of sales – Wide reach - both Amazon Appstore & Google Play • Easy to integrate – Simple experience that can be integrated quickly – Flexibility to create customized experiences
  9. 9. Amazon Mobile Associates API Features API features available through Amazon and other distribution channels Distribution Channels Feature Product Categories Amazon Appstore for Android Other Android Distribution Channels Direct Linking to Amazon Physical and Digital YES YES In-App Product Detail Page Physical and Digital YES YES In-App Product Preview Popover Physical and Digital YES YES In-App Shopping Experience Physical Only YES NO Digital Bundling (Available with In-App Shopping Experience) Physical Only YES NO Outside of direct linking to Amazon, search is available only if the app is distributed through Amazon Appstore and only physical product results will be returned.
  10. 10. Agenda • Introducing the Mobile Associates API – Setting up your app – LinkService – Shopping Service • Mobile Ads API • In-App Purchasing API
  11. 11. Setting Up Your App Is Easy • • • • • • • • Register Developer Account Fill out Tax Identity Get Application Key Update AndroidManifest Reference Mobile Associates API external jar Export Mobile Associates API Decide on goods to sell (search, asin, etc.) Implement LinkService or ShoppingService
  12. 12. Demo – Setting up your app
  13. 13. Agenda • Introducing the Mobile Associates API – Setting up your app – LinkService – Shopping Service • Mobile Ads API • In-App Purchasing API
  14. 14. LinkService
  15. 15. Direct Linking – Amazon Product Page
  16. 16. Update AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET" />
  17. 17. Initialize the API protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AssociatesAPI.initialize( new AssociatesAPI.Config(APPLICATION_KEY, this)); }
  18. 18. Link to the Amazon Home Page openHomePageButton = (Button)findViewById(R.id.open_home_page_button); openHomePageButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { OpenHomePageRequest request = new OpenHomePageRequest(); try { LinkService linkService = AssociatesAPI.getLinkService(); linkService.openRetailPage(request); } catch (NotInitializedException e) { } } });
  19. 19. Link to an Amazon Search Page String term= ”snake arcade game"; // Search term openSearchPageButton = (Button)findViewById(R.id.open_search_page_button); openSearchPageButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { OpenSearchPageRequest request = new OpenSearchPageRequest(term); try { LinkService linkService = AssociatesAPI.getLinkService(); linkService.openRetailPage(request); } catch (NotInitializedException e) { } } });
  20. 20. Link to an Amazon Product Page String asin = "B00362TQZ4"; openProductPageButton = (Button)findViewById(R.id.open_prod_page_button); openProductPageButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { OpenProductPageRequest request = new OpenProductPageRequest(asin); try { LinkService linkService = AssociatesAPI.getLinkService(); linkService.openRetailPage(request); } catch (NotInitializedException e) { } } });
  21. 21. Agenda • Introducing the Mobile Associates API – Setting up your app – LinkService – Shopping Service • Mobile Ads API • In-App Purchasing API
  22. 22. Demo – Snake Game with LinkService
  23. 23. Agenda • Introducing the Mobile Associates API – Setting up your app – LinkService – ShoppingService • Mobile Ads API • In-App Purchasing API
  24. 24. ShoppingService
  25. 25. Shopping Service
  26. 26. Update AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET" /> <application> ... <meta-data android:name="com.amazon.device.associates.ENABLE_TESTING" android:value="true"/> <receiver android:name="com.amazon.device.associates.ResponseReceiver"> <intent-filter> <action android:name="com.amazon.device.iap.physical.NOTIFY » android:permission="com.amazon.device.iap.physical.Permission.NOTIFY"> </intent-filter> </receiver> ... </application>
  27. 27. Implement the ShoppingListener public class GlobalShoppingListener implements ShoppingListener { private static final GlobalShoppingListener instance = new GlobalShoppingListener(); // Singleton object public static GlobalShoppingListener getInstance() { returninstance; } private static ShoppingListener localListener = null; public void setLocalListener(ShoppingListener l) { localListener = l; } }
  28. 28. Implement the ShoppingListener public void onServiceStatusResponse(ServiceStatusResponse response) { localListener.onServiceStatusResponse(response); } public void onPurchaseResponse(PurchaseResponse response) { localListener.onPurchaseResponse(response); } public void onSearchByIdResponse(SearchByIdResponse response) { localListener.onSearchByIdResponse(response); } public void onSearchResponse(SearchResponse response) { localListener.onSearchResponse(response); } public void onReceiptsResponse(ReceiptsResponse response) { localListener.onReceiptsResponse(response); }
  29. 29. Initialize the API protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AssociatesAPI.initialize( new AssociatesAPI.Config(APPLICATION_KEY, this)); AmazonMAAGlobalShoppingListener globalListener = AmazonMAAGlobalShoppingListener. getInstance(); globalListener.setLocalListener(this); try { AssociatesAPI.getShoppingService().setListener(globalListener); } catch (final NotInitializedException notInitializedException) { } } catch (final IllegalArgumentException illegalArgumentException) { } }
  30. 30. Service Status public void onResume() { super.onResume(); globalListener.setLocalListener(this); try { AssociatesAPI.getShoppingService().getServiceStatus(); } catch (NotInitializedException e) { } catch(final NoListenerException e) { } }
  31. 31. Service Status – User public void onServiceStatusResponse(ServiceStatusResponse response) { UserData userData = response.getUserData(); if (null != userData && null != userData.getUserId()) { userID = userData.getUserId(); userMarketplace = userData.getMarketplace(); appDistributedThruAmazonAppstore = true; } localListener.onServiceStatusResponse(r); }
  32. 32. Service Status – Purchase Experiences public void onServiceStatusResponse(ServiceStatusResponse r) { ... Set<PurchaseExperience> peSet = r.getSupportedPurchaseExperiences(); inAppDetailSupported = peSet.contains(PurchaseExperience.DIRECT_WITH_DETAIL); inAppPreviewSupported = peSet.contains(PurchaseExperience.DIRECT_WITH_PREVIEW); inAppShoppingSupported = peSet.contains(PurchaseExperience.IN_APP); inAppShoppingDigitalBundleSupported = r.canGetReceipts(); searchSupported = r.canSearch(); localListener.onServiceStatusResponse(r); }
  33. 33. Making a Purchase Button purchaseButton = (Button)findViewById(R.id.maaButton); purchaseButton.setOnClickListener(new View.OnClickListener() { public void onClick(final View view) { if (globalListener.isInAppDetailSupported()) { final PurchaseRequest pr = new PurchaseRequest(asin, view); pr.setPurchaseExperience(PurchaseExperience.IN_APP); try { AssociatesAPI.getShoppingService().purchase(pr); } catch (NoListenerException e) { } catch (NotInitializedException e) { } } } });
  34. 34. Making a Purchase public void onPurchaseResponse(PurchaseResponse response) { switch(response.getStatus()) { case SUCCESSFUL: break; case FAILED: break; case NOT_SUPPORTED: break; case INVALID_ID: break; case PENDING: break; } localListener.onPurchaseResponse(response); }
  35. 35. Demo – ShoppingService
  36. 36. Agenda • Introducing the Mobile Associates API – Setting up your app – LinkService – ShoppingService • Mobile Ads API • In-App Purchasing API
  37. 37. Mobile Ads API
  38. 38. Amazon Mobile Ad Network API available for Android running 1.6 and higher Must be available through Amazon first Serves ads to U.S. customers
  39. 39. Tips for Mobile Ads • • • • Place Ads Visibly Use Auto Ad Size (default) Use Multiple Ad Networks for fill rate Refresh Ads every 30–45 seconds
  40. 40. Setting Up an Ad Is Easy • • • • • • • • Register Developer Account Fill out Tax Identity Get Application Key Update AndroidManifest Reference Ads external jar Export Ads API Implement Ad Activity and Ad Layout Optionally set up Ad Targets
  41. 41. Setting Up an Ad … private AdLayout adView = null; private void initializeAmazonMobileAds() { AdRegistration.setAppKey(AMAZON_APPLICATION_KEY); AdRegistration.enableLogging(true); AdRegistration.enableTesting(true); this.adView = new AdLayout(this); this.adView.setTimeout(20000); // 20 seconds this.adView = (AdLayout) findViewById(R.id.adview); this.adView.setListener(new AdListener() { … loadAd(); private boolean loadAd() { return this.adView.loadAd(getAdTargetingOptions()); } ...
  42. 42. Snake Game with Ads
  43. 43. Demo – Snake Game with Ads
  44. 44. Agenda • Introducing the Mobile Associates API – Setting up your app – LinkService – ShoppingService • Mobile Ads API • In-App Purchasing API
  45. 45. In-App Purchasing API
  46. 46. In-App Purchase Adoption Is Rising IAP Conversion Rate INDEX: Average = 100% Note: Conversion Rate is measured by the Number of IAP Customers / Total App Customers Source: Amazon Appstore, July 2013
  47. 47. What Are Customers Buying? Consumables Entitlements Subscriptions
  48. 48. IAP Tips • Number of Sessions vs. Session Length • Build a core audience • Design High Value Items
  49. 49. Implementing In-App Purchasing All IAP Activities are Performed Asynchronously Purchasing Observer Your App Purchasing Manager Amazon Appstore Client
  50. 50. Setting Up IAP Is Easy • • • • • • • • Register Developer Account Fill out Tax Identity Get Application Key Update AndroidManifest Reference IAP external jar Export IAP API Set up IAP items on developer portal Implement ResponseReceiver and PurchaseObservers
  51. 51. Implementing In-App Purchasing • • • • • • Register ResponseReceiver Implement PurchasingObserver Register PurchasingObserver Initiate In-App Purchase Handle Purchase Notification Test Your Implementation
  52. 52. Implementing In-App Purchasing Test Your Implementation with SDK Tester
  53. 53. Snake Game with IAP
  54. 54. Demo – Snake Game with IAP
  55. 55. Agenda • Introducing the Mobile Associates API – Setting up your app – LinkService – ShoppingService • Mobile Ads API • In-App Purchasing API
  56. 56. Summary
  57. 57. Login with Amazon Freemium Amazon Device Messaging Android App Distribution Kindle Fire Mobile Associates Leaderboards Direct to Account Indie Storefront In-App Purchasing Achievements PC / Mac Downloads A/B/n Testing Amazon Coins AWS Amazon GameCircle Engagement Reports Mobile Ads Paymium Whispersync for Games Cross Platform
  58. 58. Summary • Mobile Associates is the next step in monetization • Monetizing through In-App Purchases is about building relationships • Freemium can be part of a successful business model • Use Mobile Ads to monetize from your non-paying users • Use multiple networks to get higher Ad fill rate • Design High Value Items
  59. 59. Learn More • Developer Portal: developer.amazon.com/appstore • Blog: developer.amazon.com/blog • Follow us: @AmazonAppDev @TheDaveDev
  60. 60. Please give us your feedback on this presentation MBL 306 As a thank you, we will select prize winners daily for completed surveys!

×