Upgrade to Pro — share decks privately, control downloads, hide ads and more …

StoreKit2を使った課金システムのフルリニューアル

yuhei
September 03, 2023

 StoreKit2を使った課金システムのフルリニューアル

yuhei

September 03, 2023
Tweet

Other Decks in Programming

Transcript

  1. StoreKit2Λ࢖ͬͨ


    ΞϓϦ಺՝ۚͷ


    ϑϧϦχϡʔΞϧ

    View Slide

  2. ࣗݾ঺հ
    ● גࣜձࣾCAM த్Ͱೖࣾ


    ● iOS ΤϯδχΞ 5೥໨


    ● CAMͰ͸ɺLDHɺΞΠυϧɺ઎͍ɺ৽
    R25ͳͲɺΤϯλϝࣄۀʹैࣄ


    ● λοϓϧʹδϣΠϯͯ͠໿1೥
    ҏ౻ ༔ฏ

    View Slide

  3. ओͳ಺༰
    ● λοϓϧʹ͍ͭͯ


    ● λοϓϧͷ՝ۚʹ͍ͭͯ


    ● ϑϧϦχϡʔΞϧͷഎܠ


    ● ϑϧϦχϡʔΞϧ·Ͱͷ௕ظϓϥϯ


    ● StoreKit2


    ● όοΫΤϯυଆͷରԠ


    ● ϦϦʔε࣌ʹରԠͯ͠Α͔ͬͨ͜ͱ


    ● ϦϦʔεޙʹ໌Β͔ʹͳࣦͬͨഊ...

    View Slide

  4. ฐࣾͷԣ࣠૊৫ʹ͍ͭͯ


    גࣜձࣾCAM → גࣜձࣾλοϓϧ

    View Slide

  5. ԣ࣠૊৫ʹ͍ͭͯ
    αΠόʔΤʔδΣϯτάϧʔϓ಺ʹάϧʔϓ

    View Slide

  6. λοϓϧʹ͍ͭͯ

    View Slide

  7. λοϓϧʹ͍ͭͯ
    ● ϚονϯάΞϓϦͷʮλοϓϧʯ͸ɺ2014೥5݄ʹαʔϏεΛ։࢝ɻ


    ● ࣗ෼ͷझຯ΍ߦͬͯΈ͍ͨσʔτεϙοτΛ͖͔͚ͬʹɺ࿀ͷ૬ख͕ݟ͚ͭΒΕ
    Δࠃ಺࠷େن໛ͷϚονϯάΞϓϦɻ

    View Slide

  8. 9/1ʹɺϚονϯάΞϓϦͷTVCM͕ղې͞Ε·ͨ͠


    TVCMͷ์ө͸৚͕݅ݫ͍͠Β͍͠...

    View Slide

  9. View Slide

  10. λοϓϧͷ՝ۚʹ͍ͭͯ

    View Slide

  11. λοϓϧͷ՝ۚʹ͍ͭͯ - ௨ৗ
    ʻফ໣ܕͷϙΠϯτʼ ʻαϒεΫͷγϯϓϧɺελϯμʔυϓϥϯʼ

    View Slide

  12. λοϓϧͷ՝ۚʹ͍ͭͯ - ηʔϧࢪࡦ

    View Slide

  13. ϑϧϦχϡʔΞϧͷഎܠ

    View Slide

  14. ϑϧϦχϡʔΞϧͷഎܠ
    ● ՝ۚͷϚΠΫϩαʔϏεԽʢෳࡶͩͬͨγεςϜΛγϯϓϧʹ͍ͨ͠ʣ


    ● ՝ۚج൫ͷ৐Γ׵͑ʢαΠόʔΤʔδΣϯτͷ՝ۚج൫Λ࢖͍͍ͨʣ


    ● App Store Server Notifications ͷಋೖʢVersion 2ʣ


    ΞϓϦ಺՝ۚʹ͓͍ͯߪೖɺࣗಈߋ৽ɺαϒεΫఀࢭͳͲͷΠϕϯτΛαʔόʔʹ


    ϦΞϧλΠϜͰ௨஌Ͱ͖Δػೳɻ
    όοΫΤϯυଆ

    View Slide

  15. ϑϧϦχϡʔΞϧͷഎܠ
    ● StoreKit2 ͷಋೖ


    ● KMMɺBFFΛ࢖ͬͨ՝ۚؔ࿈ͷڞ௨ԽʢAndroidͱ՝ۚϩδοΫΛڞ௨Խ͍ͨ͠ʣ


    ● ͓ࢼ͠ΦϑΝʔɺϓϩϞʔγϣϯΦϑΝʔͷಋೖ
    iOSଆ

    View Slide

  16. ϑϧϦχϡʔΞϧͷ௕ظϓϥϯ

    View Slide

  17. ϑϧϦχϡʔΞϧͷ௕ظϓϥϯʢ໿4ϲ݄ؒʣ
    ՝ۚͷϚΠΫϩαʔϏεԽ


    KMMɺBFFԽ


    ※ StoreKit1 ͷঢ়ଶ
    Step1 Step2 Step3
    StoreKit2ͷಋೖ ͓ࢼ͠ΦϑΝʔ


    ϓϩϞʔγϣϯΦϑΝʔ


    ͷಋೖ
    େ͖ͳࢪࡦɺ͔͠΋՝ۚͷͨΊɺ3ͭʹ෼͚ͨ

    View Slide

  18. StoreKit2


    γϯϓϧͳίʔυ

    View Slide

  19. StoreKit2 - γϯϓϧͳίʔυ
    ϓϩμΫτ৘ใͷऔಘ - Product.products()
    ● Կ΋४උ͸ඞཁͳ͍ɻͨͬͨɺ1ߦͷίʔυɻ


    ● ͜ͷ Productʢ= SKProductʣʹ͋ΒΏΔ৘ใ͕٧·͍ͬͯΔɻ

    View Slide

  20. StoreKit2 - γϯϓϧͳίʔυ
    ϓϩμΫτͷߪೖ - Product.purchase()
    ● Կ΋४උ͸ඞཁͳ͍ɻͨͬͨɺ1
    ߦͷίʔυͰߪೖ։࢝ɻ


    ● ߪೖ঎඼ͷݕূ͸ΞϓϦଆͰɻ


    ● τϥϯβΫγϣϯ͸ಉؔ͡਺಺Ͱ
    ׬ྃͰ͖Δɻ


    ● try catch ͰΤϥʔ΋ଈ࠲ʹऔಘͰ
    ͖Δɻ


    ● Delegate ͳ͠ɻ


    ● ίʔϧόοΫؔ਺΋ͳ͘ͳΔɻ

    View Slide

  21. StoreKit2 - γϯϓϧͳίʔυ
    2ϲॴͷτϥϯβΫγϣϯ
    ● ΞϓϦىಈ࣌ͷτϥϯβΫγϣϯ


    ● ߪೖ঎඼ͷ෮ݩ࣌ͷτϥϯβΫγϣϯ


    ͪ͜Β΋؆୯ʹ࣮૷Ͱ͖Δɻ

    View Slide

  22. StoreKit2 - γϯϓϧͳίʔυ
    ΞϓϦىಈ࣌ͷτϥϯβΫγϣϯᶃ - Transaction.updates
    ● ࣗಈߋ৽ͷαϒεΫͳͲͰൃੜ
    ͨ͠ɺະॲཧͷτϥϯβΫγϣ
    ϯΛऔಘͰ͖Δɻ


    ● λοϓϧͰ͸ Root ͷ
    ViewController Ͱ listen ͍ͯ͠
    Δɻʢৗʹ؂ࢹʣ

    View Slide

  23. StoreKit2 - γϯϓϧͳίʔυ
    ߪೖ঎඼ͷ෮ݩ࣌ͷτϥϯβΫγϣϯᶄ - Transaction.currentEntitilements
    ● ෮ݩର৅ͷτϥϯβΫγϣϯΛ
    औಘͰ͖Δɻ


    ● λοϓϧͰ͸ઃఆը໘ʹ͋Δ
    ʮߪೖ಺༰ͷ෮ݩʯϝχϡʔʹ
    ࣮૷͍ͯ͠Δɻ

    View Slide

  24. StoreKit2 - γϯϓϧͳίʔυ
    ߪೖ঎඼ͷ෮ݩ࣌ͷτϥϯβΫγϣϯᶄ - Transaction.unfinished
    ● ߪೖ࣌ʹApp Storeͷܾࡁ͸׬
    ͕ྃͨ͠ɺαʔόʔଆͷܾࡁޙ
    ॲཧʹࣦഊͨ͠έʔεͳͲͰɺ
    ະॲཧͷτϥϯβΫγϣϯΛऔ
    ಘͰ͖Δɻ


    ● ͪ͜Β΋ઃఆը໘ʹ͋Δʮߪೖ
    ಺༰ͷ෮ݩʯϝχϡʔʹ࣮૷͠
    ͍ͯΔɻ

    View Slide

  25. StoreKit2 - γϯϓϧͳίʔυ
    τϥϯβΫγϣϯॲཧͷ஫ҙ఺ʂᶃ
    λοϓϧͰ͸ɺ෮ݩ࣌ʹҎԼͷ2छྨͷτϥϯβΫγϣϯΛ֬ೝͯ͠Δɻ


    ᶃ Transaction.currentEntitlements


    ᶄ Transaction.unfinished


    ԿΒ͔ͷཧ༝Ͱߪೖ঎඼ͷτϥϯβΫγϣϯΛ׬ྃͰ͖ͳ͔ͬͨͱ͖ɺ֘౰ͷτϥϯβΫγϣϯ
    ͸ Transaction.currentEntitlements Ͱ͸ͳ͘ɺTransaction.unfinished ʹଘࡏ͍ͯͨ͠ɻ


    ։ൃॳظஈ֊Ͱ͸ Transaction.currentEntitlements ʹར༻Մೳ঎඼͕͢΂ͯଘࡏ͢Δͱࢥ͕ͬͨɺ


    ςετΛ௨ͯ͡ɺະ׬ྃͷτϥϯβΫγϣϯ͸ Transaction.currentEntitlements ʹؚ·Ε͍ͯͳ͍
    ͜ͱ͕Θ͔ͬͨɻ

    View Slide

  26. StoreKit2 - γϯϓϧͳίʔυ
    τϥϯβΫγϣϯॲཧͷ஫ҙ఺ʂᶄ
    ͦͷͨΊɺαʔόʔଆͰ͸APIΛϩοΫͯ͠ɺαʔόʔଆͷ࿈ଓܾͨ͠ࡁޙॲཧ͕ൃੜ͠ͳ͍Α͏
    ʹରࡦͨ͠ɻ
    ঎඼Λߪೖͨ͠ͱ͖ɺαʔόʔଆͰܾࡁޙॲཧΛ͢Δ͕ɺ


    ॏෳͯ͠৽نߪೖͷॲཧͯ͠͠·͍ͬͯͨɻ
    Appleͷެࣜαϯϓϧίʔυʹ͸ɺߪೖʹΑΔτϥϯβΫγϣϯ͸ listen͠ͳ͍ͱॻ͍͕ͯ͋ͬͨ...


    // Iterate through any transactions that don't come from a direct call to `purchase()`.


    https://developer.apple.com/documentation/storekit/in-app_purchase/implementing_a_store_in_your_app_using_the_storekit_api
    A. ߪೖ௚ޙ


    B. ΞϓϦىಈ࣌ʹ listen ͨ͠ Transactions.updates

    View Slide

  27. StoreKit2 - γϯϓϧͳίʔυ
    Ϩγʔτ
    Ϩγʔτ͕ෆཁʹͳͬͨʂ


    ͦͷ୅ΘΓʹԿ͕ඞཁʁ

    View Slide

  28. StoreKit2 - γϯϓϧͳίʔυ
    Ϩγʔτ͕ෆཁʹͳͬͨʂ- ফ໣ܕ
    ● Ϩγʔτͷ୅ΘΓʹɺ
    jwsRepresentation Λαʔόʔʹ
    ૹΔɻ


    ● base64ʹΤϯίʔυ͞Ε͍ͯΔ
    ͷͰɺσίʔυ͢Ε͹
    transactionId ͳͲΛऔಘͰ͖Δɻ


    ● ߪೖ੒ޭޙͷฦΓ஋ͰऔಘͰ͖Δ
    ஋ɻ

    View Slide

  29. StoreKit2 - γϯϓϧͳίʔυ
    Ϩγʔτ͕ෆཁʹͳͬͨʂ- αϒεΫϦϓγϣϯ
    ● Ϩγʔτͷ୅ΘΓʹɺ
    originalTransactionId Λαʔόʔʹ
    ૹΔɻ


    ● λοϓϧͷαʔόʔଆͰ͸ɺ
    originalTransactionId Λجʹ


    App Store Server API Λ࢖ͬͯɺ


    τϥϯβΫγϣϯͷৄࡉ৘ใΛऔಘ
    ͢Δɻ


    ● ͪ͜Β΋ɺߪೖ੒ޭޙͷฦΓ஋Ͱऔ
    ಘͰ͖Δ஋ɻ

    View Slide

  30. StoreKit2 - γϯϓϧͳίʔυ
    StoreKit2Ͱ


    γϯϓϧͳίʔυʹͳ͓͔ͬͨ͛Ͱ


    ίʔυΛ௥͍΍͘͢ͳΓ


    σόοάָ͕ʹͳͬͨ


    ՝ۚཧղͷϋʔυϧ͕Լ͕ͬͨ

    View Slide

  31. StoreKit2


    ΦϑΝʔ

    View Slide

  32. StoreKit2 - ΦϑΝʔ
    ͓ࢼ͠ແྉ΍ηʔϧࢪࡦͷͨΊʹɺΦϑΝʔΛ௥Ճͨ͠ɻ


    ● ͓ࢼ͠ΦϑΝʔ


    ● ϓϩϞʔγϣϯΦϑΝʔ

    View Slide

  33. StoreKit2 - ΦϑΝʔ
    ● αϒεΫάϧʔϓ಺ͰҰ౓͚ͩఏڙՄೳɻ


    ● ίʔυଆͰΦϑΝʔͷద༻༗ແΛࢦఆͰ͖ͳ͍ɻʢAppleଆͰ൑அʣ


    ● αϒεΫάϧʔϓ಺Ͱɺར༻தͷαϒεΫ͕͋Δͱద༻Ͱ͖ͳ͍ɻ


    ※ΞοϓάϨʔυɺμ΢ϯάϨʔυͰͷఏڙ͸Ͱ͖ͳ͍ɻ


    ● αϒεΫͷߪೖܦݧ͕͋ͬͯ΋ɺ͓ࢼ͠ܦݧ͕ͳ͚Ε͹ɺ


    ͓ࢼ͠ΦϑΝʔΛఏڙͰ͖Δɻ
    ͓ࢼ͠ΦϑΝʔ

    View Slide

  34. StoreKit2 - ΦϑΝʔ
    ͓ࢼ͠ΦϑΝʔ
    ● ͓ࢼ͠ΦϑΝʔͷ৘ใ


    Product.subscription?.introductoryOffer


    ● ͓ࢼ͠ΦϑΝʔΛఏڙՄೳ͔ʁ


    Product.SubscriptionInfo.isEligibleForIntroOffer

    View Slide

  35. StoreKit2 - ΦϑΝʔ
    ͓ࢼ͠ΦϑΝʔ - ஫ҙ఺ʂ
    isEligibleForIntroOffer == true Ͱ΋ɺ


    ಉ͡αϒεΫάϧʔϓ಺Ͱɺར༻தͷαϒεΫ͕͋Δͱ͓ࢼ͠ΦϑΝʔΛద༻Ͱ͖ͳ͍ɻ


    ͦͷͨΊλοϓϧͰ͸ɺProduct.SubscriptionInfo.status Λऔಘͯ͠ɺ


    ݱࡏར༻தͷαϒεΫ͕ଘࡏ͢Δ͔νΣοΫ͍ͯ͠Δɻ


    true ͚ͩͲɺ͓ࢼ͠ΛఏڙͰ͖ͳ͍ͷͰ஫ҙʂ


    View Slide

  36. StoreKit2 - ΦϑΝʔ
    Ϩγʔτͷத਎Λൈਮʢ๨Εͳ͍Α͏ʹϝϞʣ


    ● ແྉ͓ࢼ͠ΦϑΝʔ


    "is_trial_period": "true",


    "is_in_intro_offer_period": "false",


    ● ༗ྉ͓ࢼ͠ΦϑΝʔ


    "is_trial_period": "false",


    "is_in_intro_offer_period": "true",
    ͓ࢼ͠ΦϑΝʔ - Ϩγʔτͷத਎

    View Slide

  37. StoreKit2 - ΦϑΝʔ
    ● Կ౓Ͱ΋ఏڙՄೳɻ


    ● ίʔυଆͰߪೖ࣌ʹOfferIdΛࢦఆ͢Δɻ


    OfferIdΛࢦఆ͠ͳ͍ͱ௨ৗՁ֨ѻ͍ɻ


    ● ΞϓϦ಺ͰҰ౓Ͱ΋αϒεΫߪೖܦݧ͕ͳ͍ͱఏڙͰ͖ͳ͍ɻ


    ※ߪೖܦݧ͕ͳ͍ͷʹϓϩϞʔγϣϯΦϑΝʔͰߪೖ͠Α͏ͱ͢ΔͱΤϥʔʹͳΔɻ
    ϓϩϞʔγϣϯΦϑΝʔ

    View Slide

  38. StoreKit2 - ΦϑΝʔ
    ● ϓϩϞʔγϣϯΦϑΝʔ৘ใͷऔಘʢ࠷େ10݅ͷొ࿥͕Մೳʣ


    Product.subscription?.promotionalOffers.first(where: { $0.id == offerId })


    ● ϓϩϞʔγϣϯΦϑΝʔΛఏڙՄೳ͔ʁ


    Product.SubscriptionInfo.status(for: subscriptionGroupId)?.isEmpty


    λοϓϧͰ͸ɺಉ͡αϒεΫάϧʔϓ಺ͷߪೖܦݧͰ൑அͨ͠ɻ


    ※ϕετϓϥΫςΟε͕͋Ε͹ڭ͍͖͍͑ͯͨͩͨͰ͢ɻ
    ϓϩϞʔγϣϯΦϑΝʔ

    View Slide

  39. StoreKit2 - ΦϑΝʔ
    Ϩγʔτͷத਎Λൈਮʢ๨Ε͕ͪͳͷͰϝϞʣ


    "promotional_offer_id": "**************************"
    ϓϩϞʔγϣϯΦϑΝʔ - Ϩγʔτͷத਎

    View Slide

  40. ʮappBundleId + '\u2063' + keyIdentifier + '\u2063' + productIdentifier + '\u2063' + offerIdentifier + '\u2063' + appAccountToken +
    '\u2063' + nonce + '\u2063' + timestampʯ


    ʮappBundleId + '\u2063' + keyIdentifier + '\u2063' + productIdentifier + '\u2063' + offerIdentifier + '\u2063' + '' + '\u2063' + nonce +
    '\u2063' + timestampʯ
    StoreKit2 - ΦϑΝʔ
    ϓϩϞʔγϣϯΦϑΝʔΛߪೖ͢Δͱ͖ɺαʔόʔଆͰ signature Λੜ੒ͯ͠ɺ


    iOSଆͰ Product.purchase ࣌ʹ signature Λ෇༩͢Δඞཁ͕͋Δɻ


    ͜ͷͱ͖ɺΦϓγϣφϧͷ appAccountToken ͕ෆཁͳ৔߹͸ɺۭจࣈͱͯ͠ઃఆ͢Δɻ


    ※ۭจࣈ΋ແ͍ঢ়ଶͰ signature Λ࡞੒ͨ͠ΒߪೖͰ͖ͣΤϥʔʹͳΔɻ
    ϓϩϞʔγϣϯΦϑΝʔͷॺ໊࡞੒Ͱ͸·ͬͨ͜ͱʢsignatureʣ
    [Link]


    https://developer.apple.com/documentation/storekit/in-app_purchase/original_api_for_in-app_purchase/subscriptions_and_offers/
    generating_a_signature_for_promotional_offers

    View Slide

  41. όοΫΤϯυଆͷରԠ


    View Slide

  42. όοΫΤϯυଆͷରԠ
    App Store Server API
    ● αϒεΫ৘ใͷऔಘ


    αϒεΫͷܾࡁޙॲཧͷͱ͖ɺoriginalTransactionId ͔Βৄࡉ৘ใΛऔಘ͢ΔͨΊʹɺ


    Լه API Λར༻ͨ͠ɻ


    https://api.storekit.itunes.apple.com/inApps/v1/subscriptions/{transactionId}


    https://developer.apple.com/documentation/appstoreserverapi/get_all_subscription_statuses


    ● τϥϯβΫγϣϯཤྺ


    αϒεΫͷΞοϓάϨʔυ/μ΢ϯάϨʔυͷࡍʹɺաڈͷߪೖ৘ใ͕ඞཁͩͬͨͨΊɺ


    Լه API Λར༻ͨ͠ɻ


    https://api.storekit.itunes.apple.com/inApps/v1/history/{transactionId}


    https://developer.apple.com/documentation/appstoreserverapi/get_transaction_history

    View Slide

  43. ϦϦʔεޙʹରԠͯ͠Α͔ͬͨ͜ͱ

    View Slide

  44. ϦϦʔε࣌ʹରԠͯ͠Α͔ͬͨ͜ͱ
    ஈ֊తϦϦʔε
    ● App Store Connect ͔ΒΞϓϦΛ
    ϦϦʔε͢Δͱ͖ɺʮஈ֊తϦϦ
    ʔεʯΛར༻ͨ͠ɻ


    ● λοϓϧͰ͸௨ৗ࣌΋ஈ֊తϦϦ
    ʔεΛ࣮ࢪ͍ͯ͠Δ͕ɺ՝ۚؔ࿈
    ͷϦϦʔε࣌͸ɺΧελϚʔαϙ
    ʔτ΁ͷ໰͍߹Θͤঢ়گͳͲݟͳ
    ͕Βɺ͍ͭ΋ΑΓ༨༟Λ࣋ͬͯ
    100%։์ʹͨ͠ɻ

    View Slide

  45. ϦϦʔε࣌ʹରԠͯ͠Α͔ͬͨ͜ͱ
    ৽چίʔυͷ੾Γସ͑
    ● Firebase ͷ Remote Config Λ
    ࢖ͬͯɺԿ͔େ͖ͳ໰୊͕ൃੜ
    ͨ͠ͱ͖ͷͨΊʹɺ৽چͷίʔ
    υΛ੾Γସ͑ΒΕΔΑ͏ʹ͠
    ͨɻ


    ● ։์཰Λ0%ʹ͢Δͱɺچίʔ
    υͰ՝ۚॲཧ͕࣮ߦ͞ΕΔɻ

    View Slide

  46. ϦϦʔε࣌ʹରԠͯ͠Α͔ͬͨ͜ͱ
    Τϥʔϩάͷग़ྗ - Datadog
    ● Datadog Λར༻ͯ͠ɺ՝ۚؔ࿈ͷΤ
    ϥʔΛग़ྗͨ͠ɻϢʔβʔ͔Βͷ໰
    ͍߹Θͤ࣌ͷௐࠪʹ໾ʹཱͬͨɻ


    ● εϜʔζͳௐࠪͷͨΊʹɺͪΐͬͱ
    ΍Γ͗͢ʁ͘Β͍ৄࡉͳΤϥʔ಺༰
    ΛૹΔ͜ͱΛ͓͢͢Ίɻ


    ● Τϥʔ͕ٸܹʹ૿͑ͨࡍ͸ɺSlack
    ΁௨஌͕ಧ͘Α͏ʹ Monitors Λར
    ༻ͨ͠ɻ

    View Slide

  47. ϦϦʔε࣌ʹରԠͯ͠Α͔ͬͨ͜ͱ
    ΤϥʔϝοηʔδʹΤϥʔ ID
    ● ֤छ՝ۚؔ࿈ͷΤϥʔΛ
    ·ͱΊͯ؅ཧͯ͠ɺϢʔ
    βʔʹදࣔ͢ΔΤϥʔϝ
    οηʔδʹIDΛ෇༩͠
    ͨɻ


    ● Ϣʔβʔ͔Βͷ໰͍߹Θ
    ͤ࣌ʹɺΤϥʔϝοηʔ
    δͷεΫγϣ΋͓ئ͍͠
    ͍ͯΔͨΊɺID͕ෆ۩߹
    ௐࠪʹ໾ཱͬͨɻ

    View Slide

  48. ϦϦʔεޙʹ໌Β͔ʹͳࣦͬͨഊ...

    View Slide

  49. ϦϦʔεޙʹ໌Β͔ʹͳࣦͬͨഊ...
    StoreKit1 ͱ 2 Λࠞࡏͤͯ͞͠·ͬͨ...

    View Slide

  50. ϦϦʔεޙʹ໌Β͔ʹͳࣦͬͨഊ...
    αʔόʔଆͷ౎߹ʹΑΓɺஈ֊Λ౿ΜͰϦχϡʔΞϧΛܭըͨ͠ɻ


    Step1: ·ͣ͸ɺiOSଆͷΈΛ StoreKit2 ʹҠߦ


    Step2: ࣍ʹɺαʔόʔଆΛ StoreKit2 ʹରԠͨ͠APIʹҠߦ

    View Slide

  51. ͦͷͨΊɺ࠷ॳͷஈ֊Ͱ͸


    چདྷܕͷ receipt σʔλ(StoreKit1) Λ࢖ܾͬͨࡁޙॲཧΛͨ͠ɻ


    ͭ·ΓɺiOSଆͷߪೖ͸StoreKit2ɺαʔόʔଆͷܾࡁޙॲཧ͸StoreKit1
    ϦϦʔεޙʹ໌Β͔ʹͳࣦͬͨഊ...

    View Slide

  52. ͜ͷͱ͖ɺαʔόʔଆͰ receipt Λ࢖ͬͯϨγʔτͷத਎Λ֬ೝͨ͠Βɺ


    ࠷৽ͷߪೖ৘ใؚ͕·Ε͓ͯΒͣɺਖ਼ৗʹߪೖ঎඼Λ෇༩Ͱ͖ͳ͔ͬͨɻ


    Ϩγʔτͷ൓өʹλΠϜϥά͕͋ͬͨɻ
    ϦϦʔεޙʹ໌Β͔ʹͳࣦͬͨഊ...

    View Slide

  53. Apple ͷςΫχΧϧαϙʔτʹ໰͍߹ΘͤͨΒɺStoreKit1ͱ2 Λࠞࡏͤͯ͞͸ͩΊɻ


    αʔόʔଆ΋ StoreKit2 Λ࢖ͬͨਪ঑ͷํ๏ͰɺܾࡁޙॲཧΛ͢ΔΑ͏ʹͱࢦఠΛड͚ͨɻ


    σόοά࣌͸ΤϥʔʹͳΒͳ͔͔ͬͨΒɺ͍͚Δͱࢥͬͨ...
    ϦϦʔεޙʹ໌Β͔ʹͳࣦͬͨഊ...

    View Slide

  54. ͥͻɺStoreKit2ʹ͠·͠ΐ͏ʂ

    View Slide

  55. Ҏ্ʹͳΓ·͢


    ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide