SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Presented by Max Stottrop

IN-APP PURCHASE
What I will cover today
•   Introduction
•   Proccess of implementing In-App Purchase
•   StoreKit Framework
•   Business & Tips
With In-App Purchase you can…
•   … embed a store directly to your application
•   It uses the Storekit Framework.
In-App Purchase Types

•   Non-Consumable


•   Consumable


•   Auto-renewable subscription


•   Free subscription


•   Non-renewable subscription
Walkthrough




 Create     Fetch     Purchase   Restore
Products   Products   Products   Products
Implementing In-App Purchase



               Setup        Sell
Determine                             Verify     Restore
            Products in   Products
 Product                             Product     previous
              iTunes        with
Offerings                            Receipts   Purchases
             Connect      StoreKit
Products
•   Supported types:
    •   Content
    •   Functionality
    •   Services
    •   Subscriptions
•   Each product has a unique productIdentifier.
•   No real-world goods!
iTunes Connect Setup

•   Setup your Products
•   Create a Test User
    •   One per country
•   Sign out of your Store Settings
    •   Don‘t enter your Test User‘s Ids in the Settings
Store Kit Framework
         Validate In-App Purchase Access


           Retrieving product information


              Show the Store Interface


                Make the purchase


                Process Transaction


              Make the feature avaible


                 Finish Transaction


                 Verify the receipts


            Restore previous Purchases
Validate In-App Purchase Acces

•   Validate In-App Purchase Acces
•   Payment Queue class method canMakePurchase
Determine sellable products

•   Load Product IDs
•   Use SKProductsRequest to determine the sellable subset of the IDs


    NSSet* products = [NSSet setWithObject: @”productID1”, @“productID2“, nil];
    SKProductsRequest *request= [[SKProductsRequest alloc]
    initWithProductIdentifiers: products];
    [productRequest start];


    (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:
    (SKProductsResponse *)response {
                    response.invalidProductsIdentifiers == nonsellable;
                    response.products == sellable;
Show Store
•   UITableView Power?




    (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:
    (SKProductsResponse *)response {
                    for(SKProducts* aProduct in response.products)
                    cell.textLabel.text = aProduct.localizedTitle;
                    cell.textLabel.description = aProduct.localizedDescription;
                    cell.textLabel.extra = aProduct.price;
    }
Request payment

 •   SKPayment Class
     •   Create payment object
     •   Add it to the queue
     •   Observe the payment queue




 SKPayment *payRequest = [SKPayment paymentWithObject:selected];

 [[SKPaymentQueue defaultQueue] addPayment:payRequest];

 - (void)addTransactionObserver:(id <SKPaymentTransactionObserver>) observer
Complete Transaction
  •   updatedTransaction method
      •   SKPaymentTransactionStatePurchased = Succes
      •   SKPaymentTransactionStateRestored = Succes
  •   finishTransaction method



-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray
*)transactions {
   if (atransaction.transactionState == SKPaymentTransactionStatePurchased ) {
          //Unlock content
          [queue finishTransaction:aTransaction]; }
}
Collecting Payments
Feature Delivery

•   Self contained


•   Downloadable
Downloadable Content




             User sends               iPhone
   Fetch                    Apple                  Server     Apple
              payment                  sends
 Products                  returns                verifies    sends
             request to              receipt to
from Apple                receipts                receipt.   product
               Apple                   server
In-App Content



                User purchases
Embed content                      Application
                  content and
   in your                          unlocks
                 Apple verifies
 application.                     functionality.
                   payment.
Remember Product Purchase

  •   Use NSUserDefaults class and preference file
      •   unsecure, easy to „hack“.
      •   saves to Application Support directory
  •   Use Keychain API
      •   Secure
      •   Saved to app Keychain Slice




[[NSUserDefaults standartUserDefaults] setObject:bought forKey:@“boughtItems“];


SecItemAdd ((CFDictionaryRef) boughtItems, NULL);
Verify Product Purchase




   Own          iTunes
                          Validation
  Server        Server
Verify Product Purchase


              Post Base64
  Check                          Server
                 encoded
Transaction                     verifies    App unlocks
               transaction
  receipt                     transaction     content
              to the server
Verify Product Purchase

•   Send JSON object with encoded transaction receipt
    •       {“receipt - data“ : “7b4187e54587ert27e2“}
•   Post to iTunes verification service
    •       http://buy.itunes.apple.com/verifyReceipt
    •       http://sandbox.itunes.apple.com/verifyReceipt
•   Get a JSON object
    •       {“status“ : 0, “receipt“ : { … } }
        •       0 == Succes,
        •       everything else == BAD PIRATES AT WORK
Restore Previous Purchases
•   Free Subscription, Auto-
    Renewing Subscription, Non-
    Consumable items
•   [[SKPaymentQueue
    defaultQueue]
    restoreCompletedTransactions]
•   Subscription & Consumable need
    own mechanism



                                Proccess      „Already
     Customer
                                Succesfull   purchased“
      signs in
                                Payment        Dialog
Business Model

• Which Model to choose?
• What to content sell?
  • Game
  • Everything else

                           Extra Levels
                           Social content
                           In-game Currency
                           Optional Content
                           Money for time/Time
Tips

•   Product Ids are unique across apps!
•   Built Store with sellable products only!
•   Use MBBase64 category from the CocoaDev website
•   Auto-renewing Subscription only for apps with dynamic content.
•   Only show the button when Internet Connection is avaible.
•   To test In-App Purchase you must add the Binary - Reject it!
•   After you added your Products, wait a bit!

• MKStoreKit: Open Source helper.
ONE LAST THING
StoreFront
StoreFront

•   Works via JSON to display Content, Downloads, Updates.
•   Allows to sell free content.
•   No additional server costs/bandwidth.
•   Restoring Auto-renewable Subscriptions - YAY
Q &A
THANKS!
Links

•   Receipt validation: http://bit.ly/zMuTKk, http://bit.ly/we2Pt0 & http://bit.ly/AB09Sv
•   Apple: http://bit.ly/xy7aGV, http://bit.ly/wyLec6 & http://bit.ly/weMm3p
•   MKStoreKit: https://github.com/MugunthKumar/MKStoreKit
•   StoreFront: http://urbanairship.com/docs/inapp_client.html
•   Dr. Touch's Purchase Button: http://bit.ly/zxGjcY

Weitere ähnliche Inhalte

Was ist angesagt?

How To Increase Followers On Instagram | 20 Tips To Increase Instagram Follow...
How To Increase Followers On Instagram | 20 Tips To Increase Instagram Follow...How To Increase Followers On Instagram | 20 Tips To Increase Instagram Follow...
How To Increase Followers On Instagram | 20 Tips To Increase Instagram Follow...
Simplilearn
 
Whatsapp in marketing
Whatsapp in marketing Whatsapp in marketing
Whatsapp in marketing
umamahes2994
 

Was ist angesagt? (20)

Social Media Content Strategy
Social Media Content StrategySocial Media Content Strategy
Social Media Content Strategy
 
TikTok Marketing: The Next Biggest Social Media Platform
TikTok Marketing: The Next Biggest Social Media PlatformTikTok Marketing: The Next Biggest Social Media Platform
TikTok Marketing: The Next Biggest Social Media Platform
 
HootsuiteSocialMediaTrends2023_Report_en.pdf
HootsuiteSocialMediaTrends2023_Report_en.pdfHootsuiteSocialMediaTrends2023_Report_en.pdf
HootsuiteSocialMediaTrends2023_Report_en.pdf
 
Web3 Development Report Q3 2022 - Alchemy
Web3 Development Report Q3 2022 - AlchemyWeb3 Development Report Q3 2022 - Alchemy
Web3 Development Report Q3 2022 - Alchemy
 
Lightning Web Component in Salesforce
Lightning Web Component in SalesforceLightning Web Component in Salesforce
Lightning Web Component in Salesforce
 
Influencer Marketing 101
Influencer Marketing 101Influencer Marketing 101
Influencer Marketing 101
 
Instagram slideshare
Instagram slideshareInstagram slideshare
Instagram slideshare
 
Whatsapp Official Business
Whatsapp Official BusinessWhatsapp Official Business
Whatsapp Official Business
 
NYU Talk
NYU TalkNYU Talk
NYU Talk
 
Twitter Best Practices 2023.pdf
Twitter Best Practices 2023.pdfTwitter Best Practices 2023.pdf
Twitter Best Practices 2023.pdf
 
Digital Marketing Trends 2023: How to Come Out on Top?
Digital Marketing Trends 2023: How to Come Out on Top?Digital Marketing Trends 2023: How to Come Out on Top?
Digital Marketing Trends 2023: How to Come Out on Top?
 
Introduction of Instagram inc. (power point presentation)
 Introduction of Instagram inc. (power point presentation) Introduction of Instagram inc. (power point presentation)
Introduction of Instagram inc. (power point presentation)
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - Introduction
 
Snapchat Advertising
Snapchat Advertising Snapchat Advertising
Snapchat Advertising
 
Analytics and AI based Retention in e-commerce
Analytics and AI based Retention in e-commerceAnalytics and AI based Retention in e-commerce
Analytics and AI based Retention in e-commerce
 
Zoho CRM Integration With Zoho Projects
Zoho CRM Integration With Zoho Projects Zoho CRM Integration With Zoho Projects
Zoho CRM Integration With Zoho Projects
 
Dynamic input tables lwc vs aura vs. visualforce
Dynamic input tables  lwc vs aura vs. visualforceDynamic input tables  lwc vs aura vs. visualforce
Dynamic input tables lwc vs aura vs. visualforce
 
Instagram
InstagramInstagram
Instagram
 
How To Increase Followers On Instagram | 20 Tips To Increase Instagram Follow...
How To Increase Followers On Instagram | 20 Tips To Increase Instagram Follow...How To Increase Followers On Instagram | 20 Tips To Increase Instagram Follow...
How To Increase Followers On Instagram | 20 Tips To Increase Instagram Follow...
 
Whatsapp in marketing
Whatsapp in marketing Whatsapp in marketing
Whatsapp in marketing
 

Andere mochten auch (6)

TizenLog.pl: In App Purchase
TizenLog.pl: In App PurchaseTizenLog.pl: In App Purchase
TizenLog.pl: In App Purchase
 
The Power Of In-App Purchases
The Power Of In-App PurchasesThe Power Of In-App Purchases
The Power Of In-App Purchases
 
IAP introduce@myBook
IAP introduce@myBook IAP introduce@myBook
IAP introduce@myBook
 
IAP auto renewable in practice
IAP auto renewable  in practiceIAP auto renewable  in practice
IAP auto renewable in practice
 
SwiftyJSON 慘痛經驗
SwiftyJSON   慘痛經驗SwiftyJSON   慘痛經驗
SwiftyJSON 慘痛經驗
 
Newsstand
NewsstandNewsstand
Newsstand
 

Ähnlich wie In-App Purchase

Android In-app Billing @ Droidcon Murcia
Android In-app Billing @ Droidcon MurciaAndroid In-app Billing @ Droidcon Murcia
Android In-app Billing @ Droidcon Murcia
Robot Media
 
Android in-app billing @ Google DevFest Barcelona 2012
Android in-app billing @ Google DevFest Barcelona 2012Android in-app billing @ Google DevFest Barcelona 2012
Android in-app billing @ Google DevFest Barcelona 2012
Robot Media
 
INTEGRATED SHOPPING ASSISTANCE WITH FREDGE AND MOBILE
INTEGRATED SHOPPING ASSISTANCE WITH FREDGE AND MOBILEINTEGRATED SHOPPING ASSISTANCE WITH FREDGE AND MOBILE
INTEGRATED SHOPPING ASSISTANCE WITH FREDGE AND MOBILE
Rajesh Roky
 
Monetize your app_with_google_subscriptions_v3_services_intuit
Monetize your app_with_google_subscriptions_v3_services_intuitMonetize your app_with_google_subscriptions_v3_services_intuit
Monetize your app_with_google_subscriptions_v3_services_intuit
Manohar Mahapatra
 
Android In-App Billing @ Droidcon 2011
Android In-App Billing @ Droidcon 2011Android In-App Billing @ Droidcon 2011
Android In-App Billing @ Droidcon 2011
Robot Media
 
Android In-App Billing @ Barcelona GTUG
Android In-App Billing @ Barcelona GTUGAndroid In-App Billing @ Barcelona GTUG
Android In-App Billing @ Barcelona GTUG
Robot Media
 
Codestrong 2012 breakout session how to develop your own modules
Codestrong 2012 breakout session   how to develop your own modulesCodestrong 2012 breakout session   how to develop your own modules
Codestrong 2012 breakout session how to develop your own modules
Axway Appcelerator
 

Ähnlich wie In-App Purchase (20)

In App Purchases
In  App  PurchasesIn  App  Purchases
In App Purchases
 
Testing In App Billing
Testing In App BillingTesting In App Billing
Testing In App Billing
 
Android In-app Billing @ Droidcon Murcia
Android In-app Billing @ Droidcon MurciaAndroid In-app Billing @ Droidcon Murcia
Android In-app Billing @ Droidcon Murcia
 
Android in-app billing @ Google DevFest Barcelona 2012
Android in-app billing @ Google DevFest Barcelona 2012Android in-app billing @ Google DevFest Barcelona 2012
Android in-app billing @ Google DevFest Barcelona 2012
 
App Store Subscriptions - Condensed Edition
App Store Subscriptions - Condensed EditionApp Store Subscriptions - Condensed Edition
App Store Subscriptions - Condensed Edition
 
INTEGRATED SHOPPING ASSISTANCE WITH FREDGE AND MOBILE
INTEGRATED SHOPPING ASSISTANCE WITH FREDGE AND MOBILEINTEGRATED SHOPPING ASSISTANCE WITH FREDGE AND MOBILE
INTEGRATED SHOPPING ASSISTANCE WITH FREDGE AND MOBILE
 
Monetize your app_with_google_subscriptions_v3_services_intuit
Monetize your app_with_google_subscriptions_v3_services_intuitMonetize your app_with_google_subscriptions_v3_services_intuit
Monetize your app_with_google_subscriptions_v3_services_intuit
 
Oracle iprocurement-101018113112-phpapp01
Oracle iprocurement-101018113112-phpapp01Oracle iprocurement-101018113112-phpapp01
Oracle iprocurement-101018113112-phpapp01
 
Android In-App Billing @ Droidcon 2011
Android In-App Billing @ Droidcon 2011Android In-App Billing @ Droidcon 2011
Android In-App Billing @ Droidcon 2011
 
Extending Sitecore Commerce Connect
Extending Sitecore Commerce ConnectExtending Sitecore Commerce Connect
Extending Sitecore Commerce Connect
 
Extending Sitecore Commerce Connect
Extending Sitecore Commerce ConnectExtending Sitecore Commerce Connect
Extending Sitecore Commerce Connect
 
How to migrate an application in IBM APIc, and preserve its client credential
How to migrate an application in IBM APIc, and preserve its client credentialHow to migrate an application in IBM APIc, and preserve its client credential
How to migrate an application in IBM APIc, and preserve its client credential
 
Sug bangalore - sitecore commerce introduction
Sug bangalore - sitecore commerce introductionSug bangalore - sitecore commerce introduction
Sug bangalore - sitecore commerce introduction
 
SPUnite17 Timer Jobs Event Handlers
SPUnite17 Timer Jobs Event HandlersSPUnite17 Timer Jobs Event Handlers
SPUnite17 Timer Jobs Event Handlers
 
Android In-App Billing @ Barcelona GTUG
Android In-App Billing @ Barcelona GTUGAndroid In-App Billing @ Barcelona GTUG
Android In-App Billing @ Barcelona GTUG
 
Creating a Symfony Ecommerce App
Creating a Symfony Ecommerce AppCreating a Symfony Ecommerce App
Creating a Symfony Ecommerce App
 
An Introduction to Drupal Commerce & Real World Examples
An Introduction to Drupal Commerce & Real World ExamplesAn Introduction to Drupal Commerce & Real World Examples
An Introduction to Drupal Commerce & Real World Examples
 
iOS In-App-Purchase verifying receipt locally in Swift
iOS In-App-Purchase verifying receipt locally in SwiftiOS In-App-Purchase verifying receipt locally in Swift
iOS In-App-Purchase verifying receipt locally in Swift
 
Codestrong 2012 breakout session how to develop your own modules
Codestrong 2012 breakout session   how to develop your own modulesCodestrong 2012 breakout session   how to develop your own modules
Codestrong 2012 breakout session how to develop your own modules
 
Introduction to Module Development with Appcelerator Titanium
Introduction to Module Development with Appcelerator TitaniumIntroduction to Module Development with Appcelerator Titanium
Introduction to Module Development with Appcelerator Titanium
 

Kürzlich hochgeladen

young call girls in Mahavir Nagar 🔝 9953056974 🔝 Delhi escort Service
young call girls in Mahavir Nagar 🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Mahavir Nagar 🔝 9953056974 🔝 Delhi escort Service
young call girls in Mahavir Nagar 🔝 9953056974 🔝 Delhi escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
VIP Call Girl Amritsar 7001035870 Enjoy Call Girls With Our Escorts
VIP Call Girl Amritsar 7001035870 Enjoy Call Girls With Our EscortsVIP Call Girl Amritsar 7001035870 Enjoy Call Girls With Our Escorts
VIP Call Girl Amritsar 7001035870 Enjoy Call Girls With Our Escorts
sonatiwari757
 
Russian Call Girls Rohini Sector 3 💓 Delhi 9999965857 @Sabina Modi VVIP MODEL...
Russian Call Girls Rohini Sector 3 💓 Delhi 9999965857 @Sabina Modi VVIP MODEL...Russian Call Girls Rohini Sector 3 💓 Delhi 9999965857 @Sabina Modi VVIP MODEL...
Russian Call Girls Rohini Sector 3 💓 Delhi 9999965857 @Sabina Modi VVIP MODEL...
Call Girls In Delhi Whatsup 9873940964 Enjoy Unlimited Pleasure
 
Rohini Sector 15 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 15 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 15 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 15 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Call Girls In Delhi Whatsup 9873940964 Enjoy Unlimited Pleasure
 
Sensual Moments: +91 9999965857 Independent Call Girls Noida Delhi {{ Monika}...
Sensual Moments: +91 9999965857 Independent Call Girls Noida Delhi {{ Monika}...Sensual Moments: +91 9999965857 Independent Call Girls Noida Delhi {{ Monika}...
Sensual Moments: +91 9999965857 Independent Call Girls Noida Delhi {{ Monika}...
Call Girls In Delhi Whatsup 9873940964 Enjoy Unlimited Pleasure
 
Editing progress 20th march.docxxxxxxxxx
Editing progress 20th march.docxxxxxxxxxEditing progress 20th march.docxxxxxxxxx
Editing progress 20th march.docxxxxxxxxx
MollyBrown86
 
slideshare Call girls Noida Escorts 9999965857 henakhan
slideshare Call girls Noida Escorts 9999965857 henakhanslideshare Call girls Noida Escorts 9999965857 henakhan
slideshare Call girls Noida Escorts 9999965857 henakhan
hanshkumar9870
 
Top Rated Call Girls In Podanur 📱 {7001035870} VIP Escorts Podanur
Top Rated Call Girls In Podanur 📱 {7001035870} VIP Escorts PodanurTop Rated Call Girls In Podanur 📱 {7001035870} VIP Escorts Podanur
Top Rated Call Girls In Podanur 📱 {7001035870} VIP Escorts Podanur
dharasingh5698
 
Corporate Presentation Probe May 2024.pdf
Corporate Presentation Probe May 2024.pdfCorporate Presentation Probe May 2024.pdf
Corporate Presentation Probe May 2024.pdf
Probe Gold
 
Call Girls In Amritsar 💯Call Us 🔝 76967 34778🔝 💃 Independent Escort In Amritsar
Call Girls In Amritsar 💯Call Us 🔝 76967 34778🔝 💃 Independent Escort In AmritsarCall Girls In Amritsar 💯Call Us 🔝 76967 34778🔝 💃 Independent Escort In Amritsar
Call Girls In Amritsar 💯Call Us 🔝 76967 34778🔝 💃 Independent Escort In Amritsar
only4webmaster01
 

Kürzlich hochgeladen (20)

young call girls in Mahavir Nagar 🔝 9953056974 🔝 Delhi escort Service
young call girls in Mahavir Nagar 🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Mahavir Nagar 🔝 9953056974 🔝 Delhi escort Service
young call girls in Mahavir Nagar 🔝 9953056974 🔝 Delhi escort Service
 
VIP Call Girl Amritsar 7001035870 Enjoy Call Girls With Our Escorts
VIP Call Girl Amritsar 7001035870 Enjoy Call Girls With Our EscortsVIP Call Girl Amritsar 7001035870 Enjoy Call Girls With Our Escorts
VIP Call Girl Amritsar 7001035870 Enjoy Call Girls With Our Escorts
 
Russian Call Girls Rohini Sector 3 💓 Delhi 9999965857 @Sabina Modi VVIP MODEL...
Russian Call Girls Rohini Sector 3 💓 Delhi 9999965857 @Sabina Modi VVIP MODEL...Russian Call Girls Rohini Sector 3 💓 Delhi 9999965857 @Sabina Modi VVIP MODEL...
Russian Call Girls Rohini Sector 3 💓 Delhi 9999965857 @Sabina Modi VVIP MODEL...
 
VVIP Pune Call Girls Handewadi WhatSapp Number 8005736733 With Elite Staff An...
VVIP Pune Call Girls Handewadi WhatSapp Number 8005736733 With Elite Staff An...VVIP Pune Call Girls Handewadi WhatSapp Number 8005736733 With Elite Staff An...
VVIP Pune Call Girls Handewadi WhatSapp Number 8005736733 With Elite Staff An...
 
Rohini Sector 15 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 15 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 15 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 15 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Sensual Moments: +91 9999965857 Independent Call Girls Noida Delhi {{ Monika}...
Sensual Moments: +91 9999965857 Independent Call Girls Noida Delhi {{ Monika}...Sensual Moments: +91 9999965857 Independent Call Girls Noida Delhi {{ Monika}...
Sensual Moments: +91 9999965857 Independent Call Girls Noida Delhi {{ Monika}...
 
VVIP Pune Call Girls Sopan Baug WhatSapp Number 8005736733 With Elite Staff A...
VVIP Pune Call Girls Sopan Baug WhatSapp Number 8005736733 With Elite Staff A...VVIP Pune Call Girls Sopan Baug WhatSapp Number 8005736733 With Elite Staff A...
VVIP Pune Call Girls Sopan Baug WhatSapp Number 8005736733 With Elite Staff A...
 
(INDIRA) Call Girl Kashmir Call Now 8617697112 Kashmir Escorts 24x7
(INDIRA) Call Girl Kashmir Call Now 8617697112 Kashmir Escorts 24x7(INDIRA) Call Girl Kashmir Call Now 8617697112 Kashmir Escorts 24x7
(INDIRA) Call Girl Kashmir Call Now 8617697112 Kashmir Escorts 24x7
 
Call Girls in Friends Colony 9711199171 Delhi Enjoy Call Girls With Our Escorts
Call Girls in Friends Colony 9711199171 Delhi Enjoy Call Girls With Our EscortsCall Girls in Friends Colony 9711199171 Delhi Enjoy Call Girls With Our Escorts
Call Girls in Friends Colony 9711199171 Delhi Enjoy Call Girls With Our Escorts
 
Editing progress 20th march.docxxxxxxxxx
Editing progress 20th march.docxxxxxxxxxEditing progress 20th march.docxxxxxxxxx
Editing progress 20th march.docxxxxxxxxx
 
Collective Mining | Corporate Presentation - April 2024
Collective Mining | Corporate Presentation - April 2024Collective Mining | Corporate Presentation - April 2024
Collective Mining | Corporate Presentation - April 2024
 
Nicola Mining Inc. Corporate Presentation May 2024
Nicola Mining Inc. Corporate Presentation May 2024Nicola Mining Inc. Corporate Presentation May 2024
Nicola Mining Inc. Corporate Presentation May 2024
 
slideshare Call girls Noida Escorts 9999965857 henakhan
slideshare Call girls Noida Escorts 9999965857 henakhanslideshare Call girls Noida Escorts 9999965857 henakhan
slideshare Call girls Noida Escorts 9999965857 henakhan
 
Top Rated Call Girls In Podanur 📱 {7001035870} VIP Escorts Podanur
Top Rated Call Girls In Podanur 📱 {7001035870} VIP Escorts PodanurTop Rated Call Girls In Podanur 📱 {7001035870} VIP Escorts Podanur
Top Rated Call Girls In Podanur 📱 {7001035870} VIP Escorts Podanur
 
(‿ˠ‿) Independent Call Girls Laxmi Nagar 👉 9999965857 👈 Delhi : 9999 Cash Pa...
(‿ˠ‿) Independent Call Girls Laxmi Nagar 👉 9999965857 👈 Delhi  : 9999 Cash Pa...(‿ˠ‿) Independent Call Girls Laxmi Nagar 👉 9999965857 👈 Delhi  : 9999 Cash Pa...
(‿ˠ‿) Independent Call Girls Laxmi Nagar 👉 9999965857 👈 Delhi : 9999 Cash Pa...
 
Vip Call Girls Vasant Kunj ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Vasant Kunj ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Vasant Kunj ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Vasant Kunj ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Pakistani Call girls in Ajman +971563133746 Ajman Call girls
Pakistani Call girls in Ajman +971563133746 Ajman Call girlsPakistani Call girls in Ajman +971563133746 Ajman Call girls
Pakistani Call girls in Ajman +971563133746 Ajman Call girls
 
Corporate Presentation Probe May 2024.pdf
Corporate Presentation Probe May 2024.pdfCorporate Presentation Probe May 2024.pdf
Corporate Presentation Probe May 2024.pdf
 
Call Girls In Amritsar 💯Call Us 🔝 76967 34778🔝 💃 Independent Escort In Amritsar
Call Girls In Amritsar 💯Call Us 🔝 76967 34778🔝 💃 Independent Escort In AmritsarCall Girls In Amritsar 💯Call Us 🔝 76967 34778🔝 💃 Independent Escort In Amritsar
Call Girls In Amritsar 💯Call Us 🔝 76967 34778🔝 💃 Independent Escort In Amritsar
 
@9999965857 🫦 Sexy Desi Call Girls Karol Bagh 💓 High Profile Escorts Delhi 🫶
@9999965857 🫦 Sexy Desi Call Girls Karol Bagh 💓 High Profile Escorts Delhi 🫶@9999965857 🫦 Sexy Desi Call Girls Karol Bagh 💓 High Profile Escorts Delhi 🫶
@9999965857 🫦 Sexy Desi Call Girls Karol Bagh 💓 High Profile Escorts Delhi 🫶
 

In-App Purchase

  • 1. Presented by Max Stottrop IN-APP PURCHASE
  • 2. What I will cover today • Introduction • Proccess of implementing In-App Purchase • StoreKit Framework • Business & Tips
  • 3. With In-App Purchase you can… • … embed a store directly to your application • It uses the Storekit Framework.
  • 4. In-App Purchase Types • Non-Consumable • Consumable • Auto-renewable subscription • Free subscription • Non-renewable subscription
  • 5. Walkthrough Create Fetch Purchase Restore Products Products Products Products
  • 6. Implementing In-App Purchase Setup Sell Determine Verify Restore Products in Products Product Product previous iTunes with Offerings Receipts Purchases Connect StoreKit
  • 7. Products • Supported types: • Content • Functionality • Services • Subscriptions • Each product has a unique productIdentifier. • No real-world goods!
  • 8. iTunes Connect Setup • Setup your Products • Create a Test User • One per country • Sign out of your Store Settings • Don‘t enter your Test User‘s Ids in the Settings
  • 9. Store Kit Framework Validate In-App Purchase Access Retrieving product information Show the Store Interface Make the purchase Process Transaction Make the feature avaible Finish Transaction Verify the receipts Restore previous Purchases
  • 10. Validate In-App Purchase Acces • Validate In-App Purchase Acces • Payment Queue class method canMakePurchase
  • 11. Determine sellable products • Load Product IDs • Use SKProductsRequest to determine the sellable subset of the IDs NSSet* products = [NSSet setWithObject: @”productID1”, @“productID2“, nil]; SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: products]; [productRequest start]; (void)productsRequest:(SKProductsRequest *)request didReceiveResponse: (SKProductsResponse *)response { response.invalidProductsIdentifiers == nonsellable; response.products == sellable;
  • 12. Show Store • UITableView Power? (void)productsRequest:(SKProductsRequest *)request didReceiveResponse: (SKProductsResponse *)response { for(SKProducts* aProduct in response.products) cell.textLabel.text = aProduct.localizedTitle; cell.textLabel.description = aProduct.localizedDescription; cell.textLabel.extra = aProduct.price; }
  • 13. Request payment • SKPayment Class • Create payment object • Add it to the queue • Observe the payment queue SKPayment *payRequest = [SKPayment paymentWithObject:selected]; [[SKPaymentQueue defaultQueue] addPayment:payRequest]; - (void)addTransactionObserver:(id <SKPaymentTransactionObserver>) observer
  • 14. Complete Transaction • updatedTransaction method • SKPaymentTransactionStatePurchased = Succes • SKPaymentTransactionStateRestored = Succes • finishTransaction method -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { if (atransaction.transactionState == SKPaymentTransactionStatePurchased ) { //Unlock content [queue finishTransaction:aTransaction]; } }
  • 16. Feature Delivery • Self contained • Downloadable
  • 17. Downloadable Content User sends iPhone Fetch Apple Server Apple payment sends Products returns verifies sends request to receipt to from Apple receipts receipt. product Apple server
  • 18. In-App Content User purchases Embed content Application content and in your unlocks Apple verifies application. functionality. payment.
  • 19. Remember Product Purchase • Use NSUserDefaults class and preference file • unsecure, easy to „hack“. • saves to Application Support directory • Use Keychain API • Secure • Saved to app Keychain Slice [[NSUserDefaults standartUserDefaults] setObject:bought forKey:@“boughtItems“]; SecItemAdd ((CFDictionaryRef) boughtItems, NULL);
  • 20. Verify Product Purchase Own iTunes Validation Server Server
  • 21. Verify Product Purchase Post Base64 Check Server encoded Transaction verifies App unlocks transaction receipt transaction content to the server
  • 22. Verify Product Purchase • Send JSON object with encoded transaction receipt • {“receipt - data“ : “7b4187e54587ert27e2“} • Post to iTunes verification service • http://buy.itunes.apple.com/verifyReceipt • http://sandbox.itunes.apple.com/verifyReceipt • Get a JSON object • {“status“ : 0, “receipt“ : { … } } • 0 == Succes, • everything else == BAD PIRATES AT WORK
  • 23. Restore Previous Purchases • Free Subscription, Auto- Renewing Subscription, Non- Consumable items • [[SKPaymentQueue defaultQueue] restoreCompletedTransactions] • Subscription & Consumable need own mechanism Proccess „Already Customer Succesfull purchased“ signs in Payment Dialog
  • 24. Business Model • Which Model to choose? • What to content sell? • Game • Everything else Extra Levels Social content In-game Currency Optional Content Money for time/Time
  • 25. Tips • Product Ids are unique across apps! • Built Store with sellable products only! • Use MBBase64 category from the CocoaDev website • Auto-renewing Subscription only for apps with dynamic content. • Only show the button when Internet Connection is avaible. • To test In-App Purchase you must add the Binary - Reject it! • After you added your Products, wait a bit! • MKStoreKit: Open Source helper.
  • 28. StoreFront • Works via JSON to display Content, Downloads, Updates. • Allows to sell free content. • No additional server costs/bandwidth. • Restoring Auto-renewable Subscriptions - YAY
  • 29. Q &A
  • 31. Links • Receipt validation: http://bit.ly/zMuTKk, http://bit.ly/we2Pt0 & http://bit.ly/AB09Sv • Apple: http://bit.ly/xy7aGV, http://bit.ly/wyLec6 & http://bit.ly/weMm3p • MKStoreKit: https://github.com/MugunthKumar/MKStoreKit • StoreFront: http://urbanairship.com/docs/inapp_client.html • Dr. Touch's Purchase Button: http://bit.ly/zxGjcY

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. Easy to implement\nNo server cost\nApplication size rises.\nContent cannot be changed or updated\n
  6. Get In-App Identifiers\nGet Product Info\nShow the UI\nMake the purchase\nProcess Transaction\nMake the feature avaible\nFinish Transaction\n
  7. \n
  8. \n
  9. Get In-App Identifiers\nGet Product Info\nShow the UI\nMake the purchase\nProcess Transaction\nMake the feature avaible\nFinish Transaction\n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. When the payment is added to the payment queue, a persistent transaction is created to hold it. After the payment is processed, the transaction is updated with information about the payment collection. Your application implements an observer that receives messages when transactions are updated. The observer should provide purchased items to the user and then remove the transaction from the payment queue.\nSKPayment\nCollecting payment starts with a payment object. The payment object includes a product identifier and optionally includes the quantity of that product to be purchased. You can queue the same payment object more than once; each time a payment object is queued results in a separate request for payment.\nUsers can disable the ability to make purchases in the Settings application. Before attempting to queue a purchase, your application should first confirm that payment can be processed. You do this by calling the payment queue&amp;#x2019;s canMakePayments method.\nSKPaymentQueue\nThe payment queue is used to communicate with the App Store. When payments are added to the queue, Store Kit transmits the request to the App Store. Store Kit presents dialogs to ask the user to authorize payment. The completed transaction is returned to your application&amp;#x2019;s observer.\nSKPaymentTransaction\nA transaction is created for every payment added to the queue. Each transaction has properties that allow your application to determine the status of the transaction. When payment is collected, the transaction includes additional details about the successful transaction.\nAlthough your application can ask the payment queue for a list of pending transactions, it is more common for an application to wait until the payment queue notifies the payment queue&amp;#x2019;s observer with a list of updated transactions.\nSKPaymentTransactionObserver\nYour application implements the SKPaymentTransactionObserver protocol on an object and adds it as an observer to the payment queue. The observer&amp;#x2019;s primary responsibility is to examine completed transactions, deliver items that were successfully purchased, and remove those transactions from the payment queue.\nYour application should associate an observer with the payment queue when it launches, rather than wait until the user attempts to purchase an item. Transactions are not lost when an application terminates. The next time the application launches, Store Kit resumes processing transactions. Adding the observer during your application&amp;#x2019;s initialization ensures that all transactions are returned to your application.\n
  16. \n
  17. Dynamic content\nKeep application size under 10mb\nMore secure (out of band receipt verification)\n
  18. Easy to implement\nNo server cost\nApplication size rises.\nContent cannot be changed or updated\n
  19. NSBundle *bundle = [NSBundle mainBundle];NSDictionary *info = [bundle infoDictionary];if ([info objectForKey: @&quot;SignerIdentity&quot;] != nil){/* do something */}\n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n