React-native-iap: purchaseErrorListener์—์„œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์•ฝ์† ๊ฑฐ๋ถ€ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ 

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

react-native-iap ๋ฒ„์ „

3.0.3

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

0.59.10

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

๊ธฐ๊ณ„์  ์ธ์กฐ ์ธ๊ฐ„

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

์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์•ฝ์† ๊ฒฝ๊ณ  ์—†์Œ

์‹ค์ œ ํ–‰๋™

09-03 16:42:41.214 20367 21085 I ReactNativeJS: 'purchaseErrorListener', { debugMessage: '', responseCode: 1 }
09-03 16:42:43.254 20367 21085 W ReactNativeJS: Possible Unhandled Promise Rejection (id: 0):
09-03 16:42:43.254 20367 21085 W ReactNativeJS: Error: Payment is Cancelled.
09-03 16:42:43.254 20367 21085 W ReactNativeJS: createErrorFromErrorData<strong i="14">@http</strong>://localhost:8081/index.delta?platform=android&dev=true&minify=false:2108:26
09-03 16:42:43.254 20367 21085 W ReactNativeJS: http://localhost:8081/index.delta?platform=android&dev=true&minify=false:2060:51
09-03 16:42:43.254 20367 21085 W ReactNativeJS: __invokeCallback<strong i="15">@http</strong>://localhost:8081/index.delta?platform=android&dev=true&minify=false:2627:23
09-03 16:42:43.254 20367 21085 W ReactNativeJS: http://localhost:8081/index.delta?platform=android&dev=true&minify=false:2358:34
09-03 16:42:43.254 20367 21085 W ReactNativeJS: __guard<strong i="16">@http</strong>://localhost:8081/index.delta?platform=android&dev=true&minify=false:2531:15
09-03 16:42:43.254 20367 21085 W ReactNativeJS: invokeCallbackAndReturnFlushedQueue<strong i="17">@http</strong>://localhost:8081/index.delta?platform=android&dev=true&minify=false:2357:21
09-03 16:42:43.254 20367 21085 W ReactNativeJS: invokeCallbackAndReturnFlushedQueue@[native code]

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

์‹ค์ œ ์žฅ์น˜

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

3.0.x ๋ธŒ๋žœ์น˜์— ์˜ˆ์ œ ์•ฑ์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ธฐ์—์„œ ์‹คํ–‰ํ•˜๊ณ  Get Products ๋ฅผ ํ„ฐ์น˜ ํ•œ ๋‹ค์Œ Purchase android.test.canceled ๋ฅผ ํ„ฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ™ help wanted ๐Ÿšถ๐Ÿป stale ๐Ÿค– android

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

๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๊ฒƒ์€์ด ๋ผ์ธ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค https://github.com/dooboolab/react-native-iap/blob/8d28d204857d65d99d764aa2a59f9bca1385859a/android/src/main/java/com/dooboolab/RNIap/RNIapModule.java#L506 ๊ทธ๋“ค์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์‚ฌ์šฉ ๋œ ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์กฐํ•ฉ์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด promise๋Š” ๊ฐ ์ดˆ๊ธฐํ™”์—์„œ ์ƒ์„ฑ ๋œ ๋‹ค์Œ DeviceEventManagerModule ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ํ•จ๊ป˜ ์ž‘์—… ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ํ•ด๊ฒฐ๋˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์„œ์—์„œ ์ดํ•ดํ–ˆ๋“ฏ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ†ต์‹ ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์•ฝ์†์€ ์ด์ œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์–ป์ง€ ๋ชปํ–ˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‚ด ๊ด€์ ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์˜ค๋ฅ˜ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ผ ๋•Œ ์•ฝ์†์„ ๊ฑฐ๋ถ€ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

@hyochan ๋‹ค๋ฅธ ์•„์ด๋””์–ด๋Š”? ์ €๋Š” ๊ธฐ์—ฌํ•  ์ค€๋น„๊ฐ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๊ฒƒ์€์ด ๋ผ์ธ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค https://github.com/dooboolab/react-native-iap/blob/8d28d204857d65d99d764aa2a59f9bca1385859a/android/src/main/java/com/dooboolab/RNIap/RNIapModule.java#L506 ๊ทธ๋“ค์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์‚ฌ์šฉ ๋œ ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์กฐํ•ฉ์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด promise๋Š” ๊ฐ ์ดˆ๊ธฐํ™”์—์„œ ์ƒ์„ฑ ๋œ ๋‹ค์Œ DeviceEventManagerModule ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ํ•จ๊ป˜ ์ž‘์—… ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ํ•ด๊ฒฐ๋˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์„œ์—์„œ ์ดํ•ดํ–ˆ๋“ฏ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ†ต์‹ ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์•ฝ์†์€ ์ด์ œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์–ป์ง€ ๋ชปํ–ˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‚ด ๊ด€์ ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์˜ค๋ฅ˜ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ผ ๋•Œ ์•ฝ์†์„ ๊ฑฐ๋ถ€ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

@hyochan ๋‹ค๋ฅธ ์•„์ด๋””์–ด๋Š”? ์ €๋Š” ๊ธฐ์—ฌํ•  ์ค€๋น„๊ฐ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@gaykov ๋‹น์‹ ์ด ๋งž์•„์š”. event ๋ฐ promises ๋ชจ๋‘ ์ง€์›ํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์˜ ๋ถ€์ž‘์šฉ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. PR ๐Ÿ”จ์—์„œ ๊ฐœ์„ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

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

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