$30 off During Our Annual Pro Sale. View Details »

StoreKitTestを使ってアプリ内課金のテストや検証を効率化する方法

BOB
September 02, 2023

 StoreKitTestを使ってアプリ内課金のテストや検証を効率化する方法

BOB

September 02, 2023
Tweet

More Decks by BOB

Other Decks in Technology

Transcript

  1. StoreKitTestΛ࢖ͬͯΞϓϦ
    ಺՝ۚͷςετ΍ݕূΛޮ཰
    Խ͢Δํ๏
    2023/09/02


    Arata Yokoyama


    GitHub : ARATAYOKOYAMA X : BOBG1018Vi

    View Slide

  2. About Me
    • ԣࢁ৽


    • 2020೥αΠόʔΤʔδΣϯτ৽ଔೖࣾ


    • λοϓϧͷiOSΤϯδχΞ


    • ๺ւಓग़਎
    2

    View Slide

  3. ؔ࿈ηογϣϯ
    StoreKit2Λ࢖ͬͨ՝ۚγεςϜͷϑϧϦχϡʔΞϧ


    • 2023/09/03 11:00ʙTrack B


    • https://fortee.jp/iosdc-japan-2023/proposal/38b684f3-86a6-43be-8d27-48d9710626bf


    طଘαϒεΫϦϓγϣϯ঎඼ʹΞοϓάϨʔυɾμ΢ϯάϨʔυ঎඼Λ௥Ճ͠Α
    ͏


    • https://fortee.jp/iosdc-japan-2022/proposal/
    466c7cea-375f-427e-9fe1-73e651693615
    3

    View Slide

  4. StoreKitTestͱ͸
    4

    View Slide

  5. StoreKitTestͱ͸
    ● WWDC2020Ͱൃද͞Εͨ՝ۚςετ༻ͷϑϨʔϜϫʔΫͰ͢


    ● ࠷େͷಛ௃͸ɼAppStoreConnectΛհͣ͞ʹಈ࡞͢Δ͜ͱͰ͢


    ● ಈ࡞ʹ͸StoreKit configurationΛ࢖༻͠·͢


    ● ಈ࡞ཁ݅͸iOS14.0Ҏ্Ͱ͢


    ● ػೳΛϑϧ׆༻͠Α͏ͱ͢Δͱɼ14.2Ҏ্͕ඞཁͰ͢


    ● ࣮ػɼγϛϡϨʔλʔΛ໰Θͣಈ࡞͠·͢
    5

    View Slide

  6. Sandboxͱͷҧ͍
    6

    View Slide

  7. Sandboxͱͷҧ͍
    πʔϧ App Store


    Connectͷઃఆ͕ඞཁ
    App StoreʹΑͬͯ


    ॺ໊͞ΕͨAppϨγʔτΛ
    ఏڙ
    Ϣʔβʔ΁ͷ੥ٻ͕ൃੜ
    XcodeͷStoreKitςετ × ×(XcodeʹΑΔॺ໊) ×
    Sandbox ○ ○ ×
    TestFlightʢSandboxΛ
    ࢖༻ʣ
    ○ ○ ×
    ● StoreKitTest͸AppStoreConnectʹ࣮ࡍͷ঎඼Λ࡞੒͢Δඞཁ͕ͳ͍


    ● ੜ੒͞ΕΔϨγʔτٴͼɼTransaction͸μϛʔͰ͋Δ


    ● ςετ΍࣮ࡍͷڍಈʹ͍ͭͯ͸ޙ΄Ͳ
    7

    View Slide

  8. StoreKit configurationͷಋೖํ๏
    8

    View Slide

  9. σϞΞϓϦ
    iOSDC2023-StoreKitTestDEMO


    ● Xcode14.3.1/iOS16.4


    ● StoreKit2, StoreKit configuration, StoreKitTestΛ࠾༻


    ● https://github.com/ARATAYOKOYAMA/iOSDC2023-
    StoreKitTestDEMO
    9

    View Slide

  10. σϞΞϓϦ
    10
    View Presenter PurchaseService
    MeService
    - ࣗ෼ͷ৘ใΛऔಘ͢Δ
    - ߪೖ͢Δ


    - ෮ݩ͢Δ
    - ֤αʔϏεʹࢦࣔΛग़͢


    - ݁ՌΛViewʹ൓өͤ͞Δ

    View Slide

  11. ConfigurationΛ࡞੒ ಋೖํ๏(1/8)
    1. Xcode͔ΒFile > New > FileΛબ୒ͯ͠ɼStoreKitͱೖྗ


    2. StoreKit Configuration FileΛબ୒͠ɼ໊લΛೖྗͯ͠อଘ

    *ࠓճ͸Sync this file with an app in App Store ConnectͷνΣοΫ͸ೖΕͳ͍

    *νΣοΫΛೖΕͨ৔߹͸ɼAppStoreConnectͱಉظͤ͞Δ͜ͱ͕Ͱ͖·͢
    11

    View Slide

  12. ࡞੒ͨ͠ConfigurationΛ֬ೝ ಋೖํ๏(2/8)
    12

    View Slide

  13. ࣗಈߋ৽αϒεΫϦϓγϣϯΛ࡞੒ ಋೖํ๏(3/8)
    • ֤छྨ͝ͱʹApp಺՝ۚΛ࡞੒Ͱ͖·͢

    *ࠓճ͸ࣗಈߋ৽αϒεΫϦϓγϣϯͰઆ໌͠·͢
    13

    View Slide

  14. αϒεΫϦϓγϣϯάϧʔϓ໊Λೖྗ ಋೖํ๏(4/8)
    14

    View Slide

  15. ঎඼໊ͱIDΛೖྗ ಋೖํ๏(5/8)
    15

    View Slide

  16. ׬੒ͨ͠ConfigurationΛ֬ೝ ಋೖํ๏(6/8)
    ࡞੒ͨ͠঎඼
    Ձ֨౳
    ΦϑΝʔྨ
    ϩʔΧϥΠζ
    16

    View Slide

  17. StoreKitTest༻ূ໌ॻͷൃߦ ಋೖํ๏(7/8)
    17

    View Slide

  18. ൃߦͨ͠ূ໌ॻͷ֬ೝ ಋೖํ๏(8/8)
    18

    View Slide

  19. StoreKit configurationΛ࢖༻͢Δ
    19

    View Slide

  20. StoreKit configurationΛ࢖༻͢Δ
    20

    View Slide

  21. ஫ҙ఺ɿΦϦδφϧͷStoreKit
    • XcodeʹΑͬͯॺ໊͞ΕͨϨγʔτ͕ൃߦ͞ΕΔͨΊɼద੾ʹϋϯυϦϯά͢Δඞཁ͕͋Γ·͢


    • λοϓϧͰ͸ɼςετத͔Ͳ͏͔Ͱฦ٫͢ΔϨγʔτΛมߋ͍ͯ͠·͢
    21

    View Slide

  22. ஫ҙ఺ɿStoreKit2
    iOS16Ҏ্͔ͭStoreKit2Ͱ͋Ε͹ɼtransactionʹؚ·ΕΔAppStore.Environment
    ͕࢖༻ՄೳͰ͢
    22

    View Slide

  23. ֤छΦϑΝʔ
    23

    View Slide

  24. ͓ࢼ͠ΦϑΝʔ
    • ౎౓෷͍ɼલ෷͍ɼແྉͱຊ൪ͱಉ༷ʹઃఆՄೳͰ͢


    • Ձ֨΍ظؒ΋೚ҙͷ஋ΛઃఆͰ͖·͢
    24

    View Slide

  25. ϓϩϞʔγϣϯΦϑΝʔ
    • ͓ࢼ͠ΦϑΝʔͱಉ༷ʹࢧ෷͍ํ๏ͳͲॊೈʹઃఆՄೳͰ͢


    • ຊ൪ͱ͸ҟͳΓ1঎඼ʹ30Ҏ্ͷϓϩϞʔγϣϯΦϑΝʔΛઃఆͯ͠΋໰୊ͳͦ͞͏Ͱͨ͠
    25

    View Slide

  26. ϓϩϞʔγϣϯΦϑΝʔ
    • Editor > Subscription Offers Key ͔ΒKeyIDͱsignature͕Θ͔Γ·͢


    • nonce͸ద౰ͳUUIDɼtimestamp΋ద౰ͳ஋Ͱ໰୊͋Γ·ͤΜ
    26

    View Slide

  27. ΦϑΝʔίʔυ
    • ΦϑΝʔίʔυ΋ಉ༷ʹՁ֨౳ઃఆͰ͖·͢


    • ର৅΍͓ࢼ͠ΦϑΝʔͱͷ༏ઌॱҐ΋ઃఆͰ͖·͢


    • Reference Name͕ͦͷ··ίʔυͱͳΓɼೖྗ͞Εͨঢ়ଶͰಈ࡞͠·͢
    27

    View Slide

  28. ࣦഊɾฦۚΛ࠶ݱ͢Δ
    28

    View Slide

  29. ܾࡁࣦഊΛ࠶ݱ͢Δ
    ● Ұ෦ͷέʔε͚ͩͰ͕͢ɼڧ੍తʹΤϥʔΛൃੜͤ͞Δ͜ͱ͕Ͱ͖·͢


    ● ͜ΕΒͷέʔε͕ͦͷ··StoreKitTestͰѻ͑ΔΤϥʔͰ͢
    छྨ ֓ཁ
    SKErrorUnknown


    ෆ໌·ͨ͸༧ظ͠ͳ͍Τϥʔ͕ൃੜ͠
    ͨ͜ͱΛࣔ͢
    SKErrorInvalidOfferIde
    ntifier
    ΦϑΝʔ ID ͕ແޮͰ͋Δ͜ͱΛࣔ͢
    SKErrorInvalidOfferIde
    ntifier
    ࢧ෷ׂ͍Ҿͷॺ໊͕ແޮͰ͋Δ͜ͱΛ
    ࣔ͢
    SKErrorMissingOfferPa
    rams
    ࢧ෷ׂ͍Ҿʹύϥϝʔλʔ͕ܽམ͍ͯ͠
    Δ͜ͱΛࣔ͢
    SKErrorInvalidOfferPric
    e
    App Store Connect Ͱࢦఆͨ͠Ձ͕֨ແޮ
    Ͱ͋Δ͜ͱΛࣔ͢
    29

    View Slide

  30. ܾࡁࣦഊσϞ
    30

    View Slide

  31. ܾࡁࣦഊσϞ
    31

    View Slide

  32. ฦۚΛ࠶ݱ͢Δ
    ೚ҙͷ༗ޮͳτϥϯβΫγϣϯΛબ୒ͯ͠
    Refund PurchaseΛબ୒͢Δ
    32

    View Slide

  33. StoreKitTestΛ༻͍ͯUnitTestΛॻ͘
    33

    View Slide

  34. ڞ௨ॲཧ
    Testதʹ࢖༻͢ΔConfigurationΛಡΈࠐΉ
    34

    View Slide

  35. ڞ௨ॲཧ
    disableDialogs


    ܾࡁ࣌౳ʹදࣔ͞ΕΔμΠΞϩάදࣔ
    ΛແޮԽ͢Δ
    35

    View Slide

  36. ڞ௨ॲཧ
    clearTransactions


    τϥϯβΫγϣϯΛۭʹ͢Δ
    36

    View Slide

  37. ڞ௨ॲཧ
    failTransactionsEnabled


    ܾࡁΛඞͣ੒ޭͤ͞Δ
    37

    View Slide

  38. ڞ௨ॲཧ
    timeRate


    αϒεΫϦϓγϣϯͷߋ৽ස౓


    oneRenewalEveryTwoSeconds͸શ
    ͯͷظ͕ؒ1ճ/2ඵؒ
    38

    View Slide

  39. ڞ௨ॲཧ
    τϥϯβΫγϣϯΛۭʹ͢Δ
    39

    View Slide

  40. ੒ޭ
    ಛผͳ͜ͱ͸ͤͣɼςετΛॻ͍ͯOK
    40

    View Slide

  41. ࣦഊ
    failTransactionsEnabled = true


    ܾࡁΛඞࣦͣഊͤ͞Δ


    failureError = .unknown


    ࣦഊཧ༝


    41

    View Slide

  42. ෮ݩ
    buyProduct


    SKTestSessionʹؚ·ΕΔؔ਺


    ΞϓϦ֎͔Βߪೖͨ͠ͳͲͷςετʹ
    ໾ཱͪ·͢


    42

    View Slide

  43. transaction.updatesͷ؂ࢹ
    ׬ྃ͢ΔTaskͰ͸ͳ͍ͷͰɼઃఆͨ͠
    timeRateʹରԠ͢ΔܗͰsleepΛೖΕ
    Δ
    43

    View Slide

  44. Grace Period
    billingGracePeriodIsEnabled


    billing RetryͱGracePeriodΛ༗ޮԽ


    shouldEnterBillingRetryOnRenewal


    αϒεΫϦϓγϣϯͷߋ৽࣌ʹಥೖͤ͞Δ
    forceRenewalOfSubscription


    ೚ҙͷαϒεΫϦϓγϣϯΛڧ੍తʹ
    ߋ৽͢Δ
    44

    View Slide

  45. UnitTestҎ֎ͷ͓͢͢Ίར༻γʔϯ
    45

    View Slide

  46. StoreKit2΁ͷஔ͖׵͑αϙʔτ
    ● Ϣχοτςετ͸΋ͪΖΜɼτϥϯβΫγϣϯͷڍಈΛҰͭͮͭ֬ೝͰ͖Δ
    ͜ͱ͸ڧྗͳαϙʔτ


    ● verifyReceiptͷΤϯυϙΠϯτ͕Deprecatedʹͳͬͨ͜ͱΛड͚ͯɼຊ֨త
    ʹStoreKit2΁ͷҠߦΛݕ౼͢ΔϑΣʔζʹདྷͨͱࢥΘΕ·͢


    ● https://buy.itunes.apple.com/verifyReceipt


    ● طʹλοϓϧ͸StoreKit2΁ͷҠߦΛ׬͓ྃͯ͠Γɼͦͷ಺༰͸ͪ͜Βͷηο
    γϣϯͰͥͻޚཡ͍ͩ͘͞


    ● 09/03 11:00ʙTrack B StoreKit2Λ࢖ͬͨ՝ۚγεςϜͷϑϧϦχϡʔΞϧ
    46

    View Slide

  47. MVPͷ։ൃ΍ϋοΧιϯͳͲ
    ● αʔόଆͷ։ൃΛ଴ͨͣͯ͠ɼ՝ۚϩδοΫͷ࣮૷ΛਐΊΒΕΔ


    ● ϋοΧιϯͳͲຊ൪૝ఆͰ͸ͳ͍։ൃʹ͓͍ͯ΋ɼඞཁ࠷௿ݶͷߏ੒ͰσϞ
    Λ࣮ݱͰ͖Δ
    47

    View Slide

  48. Flutter
    ● XcodeٴͼiOSͷػೳͰ͋ΔͨΊɼFlutter։ൃʹ͓͍ͯ΋ಉ༷ͷԸܙΛड͚Δ
    ͜ͱ͕Ͱ͖·͢
    48

    View Slide

  49. ࢀߟจݙ
    ● https://developer.apple.com/jp/documentation/storekit/in-app_purchase/
    testing_at_all_stages_of_development_with_xcode_and_sandbox/


    ● https://developer.apple.com/documentation/xcode/setting-up-storekit-testing-
    in-xcode


    ● https://developer.apple.com/documentation/storekit/appstore/environment


    ● https://developer.apple.com/documentation/appstorereceipts/verifyreceipt

    View Slide

  50. StoreKitTestΛ࢖ͬͯΞϓϦ
    ಺՝ۚͷςετ΍ݕূΛޮ཰
    Խ͢Δํ๏
    2023/09/02


    Arata Yokoyama


    GitHub : ARATAYOKOYAMA X : BOBG1018Vi

    View Slide