React-native-iap: ๊ฐ™์€ ์ œํ’ˆ์„ ๋‘ ๋ฒˆ ๊ตฌ๋งคํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

react-native-iap ๋ฒ„์ „

0.3.13

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

iOS

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

๋ฌธ์ œ์—†์ด ์ œํ’ˆ์„ ๊ตฌ๋งคํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋จ

์‹ค์ œ ํ–‰๋™

"์ƒˆ" ์žฅ์น˜์—์„œ ์ฒ˜์Œ์œผ๋กœ product_A๋ฅผ ๊ตฌ์ž…ํ•  ๋•Œ - ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ๋กœ ๋™์ผํ•œ ์ƒํ’ˆ_A ๊ตฌ๋งค๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค(์•ฑ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ์ƒ๊ด€์—†์Œ).
์ž‘๋™ ์•ˆ ํ•  ๊ฒƒ์ด๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” "์•Œ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค."์ž…๋‹ˆ๋‹ค.

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

1.ReadME์™€ ๊ฐ™์ด IAP๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

try {
      const msg = await RNIap.prepare()
      const products = await RNIap.getProducts([`${productId}`])
      const purchase = await RNIap.buyProduct(productId)
      this.props.purchaseCoinsPack(coinsPack)
      await RNIap.consumePurchase(purchase.transactionReceipt)
    } catch (err) {
      alert(err.message);
    }

_ ๋‚ด componentDidMount() ๋ฐ componentWillUnmount()์— ์ด ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ:_

getPurchases = async () => {
    try {
      const purchases = await RNIap.getAvailablePurchases();
      purchases.forEach(async purchase => {
        const boughtPack = R.find(R.propEq('androidStoreId', purchase.productId))(this.props.coinsPacks)
        if (boughtPack) {
          this.props.purchaseCoinsPack(boughtPack);
          await RNIap.consumePurchase(purchase.transactionReceipt);
        }
      })
    } catch (err) {
      console.warn(err); // standardized err.code and err.message available
    } finally {
      this.setState({ isLoading: false })
    }
  }

  async componentDidMount() {
    try {
      await RNIap.prepare()
    } catch (err) {
      console.warn(err);
    }
    this.getPurchases()
  }

  async componentWillUnmount() {
    RNIap.endConnection()
  }

2.์ฒซ ๊ตฌ๋งค๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ๋„ ํ•ด์ฃผ์‹ญ์‹œ์˜ค."

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

์ตœ์‹  v0.3.15๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ error code ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ณ  ์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์˜ค๋ฅ˜ ์ฝ”๋“œ๊ฐ€ -1001์ด๋ฉด Apple์˜ ์ž„์‹œ ์ƒŒ๋“œ๋ฐ•์Šค ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

์ œํ’ˆ์€ ์†Œ๋ชจํ’ˆ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋น„์†Œ๋ชจํ’ˆ์ž…๋‹ˆ๊นŒ?

@JJMoon ์†Œ๋ชจํ’ˆ.
2018-04-19_07h40_09

์ตœ์‹  v0.3.15๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ error code ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ณ  ์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์˜ค๋ฅ˜ ์ฝ”๋“œ๊ฐ€ -1001์ด๋ฉด Apple์˜ ์ž„์‹œ ์ƒŒ๋“œ๋ฐ•์Šค ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

0.3.15๋กœ ์—…๋ฐ์ดํŠธํ•œ ํ›„ iOS์—์„œ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.
์•ˆ๋“œ๋กœ์ด๋“œ๋„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค!
์ƒˆ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋กœ๊ทธ ์™ธ์—๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— Apple์˜ ์ผ์‹œ์ ์ธ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒŒ๋“œ๋ฐ•์Šค๋กœ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์•ฑ ์Šคํ† ์–ด์—์„œ ์ถœ์‹œํ•œ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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