React-native-iap: iOS :์ด ์ธ์•ฑ ๊ตฌ๋งค๋Š” ์ด๋ฏธ ๊ตฌ๋งค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

react-native-iap ๋ฒ„์ „

"react-native-iap": "^2.0.3",

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

iOS

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

๊ตฌ๋งค

const ๊ตฌ๋งค = ๋Œ€๊ธฐ RNIap.buyProductWithoutFinishTransaction (productId)
const {transactionReceipt, purchaseToken} = ๊ตฌ๋งค
sendToServer (transactionReceipt, {
onSuccess : () => {
RNIap.finishTransaction ()
RNIap.consumeAllItems ()
}})

์‹ค์ œ ํ–‰๋™

๋Œ€ํ™” ์ƒ์ž :โ€œ์ด ์ธ์•ฑ ๊ตฌ๋งค๋Š” ์ด๋ฏธ ๊ตฌ๋งค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.โ€. ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ SKU์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๊ณ  ๋‹ค๋ฅธ SKU๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•ฑ์ด ๋‚˜์œ ์ƒํƒœ์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ๊ณ ์น  ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™”์‹œ finishTransaction ๋ฐ consumeAllItems ํ˜ธ์ถœ์— ์ง€ ์ณค์ง€ ๋งŒ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ SKU๋Š” ๋ฌธ์ œ์—†์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. getPurchaseHistory ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์žฅ์น˜ (์ƒŒ๋“œ ๋ฐ•์Šค)

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

์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฑ iOS ๐Ÿ™ help wanted

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

์ด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœ

didFinishLaunchingWithOptions currentQueue.transactions์—์„œ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ currentQueue.transactions๊ฐ€ ๋น„์–ด ์žˆ์ง€๋งŒ applicationDidBecomeActive์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

์–ด๋–ป๊ฒŒํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ์ด ๊ธฐ๋Šฅ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋…ธ์ถœ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

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

@siderakis ๊ทธ๋ž˜ ์ด์ƒํ•ด. ๋‚˜๋Š” ์ด๋ฏธ stackoverflow ์—์„œ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ์ด ๋ฌธ์ œ๋ฅผ ํŒจ์น˜ํ–ˆ์ง€๋งŒ ์ผ๋ถ€ ์žฅ์น˜์—์„œ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ๋„ ๊ธฐ๊บผ์ด ๊ณ ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@siderakis ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ๋‚˜์œ ์ƒํƒœ์—์„œ ์•ฑ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์•ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์ง€๋งŒ ๋„์›€์ด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. iPad์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

์ค‘๋‹จ ์ ์„ ์„ค์ •ํ–ˆ๋Š”๋ฐ currentQueue.transactions๊ฐ€ ๋น„์–ด์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

SKPaymentQueue.h์—์„œ

// Array of unfinished SKPaymentTransactions.  Only valid while the queue has observers.  Updated asynchronously.
@property(nonatomic, readonly) NSArray<SKPaymentTransaction *> *transactions NS_AVAILABLE_IOS(3_0);

<strong i="6">@end</strong>

๋‚ด๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋ถˆ๋ € ๋‚˜๋ด

๋‚˜์ค‘์— ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์—์„œ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@siderakis ๊ท€์ฐฎ๊ฒŒ
transactions ๋ฐฐ์—ด์€ ์šฐ๋ฆฌ ์ฝ”๋“œ์—์—†๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์†์„ฑ์ž…๋‹ˆ๋‹ค.
finishTransaction ์ฐพ์œผ์…จ์Šต๋‹ˆ๊นŒ?

์ด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœ

didFinishLaunchingWithOptions currentQueue.transactions์—์„œ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ currentQueue.transactions๊ฐ€ ๋น„์–ด ์žˆ์ง€๋งŒ applicationDidBecomeActive์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

์–ด๋–ป๊ฒŒํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ์ด ๊ธฐ๋Šฅ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋…ธ์ถœ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

@siderakis ์˜ˆ. ๊ทธ๊ฒƒ์ด ์ œ๊ฐ€ 259 ํ˜ธ์—์„œ ์˜๋ฏธ ํ•œ ๋ฐ”์ž…๋‹ˆ๋‹ค.
๋‚˜๋Š” applicationDidBecomeActive ์ดํ›„ ์–ด๋””์—์„œ๋‚˜ ํ–‰๋™์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ์ด ๋ฉ”์†Œ๋“œ๋ฅผ JS ์ธก์— ๋…ธ์ถœ์‹œ์ผœ ์‚ฌ์šฉ์ž๊ฐ€ ์–ธ์ œ๋“ ์ง€ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์กฐ์–ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@JJMoon , ๋‚˜๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๋ฐฉ๋ฒ•์„ ๋…ธ์ถœํ•˜๋Š” ๋ฐ ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์–ธ์ œ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ.

@sivrihuseyin ๋ฌธ์ œ๋Š” ํ˜„์žฌ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์ฃผ๋ง์— ํŒจ์น˜๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐœํ–‰์ž์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

2.2.0 ์—์„œ ์˜ˆ์ƒ๋˜๋Š” ์†”๋ฃจ์…˜์„ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. readme๋ฅผ ๋”ฐ๋ผ์ด ์ฝ”๋“œ ์ค„์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” ํšจ์ฐฌ,

์ •๋ณด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ 2.2.0์„ ์„ค์น˜ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„
๋ฌธ์ œ๋Š” ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. * clearTransaction * ํ•จ์ˆ˜๋Š”
์ˆ˜์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. reactNative ํ™˜๊ฒฝ์—๋Š” clearTransaction์ด ์—†์Šต๋‹ˆ๋‹ค.
RNIap ๋‚ด๋ถ€์˜ ๊ธฐ๋Šฅ.

index.d.ts ํŒŒ์ผ์„ ํ™•์ธํ–ˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์— clearTransaction. ํŒŒ์ผ.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ›„์„ธ์ธ

2018 ๋…„ 9 ์›” 16 ์ผ ์ผ์š”์ผ ์˜คํ›„ 2:25 ์žฅํšจ์ฐฌ [email protected]
์ผ๋‹ค :

ํ์‡„ # 257 https://github.com/dooboolab/react-native-iap/issues/257
a5f225d๋ฅผ ํ†ตํ•ด
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078
.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0
.

์•ˆ๋…•ํ•˜์„ธ์š” ํšจ์ฐฌ,

์ž˜๋ชป๋œ ์ •๋ณด๋กœ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค
๋” ์ด์ƒ.

์‹ ์†ํ•œ ์‘๋‹ต๊ณผ ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ›„์„ธ์ธ

2018 ๋…„ 9 ์›” 16 ์ผ ์ผ์š”์ผ ์˜คํ›„ 2:56 Huseyin Sivri [email protected]
์ผ๋‹ค :

์•ˆ๋…•ํ•˜์„ธ์š” ํšจ์ฐฌ,

์ •๋ณด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ 2.2.0์„ ์„ค์น˜ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„
๋ฌธ์ œ๋Š” ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ * clearTransaction *์ด
์ˆ˜์ถœ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. reactNative ํ™˜๊ฒฝ์—๋Š” clearTransaction์ด ์—†์Šต๋‹ˆ๋‹ค.
RNIap ๋‚ด๋ถ€์˜ ๊ธฐ๋Šฅ.

index.d.ts ํŒŒ์ผ์„ ํ™•์ธํ–ˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์— clearTransaction. ํŒŒ์ผ.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ›„์„ธ์ธ

2018 ๋…„ 9 ์›” 16 ์ผ ์ผ์š”์ผ ์˜คํ›„ 2:25 ์žฅํšจ์ฐฌ [email protected]
์ผ๋‹ค :

ํ์‡„ # 257 https://github.com/dooboolab/react-native-iap/issues/257
a5f225d๋ฅผ ํ†ตํ•ด
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078
.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0
.

๋ฒ„์ „ 2.2.0์—์„œ๋Š” clearTransaction ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค
์ซ‘๋ผ๋ฆฌ

v2์—์„œ v3-5๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ํ–ฅํ›„ Google ์ง์›์—๊ฒŒ ๋„์›€์ด๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/dooboolab/react-native-iap/blob/de0fc084966fc4d36a9c45f4e27cb166243d4319/README_DEPRECATED.md

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