React-native-iap: iOS์˜ getAvailablePurchases์—์„œ "iTunes Store์— ๋กœ๊ทธ์ธ"๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 10์›” 01์ผ  ยท  21์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dooboolab/react-native-iap

react-native-iap ๋ฒ„์ „

3.4.13

๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฒ„์ „

0.60.5

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ํ”Œ๋žซํผ (IOS ๋˜๋Š” Android ๋˜๋Š” ๋‘˜ ๋‹ค?)

iOS

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

getAvailablePurchases์—๋Š” ๋ถ€์ž‘์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

iOS์—์„œ getAvailablePurchases ์ „ํ™”ํ•˜๋ฉด "iTunes Store์— ๋กœ๊ทธ์ธ"๋Œ€ํ™” ์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Android์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

IMG_0020

๊ตฌ๋งค ํ•œ ํ•ญ๋ชฉ์„ ๋ณต์›ํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ ์‹œ์ž‘ ์ค‘์— getAvailablePurchases ์ „ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋งค ํ•œ ํ•ญ๋ชฉ์„ ๋ณต์›ํ•˜๊ธฐ ์œ„ํ•ด AppState์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋”ฐ๋ผ getAvailablePurchases ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ AppState๋Š” ์•ฑ ์‹œ์ž‘์‹œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ p.ex์—์„œ๋„ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™” ์ƒ์ž์—์„œ ์•ฑ์œผ๋กœ ๋Œ์•„๊ฐ„ ํ›„ (์•ฑ์— ์˜ํ•ด ๋ฐœ์ƒ) p.ex. iTunes์— ๋กœ๊ทธ์ธ ... :(

์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์ด๊ฒƒ์€ ๊ท€์ฐฎ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌ์ž…ํ•˜์ง€ ์•Š์œผ๋ ค๋Š” ๊ฒฝ์šฐ์ด ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์ž๊ฒฉ ์ฆ๋ช…์„ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋œ ํ™˜๊ฒฝ (์—๋ฎฌ๋ ˆ์ดํ„ฐ? ์‹ค์ œ ์žฅ์น˜?)

์‹ค์ œ ์žฅ์น˜

ํ–‰๋™์„ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„

getAvailablePurchases ํ˜ธ์ถœ

โ“ question ๐Ÿ“ฑ iOS ๐Ÿ™ help wanted ๐Ÿšถ๐Ÿป stale

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

getAvailablePurchases ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ‘œ์‹œ๋˜๋Š”์ง€ ์•Œ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ iTunes์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  21 ๋Œ“๊ธ€

๊ฐœ๋ฐœ ์ค‘์ผ ๋•Œ๋Š” ์ƒŒ๋“œ ๋ฐ•์Šค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌธ์„œ๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋งค์šฐ ๋ช…ํ™•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜์—์„œ๋Š”์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ๋งˆ๋‹ค ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ‘œ์‹œ ๋  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ๊ตฌํ˜„ ํ•œ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž๊ฐ€ "๊ตฌ๋งค ๋ณต์›"์„ ๋ˆ„๋ฅด๊ณ  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"๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ด์ƒํ•˜๊ฒŒ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”. ์ตœ๊ทผ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ™œ๋™์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์—ฌ์ „ํžˆ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋Š” ๋” ์ด์ƒ ํ™œ๋™์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ์ข…๊ฒฐ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ "ํ† ๋ก  ์šฉ"๋˜๋Š” "์ข‹์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ"๋กœ ํ‘œ์‹œ ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ์—ด์–ด ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์žฅ๊ธฐ๊ฐ„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์— ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์‹  ์ •๋ณด๋กœ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰