In-App Purchasesの
実装前に知っておきたい
ハマりポイント / Points to be aware of when implementing In-App Purchases

In-App Purchasesの
実装前に知っておきたい
ハマりポイント / Points to be aware of when implementing In-App Purchases

070d33664df274636dad3da21c9b21fc?s=128

rockname

May 20, 2019
Tweet

Transcript

  1. In-App Purchasesͷ
 ࣮૷લʹ஌͓͖͍ͬͯͨ
 ϋϚΓϙΠϯτ ΈͯͶͷMeetup #5 ܾࡁΛࢧ͑Δٕज़ 2019/05/20 גࣜձࣾϛΫγΟ ΈͯͶࣄۀ෦

    ϩΫωϜ@rockname
  2. ϩΫωϜ@rockname • גࣜձࣾϛΫγΟ 2018೥৽ଔೖࣾ • Ո଒ΞϧόϜΈͯͶ • ΞϓϦ։ൃάϧʔϓ
 iOS(Swift, objc)

    > Android(Kotlin, Java) == Rails(ruby) • झຯ: VTuberؑ৆ • WWDC 2019 ࢀՃ͠·͢ ✈
 ࣗݾ঺հ
  3. ΞδΣϯμ ࿩͢͜ͱ • In-App Purchasesͱ͸Կ͔ • ΈͯͶʹ͓͚ΔIn-App Purchasesͷେ·͔ͳ࣮૷ • In-App

    PurchasesͰϋϚͬͨ͜ͱͱͦͷճආࡦ
 ࿩͞ͳ͍͜ͱ • αʔόʔαΠυͷ࣮૷ • iOSͷࡉ͔͍࣮૷
  4. In-App Purchasesͱ͸ʁ

  5. In-App Purchases • iOSʹ͓͚ΔΞϓϦ಺՝ۚͷ໊শ • ΞϓϦ಺ͷػೳΛఏڙ͢Δࡍʹ࢖༻ ͢Δඞཁ͕͋Δ • ࠷ۙApple͕αϒεΫϦϓγϣϯΛ ਪͯ͠Δײ͕͋͡Δ

  6. ΞϓϦ಺՝͕ۚ
 ൓ө͞ΕΔ·ͰͷྲྀΕ

  7. 1. AppStoreͷtransactionΛ؂ࢹ

  8. 2. ՝ۚΞΠςϜΛදࣔ

  9. 3. AppStoreͰߪೖॲཧ

  10. 4. ϨγʔτͷόϦσʔγϣϯ

  11. ࣗಈߋ৽αϒεΫϦϓγϣϯ ͷ৔߹͸͞Βʹ…

  12. ঢ়ଶߋ৽௨஌ • ࣗಈߋ৽αϒεΫϦϓγϣϯͷঢ়ଶ͕੾ΓସΘͬͨ͜ͱΛ௨஌ "QQ4UPSF

  13. ঢ়ଶߋ৽௨஌ • ࣗಈߋ৽αϒεΫϦϓγϣϯͷঢ়ଶ͕੾ΓସΘͬͨ͜ͱΛ௨஌ αϒεΫϦϓγϣϯΛΩϟϯηϧ "QQ4UPSF

  14. ঢ়ଶߋ৽௨஌ • ࣗಈߋ৽αϒεΫϦϓγϣϯͷঢ়ଶ͕੾ΓସΘͬͨ͜ͱΛ௨஌ αϒεΫϦϓγϣϯΛΩϟϯηϧ 5ZQF$"/$&- "QQ4UPSF

  15. ঢ়ଶߋ৽௨஌ • ࣗಈߋ৽αϒεΫϦϓγϣϯͷঢ়ଶ͕੾ΓସΘͬͨ͜ͱΛ௨஌ αϒεΫϦϓγϣϯΛΩϟϯηϧ Ϣʔβʔσʔλͷߋ৽ 5ZQF$"/$&- "QQ4UPSF

  16. ຊ୊

  17. In-App Purchasesͷ࣮૷Ͱ
 ϋϚͬͨ5ͭͷপ

  18. 1. SandboxͰ͔͠ ߪೖͷಈ࡞֬ೝ͕Ͱ͖ͳ͍

  19. ΞϓϦ಺՝ۚͷςετ • App Store ConnectͰSandboxςελʔ Λ࡞੒ • SandboxςελʔͰߪೖ͢Δ͜ͱͰ AppleͷςεταʔόʔͰϨγʔτ͕ॲཧ ͞ΕΔ

    • Sandbox؀ڥͷϨγʔτ͕෷͍ग़͞ΕΔ
  20. ΞϓϦ಺՝ۚͷਃ੥ • ΞϓϦͷϨϏϡʔ΋Appleͷ SandboxͰϨγʔτ͕ॲཧ ͞ΕΔ • ຊ൪Ͱॲཧ͞ΕΔͷ͸ΞϓϦ ΛϦϦʔε͔ͯ͠Β͚ͩ…

  21. αʔόʔଆͰͷຊ൪Ϩγʔτ ॲཧͷಈ࡞֬ೝ͕Ͱ͖ͳ͍

  22. ϓϩϞίʔυ

  23. ϓϩϞʔγϣϯίʔυͱ͸ • ਃ੥ͷ௨ͬͨΞϓϦͳͲΛެ։લͰ΋഑෍͢ Δ͜ͱ͕Ͱ͖Δ • ެࣜυΩϡϝϯτతʹ͸ʮજࡏސ٬΍Ϩ Ϗϡʔهࣄͷ࡞੒ऀ΁ͷ഑෍ͳͲϓϩϞʔ γϣϯͷͨΊͷ࢖༻ʯ͕૝ఆ͞Ε͍ͯΔ

  24. ϓϩϞʔγϣϯίʔυͷ͓͔͛Ͱ ແࣄʹϦϦʔεલʹຊ൪Ͱͷ
 ಈ࡞֬ೝ͕Ͱ͖ͨ

  25. 2. Ϩγʔτ͕ ΋ͷ͘͢͝௕͘ͳΔ

  26. SandboxςελʔͰಈ࡞֬ೝ͍ͯͨ͋͠Δ೔ • Կ౓՝ۚͯ͠΋ࣦഊ͢Δ • αʔόʔʹೖͬͯϩάΛݟΔͱݪҼ͕Θ͔ͬͨ…

  27. SandboxςελʔͰಈ࡞֬ೝ͍ͯͨ͋͠Δ೔ • Կ౓՝ۚͯ͠΋ࣦഊ͢Δ • αʔόʔʹೖͬͯϩάΛݟΔͱݪҼ͕Θ͔ͬͨ…

  28. ফ໣ܕϓϩμΫτҎ֎ͷ
 ϓϩμΫτߪೖ৘ใ͸Ϩγʔτʹ࢒Γଓ͚Δ • ͭ ެࣜυΩϡϝϯτ w ফ໣ܕϓϩμΫτͷ৘ใ͸ɺࢧ෷͍͕ߦΘΕΔͱγʔτʹ௥Ճ͞Εɺ τϥϯβΫγϣϯΛऴྃ͢Δ·ͰϨγʔτ্ʹ࢒Γ·͢ɻτϥϯβΫ γϣϯͷऴྃޙɺ͜ͷ৘ใ͸Ϩγʔτ͕࣍ʹߋ৽͞ΕΔͱ͖ɺͨͱ͑ ͹Ϣʔβʔ͕࣍ʹߪೖΛߦͬͨͱ͖ʹ࡟আ͞Ε·͢ɻ


    ͜ΕҎ֎ͷछྨͷϓϩμΫτߪೖͷ৘ใ͸ɺࢧ෷͍͕ߦΘΕΔͱϨ γʔτʹ௥Ճ͞ΕɺϨγʔτʹ࢒Γଓ͚·͢ɻ • DBʹอଘ͢Δͱ͖ʹ͸Ұ޻෉ඞཁͦ͏
  29. FYDMVEFPME USBOTBDUJPOT

  30. Key: exclude-old-transactions • ϨγʔτͷόϦσʔγϣϯΛߦ͏ࡍʹ
 `exclude-old-transactions` Λࢦఆ͢Δ͜ͱͰ
 αϒεΫϦϓγϣϯͷ࠷৽ͷtransactionͷΈΛऔಘͰ͖Δʂʂʂ

  31. 3. υΩϡϝϯτʹͳ͍ Τϥʔίʔυ͕ฦͬͯ͘Δ

  32. ΤϥʔϋϯυϦϯά • ΞϓϦͷ՝ۚʹࣦഊͨ͠৔߹ʹద੾ͳΤϥʔϝοηʔδΛ
 Ϣʔβʔʹݟͤͯ͋͛Δඞཁ͕͋Δ • StoreKitͰͷΤϥʔίʔυ͸ `SKErrorDomain` ͱͳΔ

  33. ߪೖ్தͰͷΩϟϯηϧ΋Τϥʔѻ͍ • ߪೖ్தग़ͯ͘ΔΞϥʔτͷΩϟϯηϧΛબ୒͢ΔͱɺͦΕ΋Τ ϥʔͱͯ͠ྲྀΕͯ͘Δ • Τϥʔίʔυ͸ `SKErrorDomain.paymentCancelled` ͱͳΔ • Ωϟϯηϧͷ৔߹͚ͩ

    guard ͯ͋͛͠Δඞཁ͕͋Δ guard error.code != SKError.paymentCancelled.rawValue else { return }
  34. ෮ݩ్தͰͷΩϟϯηϧ͸…? • In-App PurchasesͰ͸ߪೖͨ͠ϓϩμΫτΛ෮ݩ͢ΔखஈΛఏڙ ͢Δඞཁ͕͋Δ (rejectҊ݅) • ͦͷࡍʹߦ͏ɺAppϨγʔτͷߋ৽ॲཧͷ్தग़ͯ͘ΔΞϥʔτ ͷΩϟϯηϧΛબ୒͢ΔͱɺͦΕ΋Τϥʔͱͯ͠ྲྀΕͯ͘Δ •

    Τϥʔίʔυ͸ `SSErrorDomain` …
  35. ෮ݩ్தͰͷΩϟϯηϧ͸…? • In-App PurchasesͰ͸ߪೖͨ͠ϓϩμΫτΛ෮ݩ͢ΔखஈΛఏڙ ͢Δඞཁ͕͋Δ (rejectҊ݅) • ͦͷࡍʹߦ͏ɺAppϨγʔτͷߋ৽ॲཧͷ్தग़ͯ͘ΔΞϥʔτ ͷΩϟϯηϧΛબ୒͢Δͱ… •

    Τϥʔίʔυ͸ `SSErrorDomain` …
  36. υΩϡϝϯτʹࡌͬͯΔ
 Τϥʔίʔυ SKErrorDomain ෮ݩΩϟϯηϧ࣌ʹฦ͖ͬͯͨ
 Τϥʔίʔυ SSErrorDomain

  37. υΩϡϝϯτʹࡌͬͯΔ
 Τϥʔίʔυ SKErrorDomain ෮ݩΩϟϯηϧ࣌ʹฦ͖ͬͯͨ
 Τϥʔίʔυ SSErrorDomain

  38. υΩϡϝϯτʹࡌͬͯΔ
 Τϥʔίʔυ SKErrorDomain ෮ݩΩϟϯηϧ࣌ʹฦ͖ͬͯͨ
 Τϥʔίʔυ SSErrorDomain ͳΜ͔ͪΐͬͱҧ͏

  39. SSErrorDomain • StoreKit಺෦Ͱൃੜ͢ΔΤϥʔͷίʔυ͕࿙ΕͨΑ͏ • Open Radar: https://openradar.appspot.com/25502597
 • υΩϡϝϯτԽ͞Ε͍ͯͳ͍ͷͰϋϯυϦϯάͷ͠Α͏͕ͳ͍
 •

    ݱঢ়ΈͯͶͰ͸ͪ͜ΒͷΤϥʔίʔυ΋guardจͰ return ͯ͠
 ରॲ͍ͯ͠Δ
  40. 4. υΩϡϝϯτʹͳ͍ ௨஌λΠϓ͕ฦͬͯ͘Δ

  41. ͋Δ೔ͷSlack • ϨγʔτॲཧपΓͷΤϥʔ͕ྲྀΕͯ͘ΔSlackͷνϟϯωϧʹͯ
 ෆԺͳϝοηʔδ͕දࣔ͞ΕΔ

  42. ͋Δ೔ͷSlack • ϨγʔτॲཧपΓͷΤϥʔ͕ྲྀΕͯ͘ΔSlackͷνϟϯωϧʹͯ
 ෆԺͳϝοηʔδ͕දࣔ͞ΕΔ

  43. ͋Δ೔ͷSlack

  44. Ṗͷঢ়ଶߋ৽௨஌λΠϓ
 DID_CHANGE_RENEWAL_STATUS

  45. ࣍ͷ೔ͷSlack

  46. Subscription Offers • iOS 12.2͔Βར༻ՄೳʹͳΔɺαϒεΫϦϓγϣϯΛղ໿ͨ͠Ϣʔβʔʹର͠ ͯఏڙͰ͖ΔDiscountͷ৽͍͠ϓϩϞʔγϣϯϓϥϯ • `DID_CHANGE_RENEWAL_STATUS` ͸ͦΕʹ෇ਵͯ͠ఏڙ͞Εͨ৽͍͠௨஌ λΠϓ

    • ΈͯͶ͸هࣄެ։લʹ͜ͷ௨஌λΠϓͷଘࡏʹ͍ͭͯ஌ͬͨ਺গͳ͍νʔϜ
 ࠓޙ΋ෆ༻ҙʹ৽͍͠௨஌λΠϓΛ଍͞ΕΔՄೳੑ͕͋ΔͷͰɺ
 ߟྀͯ͠αʔόʔαΠυ͸࣮૷͠Α͏
  47. 5. ਃ੥ͨ͠ߪೖΞΠςϜ͸ औΓԼ͛Δ͜ͱ͕Ͱ͖ͳ͍

  48. rejectͷόοϑΝͱͯ͠Ծਃ੥ • Կճ͔reject͞ΕΔ͜ͱΛݟӽͯ͠ΈͯͶ͸iOSΞϓϦΛ2݄Լ० ʹԾਃ੥͍ͯͨ͠ • ҊͷఆԿ౓͔ϦδΣΫτΛ͘Βͬͨ ❌
 ͕ɺແࣄʹ৹͕ࠪ௨Δʂʂʂ

  49. ਺೔ޙ… • ϓϨϛΞϜެ։લʹόάϑΟοΫεͷࠩ෼ΛผϦϦʔεͱͯ͠ग़͢ ͜ͱʹ • ;ͱAppStoreΛͷ͍͍ͧͯΔͱ…

  50. None
  51. None
  52. None
  53. ϓϨϛΞϜ͕ϦϦʔε͞Ε͍ͯΔ

  54. ΞϓϦ಺՝ۚͷਃ੥ • ΞϓϦ಺՝ۚͷ࠷ॳͷਃ੥͸ରԠ͢Δipa(όΠφϦ)ʹඥ͚ͮͯਃ ੥͢Δඞཁ͕͋Δ • ࣍ճҎ߱ͷΞϓϦ಺՝ۚͷਃ੥͸ͦΕࣗ਎ͷΈͰՄೳ

  55. Կ͕μϝͩͬͨʁ • ΞϓϦ಺՝ۚͷਃ੥࣌ʹAppStoreConnect্Ͱʮ഑৴Մೳʯͷ νΣοΫϘοΫεΛ unchecked ʹ͢Δ΂͖ͩͬͨʁ

  56. ޙ͔Β֎ͤͳ͍ͷʁ • `disabled` ʹͳ͍ͬͯͯ֎ͤͳ͔ͬͨ • ެࣜυΩϡϝϯτతʹ͸ݖݶ͕͋Ε͹ૢ࡞Ͱ͖Δ͸ͣͳͷʹ • https://help.apple.com/app-store-connect/#/ dev360aba524 •

    AppleʹԿ౓΋໰͍߹Θ͕ͤͨͪ͜Βͷ༧ظ͢Δճ౴͸ಘΒΕͳ ͔ͬͨ…
  57. Έͳ͞Μ͸ؾΛ͚͍ͭͯͩ͘͞

  58. WWDCͰ৭ʑฉ͍͖ͯ·͢ ✈

  59. Thank you!!!