iOSDC2023 https://fortee.jp/iosdc-japan-2023/proposal/338c5361-c647-4b24-ac00-fa712ee702c8
StoreKitTestΛͬͯΞϓϦ՝ۚͷςετݕূΛޮԽ͢Δํ๏2023/09/02Arata YokoyamaGitHub : ARATAYOKOYAMA X : BOBG1018Vi
View Slide
About Me• ԣࢁ৽• 2020αΠόʔΤʔδΣϯτ৽ଔೖࣾ• λοϓϧͷiOSΤϯδχΞ• ւಓग़2
ؔ࿈ηογϣϯ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-73e6516936153
StoreKitTestͱ4
StoreKitTestͱ● WWDC2020Ͱൃද͞Εͨ՝ۚςετ༻ͷϑϨʔϜϫʔΫͰ͢● ࠷େͷಛɼAppStoreConnectΛհͣ͞ʹಈ࡞͢Δ͜ͱͰ͢● ಈ࡞ʹStoreKit configurationΛ༻͠·͢● ಈ࡞ཁ݅iOS14.0Ҏ্Ͱ͢● ػೳΛϑϧ׆༻͠Α͏ͱ͢Δͱɼ14.2Ҏ্͕ඞཁͰ͢● ࣮ػɼγϛϡϨʔλʔΛΘͣಈ࡞͠·͢5
Sandboxͱͷҧ͍6
Sandboxͱͷҧ͍πʔϧ App StoreConnectͷઃఆ͕ඞཁApp StoreʹΑͬͯॺ໊͞ΕͨAppϨγʔτΛఏڙϢʔβʔͷٻ͕ൃੜXcodeͷStoreKitςετ × ×(XcodeʹΑΔॺ໊) ×Sandbox ○ ○ ×TestFlightʢSandboxΛ༻ʣ○ ○ ×● StoreKitTestAppStoreConnectʹ࣮ࡍͷΛ࡞͢Δඞཁ͕ͳ͍● ੜ͞ΕΔϨγʔτٴͼɼTransactionμϛʔͰ͋Δ● ςετ࣮ࡍͷڍಈʹ͍ͭͯޙ΄Ͳ7
StoreKit configurationͷಋೖํ๏8
σϞΞϓϦiOSDC2023-StoreKitTestDEMO● Xcode14.3.1/iOS16.4● StoreKit2, StoreKit configuration, StoreKitTestΛ࠾༻● https://github.com/ARATAYOKOYAMA/iOSDC2023-StoreKitTestDEMO9
σϞΞϓϦ10View Presenter PurchaseServiceMeService- ࣗͷใΛऔಘ͢Δ- ߪೖ͢Δ- ෮ݩ͢Δ- ֤αʔϏεʹࢦࣔΛग़͢- ݁ՌΛViewʹөͤ͞Δ
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
࡞ͨ͠ConfigurationΛ֬ೝ ಋೖํ๏(2/8)12
ࣗಈߋ৽αϒεΫϦϓγϣϯΛ࡞ ಋೖํ๏(3/8)• ֤छྨ͝ͱʹApp՝ۚΛ࡞Ͱ͖·͢ *ࠓճࣗಈߋ৽αϒεΫϦϓγϣϯͰઆ໌͠·͢13
αϒεΫϦϓγϣϯάϧʔϓ໊Λೖྗ ಋೖํ๏(4/8)14
໊ͱIDΛೖྗ ಋೖํ๏(5/8)15
ͨ͠ConfigurationΛ֬ೝ ಋೖํ๏(6/8)࡞ͨ͠Ձ֨ΦϑΝʔྨϩʔΧϥΠζ16
StoreKitTest༻ূ໌ॻͷൃߦ ಋೖํ๏(7/8)17
ൃߦͨ͠ূ໌ॻͷ֬ೝ ಋೖํ๏(8/8)18
StoreKit configurationΛ༻͢Δ19
StoreKit configurationΛ༻͢Δ20
ҙɿΦϦδφϧͷStoreKit• XcodeʹΑͬͯॺ໊͞ΕͨϨγʔτ͕ൃߦ͞ΕΔͨΊɼదʹϋϯυϦϯά͢Δඞཁ͕͋Γ·͢• λοϓϧͰɼςετத͔Ͳ͏͔Ͱฦ٫͢ΔϨγʔτΛมߋ͍ͯ͠·͢21
ҙɿStoreKit2iOS16Ҏ্͔ͭStoreKit2Ͱ͋Εɼtransactionʹؚ·ΕΔAppStore.Environment͕༻ՄೳͰ͢22
֤छΦϑΝʔ23
͓ࢼ͠ΦϑΝʔ• ͍ɼલ͍ɼແྉͱຊ൪ͱಉ༷ʹઃఆՄೳͰ͢• Ձ֨ظؒҙͷΛઃఆͰ͖·͢24
ϓϩϞʔγϣϯΦϑΝʔ• ͓ࢼ͠ΦϑΝʔͱಉ༷ʹࢧ͍ํ๏ͳͲॊೈʹઃఆՄೳͰ͢• ຊ൪ͱҟͳΓ1ʹ30Ҏ্ͷϓϩϞʔγϣϯΦϑΝʔΛઃఆͯ͠ͳͦ͞͏Ͱͨ͠25
ϓϩϞʔγϣϯΦϑΝʔ• Editor > Subscription Offers Key ͔ΒKeyIDͱsignature͕Θ͔Γ·͢• nonceదͳUUIDɼtimestampదͳͰ͋Γ·ͤΜ26
ΦϑΝʔίʔυ• ΦϑΝʔίʔυಉ༷ʹՁ֨ઃఆͰ͖·͢• ର͓ࢼ͠ΦϑΝʔͱͷ༏ઌॱҐઃఆͰ͖·͢• Reference Name͕ͦͷ··ίʔυͱͳΓɼೖྗ͞Εͨঢ়ଶͰಈ࡞͠·͢27
ࣦഊɾฦۚΛ࠶ݱ͢Δ28
ܾࡁࣦഊΛ࠶ݱ͢Δ● Ұ෦ͷέʔε͚ͩͰ͕͢ɼڧ੍తʹΤϥʔΛൃੜͤ͞Δ͜ͱ͕Ͱ͖·͢● ͜ΕΒͷέʔε͕ͦͷ··StoreKitTestͰѻ͑ΔΤϥʔͰ͢छྨ ֓ཁSKErrorUnknownෆ໌·ͨ༧ظ͠ͳ͍Τϥʔ͕ൃੜͨ͜͠ͱΛࣔ͢SKErrorInvalidOfferIdentifierΦϑΝʔ ID ͕ແޮͰ͋Δ͜ͱΛࣔ͢SKErrorInvalidOfferIdentifierࢧׂ͍Ҿͷॺ໊͕ແޮͰ͋Δ͜ͱΛࣔ͢SKErrorMissingOfferParamsࢧׂ͍Ҿʹύϥϝʔλʔ͕ܽམ͍ͯ͠Δ͜ͱΛࣔ͢SKErrorInvalidOfferPriceApp Store Connect Ͱࢦఆͨ͠Ձ͕֨ແޮͰ͋Δ͜ͱΛࣔ͢29
ܾࡁࣦഊσϞ30
ܾࡁࣦഊσϞ31
ฦۚΛ࠶ݱ͢Δҙͷ༗ޮͳτϥϯβΫγϣϯΛબͯ͠Refund PurchaseΛબ͢Δ32
StoreKitTestΛ༻͍ͯUnitTestΛॻ͘33
ڞ௨ॲཧTestதʹ༻͢ΔConfigurationΛಡΈࠐΉ34
ڞ௨ॲཧdisableDialogsܾࡁ࣌ʹදࣔ͞ΕΔμΠΞϩάදࣔΛແޮԽ͢Δ35
ڞ௨ॲཧclearTransactionsτϥϯβΫγϣϯΛۭʹ͢Δ36
ڞ௨ॲཧfailTransactionsEnabledܾࡁΛඞͣޭͤ͞Δ37
ڞ௨ॲཧtimeRateαϒεΫϦϓγϣϯͷߋ৽සoneRenewalEveryTwoSecondsશͯͷظ͕ؒ1ճ/2ඵؒ38
ڞ௨ॲཧτϥϯβΫγϣϯΛۭʹ͢Δ39
ޭಛผͳ͜ͱͤͣɼςετΛॻ͍ͯOK40
ࣦഊfailTransactionsEnabled = trueܾࡁΛඞࣦͣഊͤ͞ΔfailureError = .unknownࣦഊཧ༝41
෮ݩbuyProductSKTestSessionʹؚ·ΕΔؔΞϓϦ֎͔Βߪೖͨ͠ͳͲͷςετʹཱͪ·͢42
transaction.updatesͷࢹྃ͢ΔTaskͰͳ͍ͷͰɼઃఆͨ͠timeRateʹରԠ͢ΔܗͰsleepΛೖΕΔ43
Grace PeriodbillingGracePeriodIsEnabledbilling RetryͱGracePeriodΛ༗ޮԽshouldEnterBillingRetryOnRenewalαϒεΫϦϓγϣϯͷߋ৽࣌ʹಥೖͤ͞ΔforceRenewalOfSubscriptionҙͷαϒεΫϦϓγϣϯΛڧ੍తʹߋ৽͢Δ44
UnitTestҎ֎ͷ͓͢͢Ίར༻γʔϯ45
StoreKit2ͷஔ͖͑αϙʔτ● ϢχοτςετͪΖΜɼτϥϯβΫγϣϯͷڍಈΛҰͭͮͭ֬ೝͰ͖Δ͜ͱڧྗͳαϙʔτ● verifyReceiptͷΤϯυϙΠϯτ͕Deprecatedʹͳͬͨ͜ͱΛड͚ͯɼຊ֨తʹStoreKit2ͷҠߦΛݕ౼͢ΔϑΣʔζʹདྷͨͱࢥΘΕ·͢● https://buy.itunes.apple.com/verifyReceipt● طʹλοϓϧStoreKit2ͷҠߦΛ͓ྃͯ͠Γɼͦͷ༰ͪ͜ΒͷηογϣϯͰͥͻޚཡ͍ͩ͘͞● 09/03 11:00ʙTrack B StoreKit2Λͬͨ՝ۚγεςϜͷϑϧϦχϡʔΞϧ46
MVPͷ։ൃϋοΧιϯͳͲ● αʔόଆͷ։ൃΛͨͣͯ͠ɼ՝ۚϩδοΫͷ࣮ΛਐΊΒΕΔ● ϋοΧιϯͳͲຊ൪ఆͰͳ͍։ൃʹ͓͍ͯɼඞཁ࠷ݶͷߏͰσϞΛ࣮ݱͰ͖Δ47
Flutter● XcodeٴͼiOSͷػೳͰ͋ΔͨΊɼFlutter։ൃʹ͓͍ͯಉ༷ͷԸܙΛड͚Δ͜ͱ͕Ͱ͖·͢48
ࢀߟจݙ● 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