React-native-iap: getAvailablePurchases๋Š” ๋งค๋ฒˆ ๋‹ค๋ฅธ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

react-native-iap ๋ฒ„์ „

3.3.9 (ํ•˜์ง€๋งŒ 3.0.0 ์ด์ „ ๋ฒ„์ „์—์„œ๋„ ๊ฒฝํ—˜ ํ•จ)

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

0.59.9

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

iOS (Android์—์„œ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์Œ)

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

getAvailablePurchases ํ˜ธ์ถœ ํ•  ๋•Œ๋งˆ๋‹ค ๋™์ผํ•œ ๋ฐฐ์—ด
๋งค๋ฒˆ ๋™์ผํ•œ ์–ด๋ ˆ์ด ๊ธธ์ด

์‹ค์ œ ํ–‰๋™

getAvailablePurchases ํ˜ธ์ถœ ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฐ์—ด
getAvailablePurchases ํ˜ธ์ถœ ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฐ์—ด ๊ธธ์ด

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

์‹ค์ œ ์žฅ์น˜

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

๋งŽ์€ ๊ฑฐ๋ž˜์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด Sandbox ๊ณ„์ •์—๋Š” 50 ๊ฐœ ์ด์ƒ์˜ ๊ฑฐ๋ž˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

handleOnPressRestore = async () => {
  return this.setState({ isLoadingRestorePurchases: true }, async () => {
    try {

      // Get the previous purchases of the current user
      const purchases = await RNIap.getAvailablePurchases();

      // Get the latest receipt from the purchases to validate
      const { transactionReceipt, productId, transactionDate } = this.getLatestPurchase(purchases);

      console.log(purchases.length, productId, transactionDate);

      // Validate the receipt on our server
      await this.props.validateSubscriptionReceipt(productId, transactionReceipt);

      // The validation result is handled in componentDidUpdate
    } catch (err) {
      throw err;
    } finally {
      this.setState({ isLoadingRestorePurchases: false });
    }
  });
}

getLatestPurchase = (purchases: RNIap.ProductPurchase[]): RNIap.ProductPurchase => {
  // First, sort the array, so the latest purchase is on top
  // https://github.com/dooboolab/react-native-iap/issues/532#issuecomment-503174711
  const sortedPurchases = purchases.sort((a, b) => b.transactionDate - a.transactionDate);

  const purchase = sortedPurchases[0];

  return purchase;
}

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "๊ตฌ๋งค ๋ณต์›"์„ ๋ˆ„๋ฅด๋ฉด ๋งค๋ฒˆ ๋‹ค๋ฅธ ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ '๊ตฌ๋งค ๋ณต์›'์„ 6 ๋ฒˆ ๋ˆ„๋ฅด์„ธ์š”.

// purchases.length, productId, transactionDate
9 "com.app.sub" 1565182529000
21 "com.app.sub" 1565181329000
22 "com.app.sub" 1565183001000
42 "com.app.sub" 1565183001000
53 "com.app.sub" 1565182529000
55 "com.app.sub" 1565183001000
15 "com.app.sub" 1565182529000

๋ฐฐ์—ด์ด ํ•ญ์ƒ ๋™์ผ ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋งž์ฃ ? ์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

getAvailablePurchases() ์˜ ๊ฒฐ๊ณผ๋Š” ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

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

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

๋˜ํ•œ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ–ˆ์ง€๋งŒ finishTransactionIOS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฑฐ๋ž˜๋Š” ์ž๋™ ๊ฐฑ์‹  ๊ตฌ๋…์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์„๋ณด๊ณ ์žˆ๋‹ค. ์ •๋ง ์œ„ํ—˜ํ•œ ์ ์€ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์œ ํšจํ•œ ์˜์ˆ˜์ฆ์ด ๊ฒฐ๊ณผ์— ์—†์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์†”์งํžˆ์ด ๋ชจ๋“ˆ์€ restoreCompletedTransactions() ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ†ต๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Apple ์ธก์˜ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

getPurchaseHistory() ์ด ๊ตฌ๋…์— ์‚ฌ์šฉํ•˜๊ธฐ์— ์ข‹์€ ๋Œ€์•ˆ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ์ด๋ฅผ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์•ฑ์— ๋‹ค๋ฅธ ๊ตฌ๋งค ํ•ญ๋ชฉ์ด์—†๊ณ  ๊ตฌ๋… ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŒจํ‚ค์ง€์˜ iap ๋ฌธ์„œ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด getAvailablePurchases() ๋Š” ์†Œ๋ชจํ’ˆ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋…์€ "์†Œ๋ชจํ’ˆ"๋˜๋Š” "๋น„ ์†Œ๋ชจํ’ˆ"์ œํ’ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค. "์ž๋™ ๊ฐฑ์‹  ๊ตฌ๋…"์ž…๋‹ˆ๋‹ค. getPurchaseHistory() ์ด (๊ฐ€)ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

Screenshot 2019-08-16 at 18 11 13

getPurchaseHistory ()๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฐฐ์—ด ๊ธธ์ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์š”์ฒญ ๋นˆ๋„๊ฐ€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜ ์˜์ˆ˜์ฆ์˜ ๋ชจ๋“  ์˜์ˆ˜์ฆ์€ ์• ํ”Œ์— ์˜ํ•ด ๋ฐ˜ํ™˜ ๋œ ๊ฒ€์ฆ์„ ์œ„ํ•ด ์ „์†ก ๋œ ํ›„ ๊ฒฐ๊ตญ ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ •๋ง ์ƒ๊ด€์ดํ•˜์ง€ ์•Š์•˜๋‹ค ๋ฐํ˜€์กŒ๋‹ค latest_receipt_info ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ค‘์š” ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค ๋ฐฐ์—ด ์–ด์จŒ๋“ .

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (์ƒŒ๋“œ ๋ฐ•์Šค ๋ชจ๋“œ ์˜ค๋ฅ˜์ธ์ง€ ๋ชจ๋ฅด๊ฒ  ์Œ). ๋˜ํ•œ ์‹ค์ œ ๊ธฐ๊ธฐ์—์„œ Apple ID๋ฅผ ์ „ํ™˜ํ•˜๋ฉด ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ๊ตฌ๋งค ํ•œ ํ•ญ๋ชฉ์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์ „์˜:
[email protected] ๊ณ„์ •์œผ๋กœ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.
2-Apple ID๋ฅผ [email protected]์œผ๋กœ ์ „ํ™˜
3-getAvailablePurchases๋Š” [email protected] ๊ณ„์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ตฌ๋งค์˜ transactionId๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐพ์€ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์žฅ์น˜๋ฅผ ๋ณต์›ํ•˜๋ฉด (์ดˆ๊ธฐํ™”) getPurchaseHistory() ๋ฐ getAvailablePurchases ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์ž„์˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ตฌ๋งค ๋ณต์›์— ๋Œ€ํ•œ Apple์˜ ์‘๋‹ต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

"Users restore transactions to maintain access to content they've already purchased. For example, when they upgrade to a new phone, they don't lose all of the items they purchased on the old phone. Include some mechanism in your app to let the user restore their purchases, such as a Restore Purchases button."

์•ž์„œ @ ssg-luke๊ฐ€ ๋งํ•œ๋Œ€๋กœ restoreCompletedTransactions ์˜ ๋‹ค์–‘ํ•œ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ Apple ๊ฐœ๋ฐœ์ž ํฌ๋Ÿผ ์ฃผ์ œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

https://forums.developer.apple.com/thread/115242

์•„๋งˆ๋„ ์ด๊ฒƒ์€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ์ด ์•„์ง finishTransaction์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์ด ๋งŽ์€ ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://forums.developer.apple.com/thread/115242#thread -post-355444

๋™์ผํ•œ ์žฅ์น˜์— ๋‹ค๋ฅธ ์ƒŒ๋“œ ๋ฐ•์Šค ๊ณ„์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋™์ผํ•œ ์žฅ์น˜์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ„์ •์˜ ๊ฑฐ๋ž˜๊ฐ€ ์—‰๋ง์ด๊ณ  ์ „ํ˜€ "์™„๋ฃŒ"๋˜์ง€ ์•Š์€ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์—์„œ finishTransactionIOS ๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๊ทธ๊ฒƒ๋“ค์„ ์‚ฌ๋ผ์ง€๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์•˜๊ฑฐ๋‚˜ getAvailablePurchases() ์˜ ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ œ๊ฐ€ ์ด๋ฏธ ์ƒˆ๋กœ์šด ์ƒŒ๋“œ ๋ฐ•์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ํŠธ๋žœ์žญ์…˜์ด ์ด์ „ ์ƒŒ๋“œ ๋ฐ•์Šค ๊ณ„์ •์—์„œ ์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ผ๊นŒ์š”?

@fcandiani๊ฐ€ ๊ฒฝํ—˜ ํ•œ ๊ฒƒ์„ ์„ค๋ช… ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

getPurchaseHistory ()๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฐฐ์—ด ๊ธธ์ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์š”์ฒญ ๋นˆ๋„๊ฐ€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ ์‹ค์ œ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ๊ฑฐ๋ž˜ ์˜์ˆ˜์ฆ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ๋ณด๋‚ด์ง€๋ฉด ๋ชจ๋“  ์˜์ˆ˜์ฆ์€ ์–ด์จŒ๋“  latest_receipt_info ๋ฐฐ์—ด๋กœ Apple์— ์˜ํ•ด ๋ฐ˜ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ •๋ณด @ ssg-luke ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ๋‚˜๋„ ๋˜‘๊ฐ™์ด ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ–ˆ์ง€๋งŒ finishTransactionIOS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฑฐ๋ž˜๋Š” ์ž๋™ ๊ฐฑ์‹  ๊ตฌ๋…์ž…๋‹ˆ๋‹ค.

๊ฑฐ์˜ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋“  ์ •๋ณด๋ฅผ ์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

react-native-iap ๋ฒ„์ „

3.5.9

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

0.60.5

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

iOS

  • ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์ƒ์‚ฐ์ค‘์ธ Android์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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

์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ๋ฒˆ ๊ตฌ๋…ํ•˜๋ฉด getAvailablePurchases ํ•œ ๋ฒˆ์˜ ๊ตฌ๋งค ๋งŒ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

getAvailablePurchases ๋‘˜ ์ด์ƒ์˜ ๊ตฌ๋งค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

์ƒˆ ์ƒŒ๋“œ ๋ฐ•์Šค ๊ณ„์ •์ด์žˆ๋Š” ์‹ค์ œ ์žฅ์น˜.

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

  • https://appstoreconnect.apple.com/access/testers ์—์„œ ์ƒŒ๋“œ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • xcode์—์„œ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰
  • getAvailablePurchases (๋ฅผ) ํ˜ธ์ถœํ•˜๋ฉด ๊ตฌ๋งค ๋‚ด์—ญ์ด ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์˜ˆ์ƒ๋Œ€๋กœ).
  • ์ผ๋ถ€ ์ œํ’ˆ ๊ตฌ๋…
  • ๋‚ด purchaseUpdatedListener ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  undefined ๋งŒ ๋ฐ˜ํ™˜๋˜๋Š” RNIap.finishTransactionIOS(subscription.transactionId); ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค (์˜ˆ์ƒ๋Œ€๋กœ).
  • getAvailablePurchases ํ˜ธ์ถœํ•˜๊ณ  1 ํšŒ ๊ตฌ๋งค ๋ฐ˜ํ™˜ (์˜ˆ์ƒ๋Œ€๋กœ)
  • ์•ฑ ์ƒˆ๋กœ ๊ณ ์นจ
  • getAvailablePurchases ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ๊ฐ ๋‹ค๋ฅธ transactionId ๊ฐ€์žˆ๋Š” ๋‘ ๊ฐœ์˜ ๊ตฌ๋งค๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
{
   originalTransactionDateIOS: 1571144840000
   originalTransactionIdentifierIOS: "1000000579413333"
   productId: "io.appmasters.lowcarb.development"
   transactionDate: 1571145019000
   transactionId: "1000000579415509"
   transactionReceipt: "MIIVnQYJKoZIhvcN..."
},
{
   originalTransactionDateIOS: 1571144840000
   originalTransactionIdentifierIOS: "1000000579413333"
   productId: "io.appmasters.lowcarb.development"
   transactionDate: 1571144839000
   transactionId: "1000000579416705"
   transactionReceipt: "MIIVnQYJKoZIhvcN...."
}
  • ์•ฑ ๋‹ค์‹œ๋กœ๋“œ
  • getAvailablePurchases ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ๊ฐ ๋‹ค๋ฅธ transactionId ๊ฐ€์žˆ๋Š” 3 ๊ฐœ์˜ ๊ตฌ๋งค๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค (์ด์ „ ๊ฒฐ๊ณผ์™€ ๋™์ผํ•˜์ง€ ์•Š์Œ).
{
   originalTransactionDateIOS: 1571144840000
   originalTransactionIdentifierIOS: "1000000579413333"
   productId: "io.appmasters.lowcarb.development"
   transactionDate: 1571145739000
   transactionId: "1000000579423546"
   transactionReceipt: "MIIb1AYJKoZIhvcN..."
},{
   originalTransactionDateIOS: 1571144840000
   originalTransactionIdentifierIOS: "1000000579413333"
   productId: "io.appmasters.lowcarb.development"
   transactionDate: 1571145019000
   transactionId: "1000000579426352"
   transactionReceipt: "MIIb1AYJKoZI..."
},{
   originalTransactionDateIOS: 1571144840000
   originalTransactionIdentifierIOS: "1000000579413333"
   productId: "io.appmasters.lowcarb.development"
   transactionDate: 1571144839000
   transactionId: "1000000579426353"
   transactionReceipt: "MIIb1AYJKoZIhvcN..."
}
  • ์•ฑ ๋‹ค์‹œ๋กœ๋“œ
  • getAvailablePurchases ํ˜ธ์ถœํ•˜๊ณ  ๊ฐ๊ฐ ๋‹ค๋ฅธ transactionId ๊ฐ€์žˆ๋Š” 4 ๊ฐœ์˜ ๊ตฌ๋งค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค (์ด์ „ ๊ฒฐ๊ณผ์™€ ๋™์ผํ•˜์ง€ ์•Š์Œ) ...

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๋ฌธ์„œ์—์„œ ์ฝ์€ ๊ฒƒ๊ณผ Android์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ํ–‰๋™์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

getAvaialblePurchases ()๊ฐ€ ์ƒŒ๋“œ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ๊ณ„์ •์— 150 ๊ฐœ ์ด์ƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. getAvailablePurchases ()๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰ ๊ตฌ๋งค๋ฅผ ์žฅ์น˜์™€ ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ ํœด๋Œ€ํฐ์œผ๋กœ ์ด๋™ ํ•œ ๊ฒฝ์šฐ์—๋„ ํšŒ์‚ฌ ์‚ฌ์šฉ์ž ID ๋ฐ ํ”Œ๋žซํผ (iOS ๋˜๋Š” Android)๊ณผ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„์—์„œ ๋งˆ์ง€๋ง‰ ๊ตฌ๋งค๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. getAvailablePurchases () ํ˜ธ์ถœ์€ 1 ๋ถ„ ๊ฐ€๊นŒ์ด ๊ฑธ๋ฆฌ๋ฉฐ ๋•Œ๋•Œ๋กœ์ด ํŠธ๋ฆฌ๊ฑฐ ๊ตฌ๋งค ์—…๋ฐ์ดํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ตฌ๋งค๋ฅผ ๋ณต์›ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ๋ฆ„์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
1) ์‚ฌ์šฉ์ž๊ฐ€ ์žฅ์น˜์— ๋กœ๊ทธ์ธ ํ•  ๋•Œ :
a) ์‚ฌ์šฉ์ž ๋ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ์„œ๋ฒ„์—์„œ ์œ ํšจํ•œ ๋งˆ์ง€๋ง‰ ๊ตฌ๋งค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
b) ์„œ๋ฒ„์— ๊ธฐ๋ก์ด์—†๋Š” ๊ฒฝ์šฐ DB์— ๋กœ์ปฌ ์ €์žฅ ๊ตฌ๋งค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
c) ๋งŒ๋ฃŒ ๋œ ํ•ญ๋ชฉ์ด ์—†๊ฑฐ๋‚˜ ๋งŒ๋ฃŒ ๋œ ๊ฒฝ์šฐ ๊ตฌ๋…๋ณด๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
์ฒ˜์Œ์—๋Š” getAvailablePurchases ()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๊ตฌ๋งค๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋” ์ด์ƒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐ˜์‘ 59์— ์žˆ๊ณ  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค.

@ramakula ๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋…์„ ์ทจ์†Œํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

๋ง์”€ํ•˜์‹ ๋Œ€๋กœ ๊ตฌ๋…์€ ์ข…๋ฃŒ์ผ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ ์ง€๋˜๋ฉฐ ๋” ์ด์ƒ ๊ตฌ๋งคํ•  ์ˆ˜์—†๋Š” ํ•ญ๋ชฉ์ด "๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค".

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

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

getAvaialblePurchases ()๊ฐ€ ์ƒŒ๋“œ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ๊ณ„์ •์— 150 ๊ฐœ ์ด์ƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. getAvailablePurchases ()๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰ ๊ตฌ๋งค๋ฅผ ์žฅ์น˜์™€ ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ ํœด๋Œ€ํฐ์œผ๋กœ ์ด๋™ ํ•œ ๊ฒฝ์šฐ์—๋„ ํšŒ์‚ฌ ์‚ฌ์šฉ์ž ID ๋ฐ ํ”Œ๋žซํผ (iOS ๋˜๋Š” Android)๊ณผ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„์—์„œ ๋งˆ์ง€๋ง‰ ๊ตฌ๋งค๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. getAvailablePurchases () ํ˜ธ์ถœ์€ 1 ๋ถ„ ๊ฐ€๊นŒ์ด ๊ฑธ๋ฆฌ๋ฉฐ ๋•Œ๋•Œ๋กœ์ด ํŠธ๋ฆฌ๊ฑฐ ๊ตฌ๋งค ์—…๋ฐ์ดํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ตฌ๋งค๋ฅผ ๋ณต์›ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ๋ฆ„์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์žฅ์น˜์— ๋กœ๊ทธ์ธ ํ•  ๋•Œ :
    a) ์‚ฌ์šฉ์ž ๋ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ์„œ๋ฒ„์—์„œ ์œ ํšจํ•œ ๋งˆ์ง€๋ง‰ ๊ตฌ๋งค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
    b) ์„œ๋ฒ„์— ๊ธฐ๋ก์ด์—†๋Š” ๊ฒฝ์šฐ DB์— ๋กœ์ปฌ ์ €์žฅ ๊ตฌ๋งค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    c) ๋งŒ๋ฃŒ ๋œ ํ•ญ๋ชฉ์ด ์—†๊ฑฐ๋‚˜ ๋งŒ๋ฃŒ ๋œ ๊ฒฝ์šฐ ๊ตฌ๋…๋ณด๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
    ์ฒ˜์Œ์—๋Š” getAvailablePurchases ()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๊ตฌ๋งค๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋” ์ด์ƒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐ˜์‘ 59์— ์žˆ๊ณ  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค.

์˜์ˆ˜์ฆ์—์„œ ์ตœ์‹  ๊ตฌ๋งค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. exclude-old-transactions : true๋กœ ์‚ฌ์šฉ์ž์˜ ์ˆ˜์‹ ์„ ํ™•์ธํ•˜๋ฉด ์ตœ์‹  ๊ตฌ๋… ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ž๋™ ๊ฐฑ์‹  ์œ ํ˜•์—๋งŒ ํ•ด๋‹น). ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ ๊ฐฑ์‹  ๊ตฌ๋… ๊ตฌ๋งค๋ฅผ ๋ณต์› ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด์ƒ์ ์ธ ๋ฐฉ๋ฒ•์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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