Slide 1

Slide 1 text

StoreKitTestΛ࢖ͬͯΞϓϦ ಺՝ۚͷςετ΍ݕূΛޮ཰ Խ͢Δํ๏ 2023/09/02 Arata Yokoyama GitHub : ARATAYOKOYAMA X : BOBG1018Vi

Slide 2

Slide 2 text

About Me • ԣࢁ৽ • 2020೥αΠόʔΤʔδΣϯτ৽ଔೖࣾ • λοϓϧͷiOSΤϯδχΞ • ๺ւಓग़਎ 2

Slide 3

Slide 3 text

ؔ࿈ηογϣϯ 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

Slide 4

Slide 4 text

StoreKitTestͱ͸ 4

Slide 5

Slide 5 text

StoreKitTestͱ͸ ● WWDC2020Ͱൃද͞Εͨ՝ۚςετ༻ͷϑϨʔϜϫʔΫͰ͢ ● ࠷େͷಛ௃͸ɼAppStoreConnectΛհͣ͞ʹಈ࡞͢Δ͜ͱͰ͢ ● ಈ࡞ʹ͸StoreKit configurationΛ࢖༻͠·͢ ● ಈ࡞ཁ݅͸iOS14.0Ҏ্Ͱ͢ ● ػೳΛϑϧ׆༻͠Α͏ͱ͢Δͱɼ14.2Ҏ্͕ඞཁͰ͢ ● ࣮ػɼγϛϡϨʔλʔΛ໰Θͣಈ࡞͠·͢ 5

Slide 6

Slide 6 text

Sandboxͱͷҧ͍ 6

Slide 7

Slide 7 text

Sandboxͱͷҧ͍ πʔϧ App Store Connectͷઃఆ͕ඞཁ App StoreʹΑͬͯ ॺ໊͞ΕͨAppϨγʔτΛ ఏڙ Ϣʔβʔ΁ͷ੥ٻ͕ൃੜ XcodeͷStoreKitςετ × ×(XcodeʹΑΔॺ໊) × Sandbox ○ ○ × TestFlightʢSandboxΛ ࢖༻ʣ ○ ○ × ● StoreKitTest͸AppStoreConnectʹ࣮ࡍͷ঎඼Λ࡞੒͢Δඞཁ͕ͳ͍ ● ੜ੒͞ΕΔϨγʔτٴͼɼTransaction͸μϛʔͰ͋Δ ● ςετ΍࣮ࡍͷڍಈʹ͍ͭͯ͸ޙ΄Ͳ 7

Slide 8

Slide 8 text

StoreKit configurationͷಋೖํ๏ 8

Slide 9

Slide 9 text

σϞΞϓϦ iOSDC2023-StoreKitTestDEMO ● Xcode14.3.1/iOS16.4 ● StoreKit2, StoreKit configuration, StoreKitTestΛ࠾༻ ● https://github.com/ARATAYOKOYAMA/iOSDC2023- StoreKitTestDEMO 9

Slide 10

Slide 10 text

σϞΞϓϦ 10 View Presenter PurchaseService MeService - ࣗ෼ͷ৘ใΛऔಘ͢Δ - ߪೖ͢Δ - ෮ݩ͢Δ - ֤αʔϏεʹࢦࣔΛग़͢ - ݁ՌΛViewʹ൓өͤ͞Δ

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

StoreKit configurationΛ࢖༻͢Δ 19

Slide 20

Slide 20 text

StoreKit configurationΛ࢖༻͢Δ 20

Slide 21

Slide 21 text

஫ҙ఺ɿΦϦδφϧͷStoreKit • XcodeʹΑͬͯॺ໊͞ΕͨϨγʔτ͕ൃߦ͞ΕΔͨΊɼద੾ʹϋϯυϦϯά͢Δඞཁ͕͋Γ·͢ • λοϓϧͰ͸ɼςετத͔Ͳ͏͔Ͱฦ٫͢ΔϨγʔτΛมߋ͍ͯ͠·͢ 21

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

֤छΦϑΝʔ 23

Slide 24

Slide 24 text

͓ࢼ͠ΦϑΝʔ • ౎౓෷͍ɼલ෷͍ɼແྉͱຊ൪ͱಉ༷ʹઃఆՄೳͰ͢ • Ձ֨΍ظؒ΋೚ҙͷ஋ΛઃఆͰ͖·͢ 24

Slide 25

Slide 25 text

ϓϩϞʔγϣϯΦϑΝʔ • ͓ࢼ͠ΦϑΝʔͱಉ༷ʹࢧ෷͍ํ๏ͳͲॊೈʹઃఆՄೳͰ͢ • ຊ൪ͱ͸ҟͳΓ1঎඼ʹ30Ҏ্ͷϓϩϞʔγϣϯΦϑΝʔΛઃఆͯ͠΋໰୊ͳͦ͞͏Ͱͨ͠ 25

Slide 26

Slide 26 text

ϓϩϞʔγϣϯΦϑΝʔ • Editor > Subscription Offers Key ͔ΒKeyIDͱsignature͕Θ͔Γ·͢ • nonce͸ద౰ͳUUIDɼtimestamp΋ద౰ͳ஋Ͱ໰୊͋Γ·ͤΜ 26

Slide 27

Slide 27 text

ΦϑΝʔίʔυ • ΦϑΝʔίʔυ΋ಉ༷ʹՁ֨౳ઃఆͰ͖·͢ • ର৅΍͓ࢼ͠ΦϑΝʔͱͷ༏ઌॱҐ΋ઃఆͰ͖·͢ • Reference Name͕ͦͷ··ίʔυͱͳΓɼೖྗ͞Εͨঢ়ଶͰಈ࡞͠·͢ 27

Slide 28

Slide 28 text

ࣦഊɾฦۚΛ࠶ݱ͢Δ 28

Slide 29

Slide 29 text

ܾࡁࣦഊΛ࠶ݱ͢Δ ● Ұ෦ͷέʔε͚ͩͰ͕͢ɼڧ੍తʹΤϥʔΛൃੜͤ͞Δ͜ͱ͕Ͱ͖·͢ ● ͜ΕΒͷέʔε͕ͦͷ··StoreKitTestͰѻ͑ΔΤϥʔͰ͢ छྨ ֓ཁ SKErrorUnknown ෆ໌·ͨ͸༧ظ͠ͳ͍Τϥʔ͕ൃੜ͠ ͨ͜ͱΛࣔ͢ SKErrorInvalidOfferIde ntifier ΦϑΝʔ ID ͕ແޮͰ͋Δ͜ͱΛࣔ͢ SKErrorInvalidOfferIde ntifier ࢧ෷ׂ͍Ҿͷॺ໊͕ແޮͰ͋Δ͜ͱΛ ࣔ͢ SKErrorMissingOfferPa rams ࢧ෷ׂ͍Ҿʹύϥϝʔλʔ͕ܽམ͍ͯ͠ Δ͜ͱΛࣔ͢ SKErrorInvalidOfferPric e App Store Connect Ͱࢦఆͨ͠Ձ͕֨ແޮ Ͱ͋Δ͜ͱΛࣔ͢ 29

Slide 30

Slide 30 text

ܾࡁࣦഊσϞ 30

Slide 31

Slide 31 text

ܾࡁࣦഊσϞ 31

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

StoreKitTestΛ༻͍ͯUnitTestΛॻ͘ 33

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

ڞ௨ॲཧ failTransactionsEnabled ܾࡁΛඞͣ੒ޭͤ͞Δ 37

Slide 38

Slide 38 text

ڞ௨ॲཧ timeRate αϒεΫϦϓγϣϯͷߋ৽ස౓ oneRenewalEveryTwoSeconds͸શ ͯͷظ͕ؒ1ճ/2ඵؒ 38

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

ࣦഊ failTransactionsEnabled = true ܾࡁΛඞࣦͣഊͤ͞Δ failureError = .unknown ࣦഊཧ༝ 41

Slide 42

Slide 42 text

෮ݩ buyProduct SKTestSessionʹؚ·ΕΔؔ਺ ΞϓϦ֎͔Βߪೖͨ͠ͳͲͷςετʹ ໾ཱͪ·͢ 42

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Grace Period billingGracePeriodIsEnabled billing RetryͱGracePeriodΛ༗ޮԽ shouldEnterBillingRetryOnRenewal αϒεΫϦϓγϣϯͷߋ৽࣌ʹಥೖͤ͞Δ forceRenewalOfSubscription ೚ҙͷαϒεΫϦϓγϣϯΛڧ੍తʹ ߋ৽͢Δ 44

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

StoreKit2΁ͷஔ͖׵͑αϙʔτ ● Ϣχοτςετ͸΋ͪΖΜɼτϥϯβΫγϣϯͷڍಈΛҰͭͮͭ֬ೝͰ͖Δ ͜ͱ͸ڧྗͳαϙʔτ ● verifyReceiptͷΤϯυϙΠϯτ͕Deprecatedʹͳͬͨ͜ͱΛड͚ͯɼຊ֨త ʹStoreKit2΁ͷҠߦΛݕ౼͢ΔϑΣʔζʹདྷͨͱࢥΘΕ·͢ ● https://buy.itunes.apple.com/verifyReceipt ● طʹλοϓϧ͸StoreKit2΁ͷҠߦΛ׬͓ྃͯ͠Γɼͦͷ಺༰͸ͪ͜Βͷηο γϣϯͰͥͻޚཡ͍ͩ͘͞ ● 09/03 11:00ʙTrack B StoreKit2Λ࢖ͬͨ՝ۚγεςϜͷϑϧϦχϡʔΞϧ 46

Slide 47

Slide 47 text

MVPͷ։ൃ΍ϋοΧιϯͳͲ ● αʔόଆͷ։ൃΛ଴ͨͣͯ͠ɼ՝ۚϩδοΫͷ࣮૷ΛਐΊΒΕΔ ● ϋοΧιϯͳͲຊ൪૝ఆͰ͸ͳ͍։ൃʹ͓͍ͯ΋ɼඞཁ࠷௿ݶͷߏ੒ͰσϞ Λ࣮ݱͰ͖Δ 47

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

ࢀߟจݙ ● 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

Slide 50

Slide 50 text

StoreKitTestΛ࢖ͬͯΞϓϦ ಺՝ۚͷςετ΍ݕূΛޮ཰ Խ͢Δํ๏ 2023/09/02 Arata Yokoyama GitHub : ARATAYOKOYAMA X : BOBG1018Vi