3.4.13
0.60.5
iOS
getAvailablePurchases์๋ ๋ถ์์ฉ์ด ์์ต๋๋ค.
iOS์์ getAvailablePurchases
์ ํํ๋ฉด "iTunes Store์ ๋ก๊ทธ์ธ"๋ํ ์์๊ฐ ๋ํ๋ฉ๋๋ค.
์ด๊ฒ์ Android์์๋ ๋ฐ์ํ์ง ์์ต๋๋ค.
๊ตฌ๋งค ํ ํญ๋ชฉ์ ๋ณต์ํ๊ธฐ ์ํด ์ฑ ์์ ์ค์ getAvailablePurchases
์ ํํฉ๋๋ค. ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ด ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ์ดํดํ์ต๋๋ค.
๊ตฌ๋งค ํ ํญ๋ชฉ์ ๋ณต์ํ๊ธฐ ์ํด AppState์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋ผ getAvailablePurchases
๋ฅผ ํธ์ถํฉ๋๋ค. ๋ถํํ๋ AppState๋ ์ฑ ์์์๋ฟ๋ง ์๋๋ผ p.ex์์๋ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ๋ํ ์์์์ ์ฑ์ผ๋ก ๋์๊ฐ ํ (์ฑ์ ์ํด ๋ฐ์) p.ex. iTunes์ ๋ก๊ทธ์ธ ... :(
์ฌ์ฉ์์๊ฒ๋ ์ด๊ฒ์ ๊ท์ฐฎ์ต๋๋ค. ํนํ ์ฌ์ฉ์๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ๊ตฌ์ ํ์ง ์์ผ๋ ค๋ ๊ฒฝ์ฐ์ด ๋ํ ์์๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ์๊ฒฉ ์ฆ๋ช ์ ์ ๋ ฅํ๊ณ ์ถ์ง ์์ ๊ฒ์ ๋๋ค.
์ค์ ์ฅ์น
getAvailablePurchases ํธ์ถ
๊ฐ๋ฐ ์ค์ผ ๋๋ ์๋ ๋ฐ์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ ์ ์๋๋ก ํ์๋ฉ๋๋ค. ๋๋ ๋ฌธ์๊ฐ ์ด๊ฒ์ ๋ํด ๋งค์ฐ ๋ช ํํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
ํ๋ก๋์ ์์๋์ด ํจ์๋ฅผ ํธ์ถ ํ ๋๋ง๋ค ํ๋กฌํํธ๊ฐ ํ์ ๋ ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ด๊ฒ์ ๊ตฌํ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉ์๊ฐ "๊ตฌ๋งค ๋ณต์"์ ๋๋ฅด๊ณ purchaseUpdatedListener๊ฐ ํธ์ถ ๋ ํ์ ์ด๊ฒ์ ํธ์ถํ๋ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ผ๋ก ๊ตฌ๋ ํ ๊ฒ์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ฐฑ์๋์ ์ ์ฅํ๊ณ ์ฑ์ ํ์ํฉ๋๋ค.
์๋
ํ์ธ์ @voxspox @alexpchin ์ด ๋ง์ต๋๋ค. @alexpchin ์ฐ๋ฆฌ๋ ๋ค๋ฆฌ ์์
์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด ๋ค์ดํฐ๋ธ๋ก IAP
์ ๋ํด ์กฐ๊ธ ์๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด๋ฏธ ์กด์ฌํ๋ ๋ชจ๋ ๊ฒ์ ๊ฐ ํ๋ซํผ์ ๋๋ ๊ฒ์ ๊ด๋ฆฌ์์๊ฒ ์๋นํ ๋ถ๋ด์
๋๋ค. ๋์์ด ๋ ๋งํ ๋ฌธ์ ์์
์ด ์๋ค๋ฉด ์์ ๋กญ๊ฒ ์ถ๊ฐํ๊ณ PR
ํธ์ํ์ธ์.
@mifi "๊ตฌ๋งค ํญ๋ชฉ ๋ณต์"๋ฒํผ์ด์๋ ์ฑ์ ๋ณธ ์ ์ด ์์ต๋๋ค. UX ๊ด์ ์์ ์ด๋ฌํ ๋ฒํผ์ ๋ถ๋ด์ด๋๊ณ ๋ถํ์ํฉ๋๋ค. ์๋ํ๋ฉด ์ฑ์ ๋ด๊ฐ ๋ฌด์์ ๊ตฌ์ ํ๋์ง ์์์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.)
@hyochan TestFlight๋ฅผ ํตํด ์ฑ์ ๋ฐฐํฌ ํ ํ์๋ ํ๋กฌํํธ๊ฐ ํ์๋ฉ๋๋ค (์ด๊ฒ ํ๋ก๋์ ๋ชจ๋๋ผ๊ณ ๊ฐ์ ํฉ๋๊น?!).
๋๋ ๊ทธ ๊ธฐ๋ฅ์ ๊ฐ์ง ๋ช ๊ฐ์ง ์ฑ์ ๋ณด์๋ค. ์ง๊ธ์ ์ ๊ธฐ์ต ๋์ง ์์ง๋ง ์ด๋ค ๊ฒฝ์ฐ์๋ ํ์ (๋๋ ์ ํ์์ ํ์)๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ํ Apple์ ์ฑ ์คํ ์ด ๊ฐ์ด๋ ๋ผ์ธ ์์ ์๋ ๋ค์ ๋ฒํผ์ด ์์ต๋๋ค.
https://developer.apple.com/app-store/subscriptions/
๋ํ ์ฌ์ฉ์๊ฐ ๋ด ์ฑ์ ์ด ๋ ์ ํ ID๋ฅผ ์ ๋ ฅํด์ผํ๋ค๋ฉด UX๊ฐ ๋์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ ํผ๋ ์ค๋ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค. (์ธ์ ์ด ๋ง๋ฃ๋๊ฑฐ๋ ๊ณต์ฉ Wi-Fi ๋๋ฉ ํ์ด์ง์์ ํํ ๋ฐ์ํ๋ SSL MITM์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ด์ ์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค)
ํธ์ง : ์ค์ ๋ก ์ฌ๊ณผ๊ฐ ๊ทธ๊ฒ์ ์๊ตฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค
getAvailablePurchases
๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ํ๋กฌํํธ๊ฐ ํ์๋๋์ง ์ ์์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ฆ, ์ฌ์ฉ์๊ฐ iTunes์ ์ฐ๊ฒฐ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ง ํ ์ ์์ต๋๊น?
1+ ๋์ผ
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ด๊ฒ์ ๋ํ ๋ต๋ณ์ด ์์ต๋๊น? ์ด๊ฒ์ด ๋๋ฒ๊น ๊ธฐ๋ฅ์ด๋ผ๋ ๊ฒ์ ์ดํดํ์ง๋ง testflight๋ก ํ ์คํธ ์ค์ด๋ฉฐ ์ด๊ฒ์ด ๋ฐ์ํ์ง ์๋๋กํ๊ณ ์ถ์ต๋๋ค. ์ด๋ป๊ฒ ๋ ์๋ ๋ฐ์ค ๋ชจ๋๋ฅผ ์ข ๋ฃ ํ ์ ์์ต๋๊น?
ํํธ, ๋๋ ๋๋ฅผ ์ํด ํด๊ฒฐ์ฑ
์ ์ฐพ์์ต๋๋ค. ๋ด ์ฑ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ ์ ๋ณ์ isRestorePurchasesEnabled
๋ฅผ ๋์
ํ์ต๋๋ค.
์ด๊ธฐํ :
isRestorePurchasesEnabled = false
์ฑ ์์์ :
if (Android || isRestorePurchasesEnabled) {
call getAvailablePurchases
on error.code === 'E_USER_CANCELLED' -> isRestorePurchasesEnabled= false
}
๊ตฌ๋งค์ :
isRestorePurchasesEnabled = true
requestSubscription ...
์ค์ :
Button "restore purchases" -> isRestorePurchasesEnabled = true
์ฌ์ฉ์๋ ๋ค์ ์ฐ๊ฒฐ -iTunes- ํ๋กฌํํธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๋ณต์์ ๊ตฌ๋งค๊ฐ ์๋ฃ๋ ํ์ ๋ง โโ์ด๋ฃจ์ด ์ง๋ฏ๋ก ์๊ฒฉ ์ฆ๋ช
์ด ์ด๋ฏธ ์
๋ ฅ๋์ด + ์ ์ฅ๋์์ผ๋ฉฐ ํ๋กฌํํธ๊ฐ ํ์๋์ง ์์ต๋๋ค.
ํ๋กฌํํธ๊ฐ ํ ๋ฒ๋ง ํ์๋๋ ์ ์ผํ ๊ฒฝ์ฐ๋ ์ฌ์ฉ์๊ฐ ์ค์ / iTunes / ์๋ ๋ฐ์ค ๊ณ์ ์์ ๋ก๊ทธ ์์ํ๋ ๊ฒฝ์ฐ์
๋๋ค. ์ด๊ฒ์ด ํ๋ก๋์
๋ชจ๋์ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์๋ ํ์ธ์. ์ต๊ทผ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์์ฃผ์๊ฐ ํ์ํฉ๋๊น? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ "ํ ๋ก ์ฉ"๋๋ "์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ "๋ก ํ์ ํ ์๋ ์์ผ๋ฉฐ ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์๋
ํ์ธ์,
ํ ๊ฐ์ง ์ฃผ์ ์ ๋ํด ์ ๋ง ํผ๋ ์ค๋ฝ์ต๋๋ค. ๋๊ตฐ๊ฐ ๋๋ฅผ ๋์ธ ์ ์์ต๋๊น?
์ฌ์ฉ์๊ฐ ์ฌ์ ํ ์ ํ์ ์์ ํ๊ณ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ถ์ต๋๋ค.
Apple ๋ฐ Google Play ์คํ ์ด์์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ทจ์๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ง ํ ์ ์์ต๋๊น?
์ด getAvailablePurchase ๋ฉ์๋์ ๊ด๋ จ์ด ์๋์ง์กฐ์ฐจ ๋ชจ๋ฆ
๋๋ค.
๊ฐ์ฌ.
TestFlight๊ฐ ์๋ ํ๋ก๋์
์์๋ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ์ฌ ๋ฒํผ์ ๋๋ฅด๋ ๋์ ์ฑ์ด๋ก๋ ๋ ๋์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
Apple์ ์ฌ์ ํ โโ์ฑ์์์ด ํจ์๋ฅผ ์๋์ผ๋ก ํธ์ถํ๊ฑฐ๋ ์์ ํ์ง ์๋๋ก ์กฐ์ธํฉ๋๋ค.
ํนํ ์ฑ์ด ์คํ๋ ๋ ๊ตฌ๋งค ํญ๋ชฉ์ ์๋์ผ๋ก ๋ณต์ํ์ง ๋ง์ญ์์ค. ๊ตฌ๋งค๋ฅผ ๋ณต์ํ๋ฉด ์ฌ์ฉ์์ App Store ์๊ฒฉ ์ฆ๋ช ์ ๋ฌป๋ ๋ฉ์์ง๊ฐ ํ์๋์ด ์ฑ ํ๋ฆ์ด ์ค๋จ๋ฉ๋๋ค.
https://developer.apple.com/documentation/storekit/in-app_purchase/restoring_purchased_products# : ~ : text = Restore % 20Completed % 20Transactions, of % 20your % 20app 's % 20completed % 20transactions.
๋ด๊ฐ ๊ตฌํ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉ์๊ฐ ๊ตฌ๋งค๋ฅผ ๋๋ฅด๊ฑฐ๋ ๊ตฌ๋งค๋ฅผ ๋ณต์ ํ ๋ ์์์ฆ์ ๋ฐฑ์๋๋ก ๋ณด๋ด๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฐฑ์๋๋ ์ฑ์ ํฅํ ๊ตฌ๋ ์ํ๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๋ค.
Apple์ ์ฌ์ ํ โโ์ฑ์์์ด ํจ์๋ฅผ ์๋์ผ๋ก ํธ์ถํ๊ฑฐ๋ ์์ํ์ง ๋ง๋ผ๊ณ ์กฐ์ธํฉ๋๋ค.
ํนํ ์ฑ์ด ์คํ๋ ๋ ๊ตฌ๋งค ํญ๋ชฉ์ ์๋์ผ๋ก ๋ณต์ํ์ง ๋ง์ญ์์ค. ๊ตฌ๋งค๋ฅผ ๋ณต์ํ๋ฉด ์ฌ์ฉ์์ App Store ์๊ฒฉ ์ฆ๋ช ์ ๋ฌป๋ ๋ฉ์์ง๊ฐ ํ์๋์ด ์ฑ ํ๋ฆ์ด ์ค๋จ๋ฉ๋๋ค.
https://developer.apple.com/documentation/storekit/in-app_purchase/restoring_purchased_products# : ~ : text = Restore % 20Completed % 20Transactions, of % 20your % 20app 's % 20completed % 20transactions.
๋ด๊ฐ ๊ตฌํ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉ์๊ฐ ๊ตฌ๋งค๋ฅผ ๋๋ฅด๊ฑฐ๋ ๊ตฌ๋งค๋ฅผ ๋ณต์ ํ ๋ ์์์ฆ์ ๋ฐฑ์๋๋ก ๋ณด๋ด๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฐฑ์๋๋ ์ฑ์ ํฅํ ๊ตฌ๋ ์ํ๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๋ค.
์๋ ๊ฐฑ์ ๊ตฌ๋ ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์์ ์ ๋ก๋ํ์ง ์๊ณ ์ด๋ป๊ฒ ์ต์ ์์์ฆ์ ๋ฐ์ต๋๊น?
์ด์ ๊ฐ์ด ๋ชจ๋ ๊ตฌ๋งค๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฆํ๋ ๋ฐฑ์๋์์์ฃผ๊ธฐ์ ์ธ ํด๋ง์ ์คํํ์ฌ ๊ฒ์ฆ (google / apple ์๋ฒ์์ ์ ๊ณต)์์ ์ต์ ์์์ฆ์ ๊ฐ์ ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ ์ ์ฅํฉ๋๋ค.
์ด์ ๊ฐ์ด ๋ชจ๋ ๊ตฌ๋งค๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฆํ๋ ๋ฐฑ์๋์์์ฃผ๊ธฐ์ ์ธ ํด๋ง์ ์คํํ์ฌ ๊ฒ์ฆ (google / apple ์๋ฒ์์ ์ ๊ณต)์์ ์ต์ ์์์ฆ์ ๊ฐ์ ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ ์ ์ฅํฉ๋๋ค.
์๋
ํ์ธ์ @mifi ๋น ๋ฅธ ์๋ต์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์๋ ๊ฑฐ๋ ํ ์๋ฒ์ latestReceipt
์ ์ ์ฅํ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋ latestReceipt
๋ก ํด๋งํ๋ฉด ์๋ก์ด latestReceipt
๊ฐ์ด ๋ฐํ๋ฉ๋๊น?
์, ๋ฐฑ์๋์ iap.validate
ํจ์๋ ์ต์ ์์์ฆ์ ๋ฐํํ๋ apple / google api๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ ๊ฐ๊ฒฉ (๊ตฌ๋
๊ธฐ๊ฐ ๋น 5 ๋ถ)์ผ๋ก ๊ฐฑ์ ๊ฐ๋ฅํ ๊ตฌ๋
์ ํ
์คํธ ํ ๋ ์ฝ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค @mifi ์ ๋ง ์ ์ดํด๋ฅผ ๋์์ต๋๋ค! "latestReceipt"๋ฅผ ๋ฐ๊ธฐ ์ํด "latestReceipt"๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด ์ด์ํ๊ฒ ๋ณด์์ต๋๋ค.
์๋ ํ์ธ์. ์ต๊ทผ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์์ฃผ์๊ฐ ํ์ํฉ๋๊น? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ "ํ ๋ก ์ฉ"๋๋ "์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ "๋ก ํ์ ํ ์๋ ์์ผ๋ฉฐ ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฅ๊ธฐ๊ฐ ์ฌ์ฉํ์ง ์์ผ๋ฉด์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํฉ๋๋ค. ์ด ๋ฌธ์ ๊ฐ ์ต์ ๋ฆด๋ฆฌ์ค์ ์ฌ์ ํ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ต์ ์ ๋ณด๋ก ์ ๋ฌธ์ ๋ฅผ ์์ ๋กญ๊ฒ ์์ฑํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
getAvailablePurchases
๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ํ๋กฌํํธ๊ฐ ํ์๋๋์ง ์ ์์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ฆ, ์ฌ์ฉ์๊ฐ iTunes์ ์ฐ๊ฒฐ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ง ํ ์ ์์ต๋๊น?