4.4.9
.62.2
iOS ์ ์ฉ์ ๋๋ค. ์์ง Android์์ ํ ์คํธํ์ง ์์์ต๋๋ค.
๊ตฌ๋งค๋ฅผ ์๋ฃํ๊ธฐ ์ํด ๊ตฌ๋งค ๋ํ ์์๊ฐ ํ์๋๊ณ purchaseUpdatedListener๊ฐ ํธ์ถ๋ฉ๋๋ค.
requestSubscription ()์ ํธ์ถํฉ๋๋ค. ๊ตฌ๋งค ๋ํ ์์๊ฐ ์์ต๋๋ค. PurchaseUpdatedListener๊ฐ ๊ตฌ๋งค ๋ํ ์์ ๋๋ ์ ํจํ ์์์ฆ์์ด ์ฆ์ ํธ์ถ๋์์ต๋๋ค.
TestFlight๋ฅผ ์ฌ์ฉํ๋ ์ค์ iOS 14 ์ฅ์น.
RNIap.requestSubscription ()์ ํธ์ถํ์ญ์์ค.
๋ฉ๋ชจ:
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋๊ตฌ๋ ์ง ๋์ธ ์ ์์ต๋๊น?
์ค๋จ๋์ง ์์ง๋ง []
๋ฐํ
๊ตฌ๋งค ๋ํ ์์๊ฐ ํ์๋๊ณ ๊ตฌ๋งค ๋ฆฌ์ค๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํธ์ถ๋์ง๋ง requestSubscription
ํธ์ถ์ ํด๊ฒฐ๋์ง ์์ ์ฝ์์ ๋ฐํํฉ๋๋ค.
์ด๊ฒ์ด ์ฌ๊ธฐ์์ ํด๊ฒฐ๋์์ ์ ์์ต๋๋ค https://github.com/dooboolab/react-native-iap/pull/1064
์ด์ ์ ์ฝ์ ์์ ์ ์ ์ฉ ํ์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ๋์ง ์์ต๋๋ค.
iOS14์์ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค. ๋ค์์ ๋ด๊ฐ ํ ๋ฐฉ๋ฒ์
๋๋ค.
// request purchase, listener registered above will receive notification when processing done
RNIap.requestSubscription(this.productIds[0]).catch(err => {
console.log(err.code, err.message);
});
๋ถ์ธ ๋งค๊ฐ ๋ณ์๊ฐ false ์ธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋๋ฐ ์ด๊ฒ์ด ๊ถ์ฅ ์ฌํญ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ ๊ฑฐํ๊ณ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด iOS14์์ ์ฌ์ ํ ๋งค์ฐ ์ด์ํ ๋์์๋ณด๊ณ ์์ผ๋ฉฐ TestFlight๋ฅผ ํตํด iOS 13์ ์คํํ๋ iPhone ๋ฐ iPad์์ ์ ๋๋ก ์๋ํฉ๋๋ค. ๋ถ์ธ์ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์๊ณ requestSubscription์ ํ ์คํธํ๋๋ฐ iOS 14์์ ๊ตฌ๋งค ๋ํ ์์๊ฐ ํ์๋์ง ์์ต๋๋ค. ์ด์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๋ชป๋ ์์์ฆ์ฒ๋ผ ๋ณด์ด๋ RequestUpdatedListener๋ฅผ ์ฆ์ ํธ์ถํฉ๋๋ค.
TestFlight๋ฅผ ์ฌ์ฉํ์ฌ iOS14 ๋ฐ xCode 12์์ ๊ตฌ๋ ์ ๋ฌธ์ ๊ฐ์๋ ๋ค๋ฅธ ์ฌ๋์ด ์์ต๋๊น?
getPurchaseHistory()
๋๋ getAvailablePurchases()
์ง์ ์ requestSubscription()
ํ์ญ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๊ฒ์ iOS 14์์ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
ํ๋ฆ ์ด๊ธฐ์ getAvailablePurchases ()๋ฅผ ์ํํฉ๋๋ค. ์ฑ๋ก๋์ ๊ตฌ๋ ํ๋ฉด ๋ฐ๋ก ์์ ํ๋ฉด์ ๋๋ค.
๋ค, ๋ถํํ๋ ์ด๊ฒ์ iOS 14์ ๋ฒ๊ทธ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.์ด ํ๋ฌ๊ทธ์ธ์ ๊ฒฐํจ์ ์์ต๋๋ค. ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ํ์ธํ๋๋ฐ ๋์ผํ ๋ฌธ์ ์ ๋๋ค.
๊ทธ๊ฒ ๋ฌธ์ ์์ต๋๋ค. getAvailablePurchases () ํธ์ถ์ ์ ๊ฑฐํ๊ณ ๊ตฌ๋งค ํ์ ์ด ๋ฐ์ํ๊ณ ๊ตฌ๋งค๊ฐ ์ฑ๊ณตํ์ต๋๋ค. ์ ๊ฐ์ค๋ฝ๊ฒ๋ App Load์์ ๊ตฌ๋ ์ํ๋ฅผ ํ์ธํ๊ธฐ ๋๋ฌธ์ getAvailablePurchases๋ฅผ ํธ์ถํด์ผํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด iOS 14 ํจ์น๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ ๊ฐ์ต๋๊น? ๋ค๋ฅธ ์ฌ๋์ด ํ ์์๋ ์ผ์ ์์ต๋๊น? ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , theDev23 ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
์ฒ๋ง์์. ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๋ง๋ ์๋ฒ ๊ธฐ๋ฐ ๊ฒ์ฌ์ ์์กดํ๋ ๊ฒ์ ๋๋ค.
๋๋ ์๋ฒ๊ฐ ์ด๊ฒ์ํ๋ ๊ฒ์ ํผํ๊ณ ์ถ์๋ค. ๋ด ๋ฐ์์ ์ฝ๋๋ฅผ Firebase Cloud Function๊ณผ ๊ฐ์ ๊ฒ์ผ๋ก ๋ณต์ฌํ๋ ๊ฒ๋ง ํผ ์ฌ์ด๊ฐ์? ์๋๋ฉด ๋ค์ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ถํด์ผํ ๊น์? ์๋ง ๋ฉ์ฒญํ ์ง๋ฌธ ์ด๊ฒ ์ง๋ง, ์ฐ๋ฆฌ ๋ชจ๋ ๋ฉ์ฒญํ ์ง๋ฌธ์ํ๊ธฐ ์์ํ์ต๋๋ค. :)
@ the- dut iaphub ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ ์์์ฆ ํ์ธ์ ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๋ค.
๋ฏธ๊ตญ ์ค์๋ถ ์ง์ญ์ ๊ฑฐ์ฃผํ๋ ๊ฒฝ์ฐ ์ํ๋ ์๋ฃ. :)
๋ผ์ด๋ธ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น๋ ๋์ผํ ๋ฌธ์ ์ ๋๋ค. @ theDev23 iOS์ ๋ฌธ์ ์ ๋ํ ํ ๋ก ๋งํฌ๊ฐ ์์ต๋๊น? ์์ ํด์ผ ํ ์ผ์ ์ด ์์ต๋๊น?
@nicknjpconsultingllc ๋งํฌ๊ฐ ์์ต๋๋ค, ์ฃ์กํฉ๋๋ค. ๋๋ ์ค์ค๋ก ํ๊ณ ๋ค์๋ค.
@ the-dut Firebase Cloud Functions๋ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด ์ ์ฅ์๋ฅผ ํ์ธํ์ญ์์ค.
purchaseUpdatedListener์์ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌ๋งคํ ๋ ์์์ฆ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ํ ๋ค์ ์ฑ๋ก๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์์ฆ์ ๊ฐ์ ธ ์์ ๋ค์ ํ์ธํ๊ณ ๋ง๋ฃ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. ๊ทธ ๋๋ถ์ getAvailablePurchases () ํธ์ถ์ ์์จ ์์์์ต๋๋ค. iOS14์์ ์ ์๋ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ง๊ธ๊น์ง ์ ๋ง ์ ์๋ํ๊ณ ํจ์ฌ ๋น ๋ฆ ๋๋ค. ์ด์ ์ผ๋ง๋ ๋ฉ๋ฆฌ ๊ฐ์ ธ ๊ฐ์ผํ๋์ง์ ๋ํ ์ง๋ฌธ์ ๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐํ๋ ์ ๋ถ๋ผ๋ฉด, ํธ๋์ญ์ ์ ์๋ฃ ํ ๋๊น์ง ๊ตฌ๋ ์ ๋ํ ๋ชจ๋ ์ ๋ฐ์ดํธ (๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๊ฐฑ์ )์ ๋ํด UpdatedPurchaseListener๊ฐ ํธ์ถ๋ฉ๋๊น? ์๋๋ฉด ์๋ ๊ฐฑ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ์๋ฒ ๊ฐ ์๋ฆผ์ ๊ตฌํํด์ผํฉ๋๊น? ์ ๋ฐ์ดํธ ๋ PurchaseListener๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ฒ ๊ฐ ํตํฉ์ด ์๋ฒฝํ์ง ์๋ค๋ ๊ฒ์ ์ฝ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ๋์ (๊ทธ๋ฆฌ๊ณ ๋ ๊ฐ๋จํ) ์๋ฃจ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
getPurchaseHistory๋ฅผ ์ ๊ฑฐํ๊ณ promise ์์ ์ ์ ์ฉํ ํ์๋์ด ๋ฌธ์ ๊ฐ ๊ณ์ ๋ฐ์ํฉ๋๋ค. ๊ตฌ๋งค ๋ํ ์์๋ฅผ ํ์ ํ ์ ์์ต๋๋ค. ์๋ฌด๋ ๋์ธ ์ ์์ต๋๊น?
๊ตฌ๋งค ์์ฒญ์ํ๊ธฐ ์ ์ AIP์ ๊ฑฐ๋ ๋ชจ๋ ์ ํ๋ฅผ ์ดํด๋ณด์ญ์์ค. getAvailablePurchases ()๋ ํธ์ถํ๊ณ ์์ต๋๊น?
getAvailablePurchases () ๋ฐ getPurchaseHistory ()์ ๋ํ ํธ์ถ์ ์ ์ธ ํ ์ ์์ต๋๋ค. ์ด์จ๋ requestSubscription ()์ด ์ด๋ฌํ ํธ์ถ๋ก ๊ตฌ๋งค ๋ฉ๋ด๋ฅผ ํ์ ํ๋๋ก ๋ง๋ค ์ ์์ต๋๊น?
์๋ ํ์ธ์ @ HamzaIkram2727 , ์ ๊ฐ
@ the-dut getAvailablePurchases () ๋ฐ getPurchaseHistory () ํธ์ถ์ ์ฌ์ฉํ์ง ์๋๋ผ๋ ์ฌ์ ํ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค. ๊ตฌ๋งค ๋ํ์ฐฝ์ด ๋์ค์ง ์๊ณ ์๋์ผ๋ก ๊ตฌ๋งค๊ฐ ์๋ฃ๋ฉ๋๋ค.
๋ํ finishTrsanactionIOS ๋ฐ finishTransation ํจ์๋ฅผ ํธ์ถํ๊ณ ์์ต๋๋ค.
์ฑ์ ์ข
๋ฃํ์ฌ iOS ๊ธฐ๋ณธ ๊ตฌ๋งค ๋ํ ์์๋ฅผ ์ป์ ์์์์ต๋๋ค. ์ด๊ฒ์ ๋ง์นจ๋ด ๋ช ๊ฐ์ง ์ฝ์์ด ํด๊ฒฐ ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. react-native-iap
์ฝ์ ์ข
์์ฑ์ด ์๋์ง ํ์คํ์ง ์์ง๋ง ๋์์ด ์ด์ํ๊ฒ ๋ณด์
๋๋ค. requestSubscription
ํธ์ถ์ ์ฑ์์ ํด๊ฒฐ๋์ง๋ง ์ฑ์ ์ข
๋ฃ ํ ๋๊น์ง ๋ํ ์์๊ฐ ์์ต๋๋ค.
getAvailblePruchases ()์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฝ์์ด ํด๊ฒฐ๋๊ฑฐ๋ ๊ฑฐ๋ถ๋์ง ์์ต๋๋ค. iOS 14 ๊ธฐ๊ธฐ์์ ํ ์คํธ ํ ๋ ์์๋์์ต๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ด์
getAvailablePurchase๋ฅผ ์ ๊ฑฐํ๊ณ ๋ถ๋ช ํ ์ ์๋ํฉ๋๋ค.
์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์ ๋ง ์ด์ํ ํ๋์ด๊ณ ๋ด๊ฐ ์์ ์ฐจ๋ฆฐ ๊ฒ์ iOS 14์์๋ง ์ผ์ด๋๋ ์ผ์ด ์๋๋๋ค ... ๋๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ๋ ค๊ณ ์ ํ์ ์ฐ๋ฝํ๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํจํค์ง์ ๊ด๋ จ๋ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ณธ์ธ.
์ฌ๊ธฐ์ ๋ด๊ฐ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์๋ค๊ณ ๋งํ๊ธฐ ์ํด. ๋๋ ์ด๋ฏธ iOS 12์์ ํ ์คํธํ๊ณ ์ ์๋ํ๊ณ ์์ต๋๋ค ... iOS 14๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค.
requestSubscription์ ๋ํ ๋ด ์์ฒญ์ ์์ํ ์ง์๋ฉ๋๋ค ... ๊ทธ๋ฆฌ๊ณ ํ๋ก๋์ ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ณ ์์ต๋๋ค!
๊ธ์, "์ฆ๊ฑฐ์ด"ํ๋ฃจ๋ฅผ ๋ณด๋ธ ํ ์ด๊ฒ์ด ์ง๊ธ๊น์ง ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค. ๋๋ ๋ค๋ฅธ OS ๋ฒ์ ์ ๋ค์ํ ์ฅ์น๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๊ฐ๊ฐ์์ด ๋ฌธ์ ๊ฐ์๋ค. ์ด ๋ฌธ์ ์ ๊ด๋ จํ์ฌ Apple์ ๋ฌธ์ํ์ผ๋ฉฐ ํ์คํ ๊ฒฐ๋ก ์์ด ์ฌ์ ํ ์ผ์ด์ค๋ฅผ ์ถ์ ํ๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํจํค์ง์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์๋๋ค. ๊ทธ๊ฒ์ ์ ํ ์ธก์ ๋ฌธ์ ์ผ ๊ฒ์ด๋ค. ๋๋ ์ฌ๋๋ค์ด์ด ์ค๋ ๋์ ์ ์ฌํ ๋ฌธ์ ๋ฅผ๋ณด๊ณ ํ ๋ค๋ฅธ ์ค๋ ๋์์ ์ธ๊ธํ๋ ๋ชจ๋ ๊ฒ์ ์๋ํ์ต๋๋ค. In App Purchase ๋ํ ์์๊ฐ ํ์๋๋ ๋ฐ ์ผ๊ด์ฑ์ด ์์ผ๋ฉฐ ์ง๊ธ๊น์ง ๊ฒฐ๊ณผ๊ฐ ํญ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ํจํ ์ด์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋๋ก๋ E_UNKNOWN ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ํผ๋๋ฐฑ์ด 0 ์ธ ๊ฒฝ์ฐ๋ ์๊ณ , 10 ๋ถ ๋์ ๊ธฐ๋ค๋ฆฐ ํ ํ์
์ด ํ์๋๋ ๊ฒฝ์ฐ๋ ์๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ ๋๋ก ์๋ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์๋ ๋ฐ์ค ์ฌ์ฉ์, ๋น ์๋ ๋ฐ์ค ์ฌ์ฉ์์๊ฒ ์๋ํ์ต๋๋ค. ๋์ผํ ์ฌ์ฉ์ ๋ฐ ์ฅ์น์ ๋ํด ๋์ผํ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ฉฐ ์ค๋ฅ ๋๋ ๊ฒฐ์ ์ ์ด๊ณ ํต์ฐฐ๋ ฅ์๋ ๋ก๊ทธ๋ ํ์๋์ง ์์ต๋๋ค. ๊ฑฐ์ ์๋ฌด๊ฒ๋ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊ทธํ๊ธฐ๊ฐ ๋ต๋ตํ ๋ฟ์
๋๋ค ... ๊ธ์์, ์ฌ๋ฌ๋ถ์ด ์ด๋ค ์ข
๋ฅ์ ์กฐ์ธ์ด๋ ํต์ฐฐ๋ ฅ์ด ์๋ค๋ฉด, ์ ๋ ๋ฃ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ ๊ฐ Apple๋ก๋ถํฐ ์์์ด ์๋ค๋ฉด, ๊ณ์ ๊ฒ์ํ๊ฒ ์ต๋๋ค ...
์ถ์ ํธ์ง. ๋ง์ง๋ง ๋๊ธ์ ์ฝ์ ํ ํ ๊ฐ์ง๋ ์ผ๊ด์ฑ์ด ์์ผ๋ฉฐ ํ์ธํ ์ ์์ต๋๋ค .iOS 14์์๋ ํ
์คํธ ํ ๋ชจ๋ OS ๋ฒ์ (12, 13.7, 14)์์ ๋ฐ์ํ๋๋ผ๋ ์ผ๊ด๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ OS ๋ฒ์ ๊ณผ ๊ด๋ จ๋ ๊ฒ์ด ์๋๋ผ๋ ์ธ์์ ๋ฐ๊ณ ์์ผ๋ฉฐ ์ด๊ฒ์ด Sandbox ์๋ฒ ๋๋ Apple ์ธก์ ๋ค๋ฅธ ๊ฒ์ด์ด์ผํ๋ค๊ณ ์๊ฐํ๋ ์ด์ ์
๋๋ค ..
App Store์์ ์น์ธ ํ ๋น๋๋ก ์ฑ ํจํค์ง๋ฅผ ํ ์คํธํ์ผ๋ฉฐ iOS ๋ฒ์ 14 ์ด์์์ ๋ถ์ผ์น๊ฐ ๋ ๋๋๋ฌ์ง ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
๊ฒฐ๋ก ์ Apple์ด iOS 14+์์ ์์์ฆ์ ํ์ธํ๋ ๋ฐฉ์์ด ์ฝ๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋๋ค.
์ด๋ฏธ ๊ตฌ๋งค ํ ๊ณ์ ์์ ๋ฐ์ํฉ๋๋ค.
์ด์ ํด์. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ๊ฒํ ํ๊ณ ํ ์คํธ๋ฅผ ์ํด ๋ก๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ๋ค์์ ์ป์๋ค
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue { //////// RESTORE
NSLog(@"\n\n\n paymentQueueRestoreCompletedTransactionsFinished \n\n.");
NSMutableArray* items = [NSMutableArray arrayWithCapacity:queue.transactions.count];
NSLog(@"Number of items in my array is: %d", [queue.transactions count]);//this will return (5)
for(SKPaymentTransaction *transaction in queue.transactions) {
if(transaction.transactionState == SKPaymentTransactionStateRestored
|| transaction.transactionState == SKPaymentTransactionStatePurchased) {
[self getPurchaseData:transaction withBlock:^(NSDictionary *restored) {
[items addObject:restored];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}];
}
}
NSLog(@"\n finished paymentQueueRestoreCompletedTransactionsFinished ");
[self resolvePromisesForKey:@"availableItems" value:items];
}
์ฌ๊ธฐ์์ ํธ๋์ญ์ ํฌ๊ธฐ๋ฅผ ๋ก๊ทธ์ ์ธ์ํ๊ณ 23 ๊ฐ์ ํญ๋ชฉ์ ์ป์์ต๋๋ค.
case SKPaymentTransactionStateRestored: {
NSLog(@"Restored ");
NSLog(@"\n paymentQueue transaction : %@", transaction.transactionDate);
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
}
resolvePromisesForKey ๊ฐ restorePurchase๋ฅผ ์๋ฃํฉ๋๋ค.
requestSubscription ํจ์ buyProduct ํธ์ถ ์์
NSLog(@"\n produc purchase : %@", product);
SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product];
NSLog(@"\n payment buy product : %@", payment.productIdentifier);
[[SKPaymentQueue defaultQueue] addPayment:payment];
2020-10-22 14:01:49.319677-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.319784-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 16:46:53 2020
2020-10-22 14:01:49.319930-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.319970-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 19:16:45 2020
2020-10-22 14:01:49.320044-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.320082-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 19:06:37 2020
2020-10-22 14:01:49.320155-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.320275-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 19:01:37 2020
2020-10-22 14:01:49.320421-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.320532-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 07:49:31 2020
2020-10-22 14:01:49.320671-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.320776-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 14:21:39 2020
2020-10-22 14:01:49.320915-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321018-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 14:26:39 2020
2020-10-22 14:01:49.321180-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321282-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 16:56:53 2020
2020-10-22 14:01:49.321414-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321516-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 16:51:53 2020
2020-10-22 14:01:49.321648-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321749-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 08:04:31 2020
2020-10-22 14:01:49.321879-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.321984-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 19:11:41 2020
2020-10-22 14:01:49.322113-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.322214-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 16:41:53 2020
2020-10-22 14:01:49.322346-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.322444-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 14:31:39 2020
2020-10-22 14:01:49.323955-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.324097-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 12:07:14 2020
2020-10-22 14:01:49.324240-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.324344-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 14:16:39 2020
2020-10-22 14:01:49.324474-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.324579-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 14:11:39 2020
2020-10-22 14:01:49.324709-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.324808-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 07:39:31 2020
2020-10-22 14:01:49.324934-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.325030-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 07:59:31 2020
2020-10-22 14:01:49.325163-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.325260-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 19:26:45 2020
2020-10-22 14:01:49.327079-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.327212-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 07:44:31 2020
2020-10-22 14:01:49.327360-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.327465-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 07:54:31 2020
2020-10-22 14:01:49.327594-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.327695-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 14:37:11 2020
2020-10-22 14:01:49.327823-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:49.327923-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 19:21:45 2020
2020-10-22 14:01:49.328099-0500 ApplicationTest[532:51039]
paymentQueueRestoreCompletedTransactionsFinished
2020-10-22 14:01:49.328204-0500 ApplicationTest[532:51039] Number of items in my array is: 23
2020-10-22 14:01:49.336873-0500 ApplicationTest[532:51039]
finished paymentQueueRestoreCompletedTransactionsFinished
2020-10-22 14:01:50.317721-0500 ApplicationTest[532:51234]
๋น. buySubcription ๋ก๊ทธ :
2020-10-22 14:01:50.319607-0500 ApplicationTest[532:51234]
produc purchase : <SKProduct: 0x2839c0630>
2020-10-22 14:01:50.319694-0500 ApplicationTest[532:51234]
payment buy product : test.applicationtest
**2020-10-22 14:01:50.319849-0500 ApplicationTest[532:51039] Restored
2020-10-22 14:01:50.319895-0500 ApplicationTest[532:51039]
paymentQueue transaction : Mon Oct 5 19:16:45 2020**
๊ทธ๋์ paymentQueue ๋ฉ์๋๊ฐ 10 ์ 5 ์ผ์ SKPaymentTransactionStateRestored๋ก ์คํ๋๋ ์ด์ ๋ฅผ ์ดํดํ ์ ์์ต๋๋ค.
@andresordonezfm ๊ตฌ๋งค ํ finishTransaction
์ ํ ํ์ต๋๊น?
๋ํ ํ์ ๊ณผ ๊ด๋ จํ์ฌ # 863์ ์ ๊ณต๋ ํ๋ฅญํ ์๋๊ฐ ์์ต๋๋ค. ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@andresordonezfm ๊ตฌ๋งค ํ
finishTransaction
์ ํ ํ์ต๋๊น?
ํ์คํ! ๋ํ ๋ฌธ์ ๊ฐ ๋ ์ ์์ง๋ง ์๋ฌด๊ฒ๋ ์๋ค๋ฉด clearTransactionIOS ()๋ฅผ ํธ์ถํ์ต๋๋ค.
๋ํ ํ์ ๊ณผ ๊ด๋ จํ์ฌ # 863์ ์ ๊ณต๋ ํ๋ฅญํ ์๋๊ฐ ์์ต๋๋ค. ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๊ฒํ ํ ๊ฒ์ด๋ค
์๋ฃจ์ / ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์์ง ์์ต๋๋ค. ๊ฒํ ์ค์ Apple์ด StoreKit ๋ฐ ์๋ฆผ ์ ํ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
๊ทธ๊ฒ ๋ฌธ์ ๊ฐ ๋ ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํจํค์ง๋ฅผ 4.5.2๋ก ๋ค์ด ๊ทธ๋ ์ด๋ํ์ต๋๋ค.
๋น์ ์ด ์ ํํ๋์ง ํ์ธ
await RNIap.initConnection();
RNIap.requestSubscription ์ด์
์ด ๋ฌธ์ ์ ๋ฐ๋ผ ํด๊ฒฐ ํ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/dooboolab/react-native-iap/issues/1146
์ฐ์ ์์์ฆ์ ๊ฒ์ฆ ํ ๋ isTest
๋งค๊ฐ ๋ณ์๋ก true
๋ฅผ ์ ๋ฌํ์ต๋๋ค (ํ๋ก๋์
๋น๋ ์ผ ๋๋).
๊ทธ๋ฐ ๋ค์ ์์์ฆ์ ํ์ธํ๊ธฐ ์ ์ purchaseUpdatedListener
์ RNIap.clearTransactionIOS();
๋ฅผ ์ถ๊ฐํ๊ณ RNIap.finishTransaction(purchase, false)
๋ค์ RNIap.finishTransactionIOS(purchase.transactionId);
TestFlight์์ ํ ์คํธํ๊ณ ์ฒ์์ผ๋ก (์๋ ๋ฐ์ค ๊ณ์ ์ผ๋ก) ๊ตฌ๋งค๋ฅผ ์๋ฃ ํ ์์์์ต๋๋ค. ์ด์ ํ๋ก๋์ ์์ ํ ์คํธํ๊ฒ ์ต๋๋ค ๐ค
์ด ๋ฌธ์ ์ ๋ฐ๋ผ ํด๊ฒฐ ํ ๊ฒ ๊ฐ์ต๋๋ค.
1146 ๋
์ฐ์ ์์์ฆ์ ๊ฒ์ฆ ํ ๋
isTest
๋งค๊ฐ ๋ณ์๋กtrue
๋ฅผ ์ ๋ฌํ์ต๋๋ค (ํ๋ก๋์ ๋น๋ ์ผ ๋๋).
๊ทธ๋ฐ ๋ค์ ์์์ฆ์ ํ์ธํ๊ธฐ ์ ์purchaseUpdatedListener
์RNIap.clearTransactionIOS();
๋ฅผ ์ถ๊ฐํ๊ณRNIap.finishTransaction(purchase, false)
๋ค์RNIap.finishTransactionIOS(purchase.transactionId);
TestFlight์์ ํ ์คํธํ๊ณ ์ฒ์์ผ๋ก (์๋ ๋ฐ์ค ๊ณ์ ์ผ๋ก) ๊ตฌ๋งค๋ฅผ ์๋ฃ ํ ์์์์ต๋๋ค. ์ด์ ํ๋ก๋์ ์์ ํ ์คํธํ๊ฒ ์ต๋๋ค ๐ค
์๋ ์น๊ตฌ ๋๋์ด ํด๊ฒฐ์ฑ ์ ์๋ํ์ง๋ง ๋๋ฅผ ์ํด ์ผํ์ง ์์์ต๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค. ๊ตฌ๋งค ๋ณต์ ํ ๊ตฌ๋ ๊ตฌ๋งค๋ฅผ ์๋ ํ ๋ ๋ฐ์ํฉ๋๋ค.
์ด ๋ณด์ธ๋ค ์ด๋ @andresordonezfm์์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค SKPaymentQueue
์ ๊ฑฐ๋ ์์ SKPaymentTransactionStateRestored
๋์ ์, ์ ํ์ SKPaymentTransactionStatePurchasing
"๋ณต์"์ ๋ํ ์ด์ ์ด๋ค ์ ํ, ๊ตฌ๋งค์ ๋ก๊ทธ์ธ๋๋ ๋ฌธ์์ด์
๋๋ค.
๋ฆ์ด์ ์ฃ์กํฉ๋๋ค.
๊ฒํ ์ค์์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๋ค. ๋ฌธ์ ๋ ๋ณต์ ๊ตฌ๋งค๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ๋์ผํ ๋ณต์ ๊ตฌ๋งค์ ์๋ก ์ด๋ฆฐ ํธ๋์ญ์ ์ด ์ ๋๋ก ๋ซํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ์ ๋ก ๋ซ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ clearTransactionIOS ํจ์, removeTransactions ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ์ด ๋ซํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋๋ก ์ฝ์์ ์ถ๊ฐํด์ผํฉ๋๋ค.
๋ด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ์ผ : react-native-iap / ios / RNIapIos.m
RCT_EXPORT_METHOD(clearTransaction:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject) {
NSLog(@"\n\n\n *** clear remaining Transactions. Call this before make a new transaction \n\n.");
NSArray *pendingTrans = [[SKPaymentQueue defaultQueue] transactions];
countPendingTransaction = (NSInteger)(pendingTrans.count);
if (countPendingTransaction > 0) {
[self addPromiseForKey:@"cleaningTransactions" resolve:resolve reject:reject];
for (SKPaymentTransaction *transaction in pendingTrans) {
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
} else {
resolve(nil);
}
}
-(void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions {
NSLog(@"removedTransactions");
if (countPendingTransaction != nil && countPendingTransaction > 0) {
countPendingTransaction--;
if (countPendingTransaction == 0) {
[self resolvePromisesForKey:@"cleaningTransactions" value:nil];
countPendingTransaction = nil;
}
}
}
ํ์ผ : react-native-iap / ios / RNIapIos.h
NSInteger countPendingTransaction;
๋ง์ง๋ง์ผ๋ก "RNIap.requestSubscription (productId, false)"ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ ์
๋๋ค.
clearTransactionIOS ํจ์๋ฅผ ํธ์ถํด์ผํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
if (Platform.OS === 'ios') {
await RNIap.clearTransactionIOS();
}
await RNIap.requestSubscription(productId, false);
๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ณต์ ๊ตฌ๋งค์ ์ด์ํ ๋์์ ์ด์ ๋ฅผ ์ฐพ์ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ Sandbox์์ ํ ์คํธ๋ฅผ ์ํด ํด๊ฒฐ๋์์ต๋๋ค.
์ ์ ์ฌํญ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ญ์์ค.
๋๋ ๋ํ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค, ์ ์, ๋์์ฃผ์ธ์, ๋น์ ์ ๊ฐ์กฑ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
๋๋ ๋ํ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค, ์ ์, ๋์์ฃผ์ธ์, ๋น์ ์ ๊ฐ์กฑ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
์๋ ์น๊ตฌ, ์ด์ ๋๊ธ์์ ๋ด๊ฐ ํด๊ฒฐํ๊ธฐ ์ํด ํ ๋จ๊ณ๊ฐ ์ค๋ช ๋์ด ์์ต๋๋ค.
์๊ฒฌ์ด ์์ผ์๋ฉด ์๋ ค์ฃผ์ธ์
@andresordonezfm ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ PR์ ์์ฑ ํ ์ํฅ์ด ์์ต๋๊น?
๋ณต์ ํ ๋ฐ์ํ๋ SKPaymentTransactionStateRestored
๊ตฌ๋งค ๋ฌธ์ ์ ๋ํด ์ ๊ณ์ ์ ๋ง๋ค๊ณ ๋ช ๋ฒ ๊ตฌ๋งคํ๋๋ฐ ํด๋น ๊ณ์ ์ ๋ํด ๋ฐ์ํ์ง ์์ต๋๋ค. ๋์ค์ RNIap.getAvailablePurchases()
๋ฐ RNIap.requestSubscription()
๋ก ์ ํ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ๊ตฌ๋งค ํ ๊ธ์ก๊ณผ ๊ด๋ จ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ง ํ๋ก๋์ ํ ์คํธ๋ฅผ ์คํํ์ง ์์์ต๋๋ค.
๊ธ์, "์ฆ๊ฑฐ์ด"ํ๋ฃจ๋ฅผ ๋ณด๋ธ ํ ์ด๊ฒ์ด ์ง๊ธ๊น์ง ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค. ๋๋ ๋ค๋ฅธ OS ๋ฒ์ ์ ๋ค์ํ ์ฅ์น๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๊ฐ๊ฐ์์ด ๋ฌธ์ ๊ฐ์๋ค. ์ด ๋ฌธ์ ์ ๊ด๋ จํ์ฌ Apple์ ๋ฌธ์ํ์ผ๋ฉฐ ํ์คํ ๊ฒฐ๋ก ์์ด ์ฌ์ ํ ์ผ์ด์ค๋ฅผ ์ถ์ ํ๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํจํค์ง์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์๋๋ค. ๊ทธ๊ฒ์ ์ ํ ์ธก์ ๋ฌธ์ ์ผ ๊ฒ์ด๋ค. ๋๋ ์ฌ๋๋ค์ด์ด ์ค๋ ๋์ ์ ์ฌํ ๋ฌธ์ ๋ฅผ๋ณด๊ณ ํ ๋ค๋ฅธ ์ค๋ ๋์์ ์ธ๊ธํ๋ ๋ชจ๋ ๊ฒ์ ์๋ํ์ต๋๋ค. In App Purchase ๋ํ ์์๊ฐ ํ์๋๋ ๋ฐ ์ผ๊ด์ฑ์ด ์์ผ๋ฉฐ ์ง๊ธ๊น์ง ๊ฒฐ๊ณผ๊ฐ ํญ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ํจํ ์ด์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋๋ก๋ E_UNKNOWN ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ํผ๋๋ฐฑ์ด 0 ์ธ ๊ฒฝ์ฐ๋ ์๊ณ , 10 ๋ถ ๋์ ๊ธฐ๋ค๋ฆฐ ํ ํ์ ์ด ํ์๋๋ ๊ฒฝ์ฐ๋ ์๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ ๋๋ก ์๋ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์๋ ๋ฐ์ค ์ฌ์ฉ์, ๋น ์๋ ๋ฐ์ค ์ฌ์ฉ์์๊ฒ ์๋ํ์ต๋๋ค. ๋์ผํ ์ฌ์ฉ์ ๋ฐ ์ฅ์น์ ๋ํด ๋์ผํ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ฉฐ ์ค๋ฅ ๋๋ ๊ฒฐ์ ์ ์ด๊ณ ํต์ฐฐ๋ ฅ์๋ ๋ก๊ทธ๋ ํ์๋์ง ์์ต๋๋ค. ๊ฑฐ์ ์๋ฌด๊ฒ๋ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊ทธํ๊ธฐ๊ฐ ๋ต๋ตํ ๋ฟ์ ๋๋ค ... ๊ธ์์, ์ฌ๋ฌ๋ถ์ด ์ด๋ค ์ข ๋ฅ์ ์กฐ์ธ์ด๋ ํต์ฐฐ๋ ฅ์ด ์๋ค๋ฉด, ์ ๋ ๋ฃ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ ๊ฐ Apple๋ก๋ถํฐ ์์์ด ์๋ค๋ฉด, ๊ณ์ ๊ฒ์ํ๊ฒ ์ต๋๋ค ...
์ถ์ ํธ์ง. ๋ง์ง๋ง ๋๊ธ์ ์ฝ์ ํ ํ ๊ฐ์ง๋ ์ผ๊ด์ฑ์ด ์์ผ๋ฉฐ ํ์ธํ ์ ์์ต๋๋ค .iOS 14์์๋ ํ ์คํธ ํ ๋ชจ๋ OS ๋ฒ์ (12, 13.7, 14)์์ ๋ฐ์ํ๋๋ผ๋ ์ผ๊ด๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ OS ๋ฒ์ ๊ณผ ๊ด๋ จ๋ ๊ฒ์ด ์๋๋ผ๋ ์ธ์์ ๋ฐ๊ณ ์์ผ๋ฉฐ ์ด๊ฒ์ด Sandbox ์๋ฒ ๋๋ Apple ์ธก์ ๋ค๋ฅธ ๊ฒ์ด์ด์ผํ๋ค๊ณ ์๊ฐํ๋ ์ด์ ์ ๋๋ค ..
@andresordonezfm (https://github.com/dooboolab/react-native-iap/issues/1120#issuecomment-734805587)์ด ์ ์ํ ์์ ์ฌํญ ์ดํ์๋ ์ ๊ฐ ๊ฒช๊ณ ์๋ ๊ฒ๊ณผ ์ ํํ @ 106firestarter , Apple์ด ๋ต์ฅ ํ ์ ์ด ์์ต๋๊น?
๊ทธ ๋์ ๊ฐ๋ฐ์ ํฌ๋ผ์์ ๋ฌด์์ ์ฐพ์ ์ ์๋์ง ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
๋ณต์ ํ ๋ฐ์ํ๋
SKPaymentTransactionStateRestored
๊ตฌ๋งค ๋ฌธ์ ์ ๋ํด ์ ๊ณ์ ์ ๋ง๋ค๊ณ ๋ช ๋ฒ ๊ตฌ๋งคํ๋๋ฐ ํด๋น ๊ณ์ ์ ๋ํด ๋ฐ์ํ์ง ์์ต๋๋ค. ๋์ค์RNIap.getAvailablePurchases()
๋ฐRNIap.requestSubscription()
๋ก ์ ํ ํ ์ ์์ต๋๋ค.์ฌ์ฉ์๊ฐ ๊ตฌ๋งค ํ ๊ธ์ก๊ณผ ๊ด๋ จ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ง ํ๋ก๋์ ํ ์คํธ๋ฅผ ์คํํ์ง ์์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์๋ ํ ๊ฒ์ด์ง๋ง ์ค์ ๋ก ์์ฐ๋ ๋ฌธ์ ์ ๋๋ค.
๊ธฐ๋ก์ ์ํด getAvailablePurchases()
์ ์ requestSubscription()
getAvailablePurchases()
๋ฅผ ํธ์ถํฉ๋๋ค.
๊ด๋ จ ๊ฐ๋ฅ์ฑ :
์๋ก์ด ๊ณ์ ์ ์ฌ์ฉํ๋ฉด ๋ ์ด์ @Paduado๊ฐ ์ธ๊ธ ํ์ธํ ์ ์์ต๋๋ค (https://github.com/dooboolab/react-native-iap/issues/1120#issuecomment-742685043).
์์ : @andresordonezfm ์ด ์ ์ํ ์์ ์ฌํญ๊ณผ ํจ๊ป ์๋ก์ด ๊ณ์ ์ ์ฌ์ฉํ๋ฉด ๋ด ์ชฝ์์ ์๋ํฉ๋๋ค. ์์ ์ด ์์ผ๋ฉด ์ฒซ ๋ฒ์งธ ๊ตฌ๋ ํ ์ด์ ์ ๊ฒฝํํ๋ ๊ฒ๊ณผ ๋์ผํ ๋์์ด ๋ค์ ๋ํ๋ ๋ ์ด์ ๋ค์ ๊ตฌ๋ ํ ์ ์์ต๋๋ค. ์์ ์ฌํญ์ ์ ์ฉํ ํ ํ ๊ฐ์ง ๋ ๋์ ๋๋ ์ ์ ์๋ ๋ฐ์ค๋ฅผ ์ฌ์ฉํ๋ฉด 5 ๋ฒ ๊ฐฑ์ ๋ ๊ฒ์ผ๋ก ์์๋์ง๋ง ๊ตฌ๋ ์ด ๋ ์ด์ ์๋ ๊ฐฑ์ ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@andresordonezfm ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ PR์ ์์ฑ ํ ์ํฅ์ด ์์ต๋๊น?
์๋ ํ์ธ์, ๋ฆ์ด์ ์ฃ์กํฉ๋๋ค. ๋ฐ์ ๋ค์ดํฐ๋ธ iap์ ๋ํ ํ ์์ฒญ์ ๋ง๋ค์์ต๋๋ค.
~ ์ ๊ณ์ ์ ์ฌ์ฉํ๋ฉด ๋ ์ด์ @Paduado๊ฐ ์ธ๊ธ ํ์ธํ ์ ์์ต๋๋ค ( # 1120 (์ฝ๋ฉํธ) ). ~
์์ : @andresordonezfm ์ด ์ ์ํ ์์ ์ฌํญ๊ณผ ํจ๊ป ์๋ก์ด ๊ณ์ ์ ์ฌ์ฉํ๋ฉด ๋ด ์ชฝ์์ ์๋ํฉ๋๋ค. ์์ ์ด ์์ผ๋ฉด ์ฒซ ๋ฒ์งธ ๊ตฌ๋ ํ ์ด์ ์ ๊ฒฝํํ๋ ๊ฒ๊ณผ ๋์ผํ ๋์์ด ๋ค์ ๋ํ๋ ๋ ์ด์ ๋ค์ ๊ตฌ๋ ํ ์ ์์ต๋๋ค. ์์ ์ฌํญ์ ์ ์ฉํ ํ ํ ๊ฐ์ง ๋ ๋์ ๋๋ ์ ์ ์๋ ๋ฐ์ค๋ฅผ ์ฌ์ฉํ๋ฉด 5 ๋ฒ ๊ฐฑ์ ๋ ๊ฒ์ผ๋ก ์์๋์ง๋ง ๊ตฌ๋ ์ด ๋ ์ด์ ์๋ ๊ฐฑ์ ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ ์น๊ตฌ ์๋ ๋ฐ์ค ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ ๊ทธ ํ๋์ ๊ณ์ํ๊ณ ์์ต๋๊น?
@andresordonezfm ์, Apple์ ์๋ ๋ฐ์ค์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ง๋ง ๋๊ธ ์ดํ๋ก ๋ ์ด์ ํ ์คํธ๋ฅผ ์ํํ์ง ์์์ผ๋ฉฐ ์์ง ํ๋ก๋์ ์ ํ์ธํ์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง ๊ณ ๊ฐ์ผ๋ก๋ถํฐ ๋ถ๋ง์๋ฐ์ง ๋ชปํ์ต๋๋ค.
@Paduado๊ฐ ์ด์ ์๋ณด๊ณ ์ฌ๋์ต๋๋ค . ๐คทโโ๏ธ ๐
@andresordonezfm ๋๋ ๊ทธ๊ฒ์ ๊ณ ์น๊ธฐ ์ํด ๋๊ฐ์ ์ผ๊ณผ ํจ์น ์ด์์๋ฅผ ๋ง๋ฌ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์ฌ์ ์ผ๋ก cleartTransactionsIOS()
์ (๋ฅผ) ์ค๋จ์ํฌ ์์๋ ์ฝ๋์ ๋ฏธ๋ฌํ ๋ฒ๊ทธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. removeTransactions
๋ ์ ๊ฑฐ ํ ํ๋ ์ด์์ ํธ๋์ญ์
๊ณผ ํจ๊ป ํธ์ถ ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ removeTransactions
์์๋ ๋ค์์ ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
countPendingTransaction -= [transactions count];
์ค์ ๋ก๋ ํ ๋ฒ์ ํธ๋์ญ์
์ผ๋ก removedTransactions
ํธ์ถ๋๋ ๊ฒ์ ๋ณด์์ง๋ง ์ ํ ๋ฌธ์ ์์๋ ํ๋ ์ด์์ผ ์ ์๋ค๊ณ ๋งํฉ๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ ์ข์ ์ฐพ๊ธฐ! ๋๋ ์ด๊ฒ์ ํ๋์ ๋ถ์ด ์์๋ค.
@andresordonezfm ๋๋ ๊ทธ๊ฒ์ ๊ณ ์น๊ธฐ ์ํด ๋๊ฐ์ ์ผ๊ณผ ํจ์น ์ด์์๋ฅผ ๋ง๋ฌ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์ฌ์ ์ผ๋ก
cleartTransactionsIOS()
์ (๋ฅผ) ์ค๋จ์ํฌ ์์๋ ์ฝ๋์ ๋ฏธ๋ฌํ ๋ฒ๊ทธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.removeTransactions
๋ ์ ๊ฑฐ ํ ํ๋ ์ด์์ ํธ๋์ญ์ ๊ณผ ํจ๊ป ํธ์ถ ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์removeTransactions
์์๋ ๋ค์์ ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.countPendingTransaction -= [transactions count];
์ค์ ๋ก๋ ํ ๋ฒ์ ํธ๋์ญ์ ์ผ๋ก
removedTransactions
ํธ์ถ๋๋ ๊ฒ์ ๋ณด์์ง๋ง ์ ํ ๋ฌธ์ ์์๋ ํ๋ ์ด์์ผ ์ ์๋ค๊ณ ๋งํฉ๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ ์ข์ ์ฐพ๊ธฐ! ๋๋ ์ด๊ฒ์ ํ๋์ ๋ถ์ด ์์๋ค.
์๋ ์น๊ตฌ, ์ถ์ฒ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๋น์ ์ ์ ์์ ํ ์คํธํ๊ณ ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์ ์๋ํฉ๋๋ค. ๋๋ ๊ทธ ๋ณ๊ฒฝ์ผ๋ก ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค์๋ค.
์ฐธ๊ณ : ์, ํด๋น ๋ฌธ์๋ฅผ ๊ฒํ ํ์ง๋ง ํธ๋์ญ์ ์์ ํธ๋์ญ์ ์ผ๋ก ๋ง ์คํ๋๊ธฐ ๋๋ฌธ์ ๊ตฌํํ์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์์ฃผ ์ข์ ๊ถ๊ณ ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ๊ธฐ์ ๋ด๊ฐ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์๋ค๊ณ ๋งํ๊ธฐ ์ํด. ๋๋ ์ด๋ฏธ iOS 12์์ ํ ์คํธํ๊ณ ์ ์๋ํ๊ณ ์์ต๋๋ค ... iOS 14๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค.
requestSubscription์ ๋ํ ๋ด ์์ฒญ์ ์์ํ ์ง์๋ฉ๋๋ค ... ๊ทธ๋ฆฌ๊ณ ํ๋ก๋์ ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ณ ์์ต๋๋ค!