React-native-iap: ν…ŒμŠ€νŠΈ κ³„μ •μ—μ„œ Android ν•­λͺ©μ„ λ‹€μ‹œ ꡬ맀할 수 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 04μ›” 13일  Β·  16μ½”λ©˜νŠΈ  Β·  좜처: dooboolab/react-native-iap

react-native-iap 버전

0.3.10

였λ₯˜κ°€ λ°œμƒν•œ ν”Œλž«νΌ (IOS λ˜λŠ” Android λ˜λŠ” λ‘˜ λ‹€?)

기계적 인쑰 인간

μ˜ˆμƒλ˜λŠ” 행동

ν…ŒμŠ€νŠΈ μ€‘μ΄λ―€λ‘œ ν•„μš”ν•œλ§ŒνΌ ν•­λͺ©μ„ 재ꡬ맀 ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

μ‹€μ œ 행동

보고

Error: You already own this item.
    at createErrorFromErrorData (59522b9c-ca17-4e00-9e00-05cc989b1199:2016)
    at 59522b9c-ca17-4e00-9e00-05cc989b1199:1968
    at MessageQueue.__invokeCallback (59522b9c-ca17-4e00-9e00-05cc989b1199:2410)
    at 59522b9c-ca17-4e00-9e00-05cc989b1199:2155
    at MessageQueue.__guardSafe (59522b9c-ca17-4e00-9e00-05cc989b1199:2323)
    at MessageQueue.invokeCallbackAndReturnFlushedQueue (59522b9c-ca17-4e00-9e00-05cc989b1199:2154)
    at t (RNDebuggerWorker.js:1)

행동을 κΎΈμ§–λŠ” 단계

ν…ŒμŠ€νŠΈ 계정을 μ‚¬μš©ν•˜μ—¬ 두 번 이상 ν•­λͺ© ꡬ맀

πŸ™ help wanted

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@ilyakar 와 같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμœΌλ©° μ•„λž˜ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λΉ„ μ†Œλͺ¨μ„± ꡬ맀λ₯Ό μ§€μš°κ³  λ‹€μ‹œ ν…ŒμŠ€νŠΈ ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

async componentDidMount() {
    const { itemSkus } = this.props;
    try {
      const result = await RNIap.initConnection()
      console.log('initiated connection?', result)
      const consumed = await RNIap.consumeAllItems();
      console.log('consumed all items?', consumed)
      let products = await RNIap.getProducts(itemSkus);
      console.log('loaded products', products)
    } catch (err) {
      console.warn(err);
    }
  };

λͺ¨λ“  16 λŒ“κΈ€

@ilyakar 이것은 μ†Œλͺ¨ν’ˆμž…λ‹ˆκΉŒ? λ‹€μ‹œ κ΅¬λ§€ν•˜λ €λ©΄ μ•„μ΄ν…œμ„ μ†ŒλΉ„ν•΄μ•Όν•©λ‹ˆλ‹€. Androidμ—μ„œ IAPκ°€ μž‘λ™ν•˜λŠ” 방식에 λŒ€ν•œ κ°€μ΄λ“œλ₯Ό μ½μ–΄λ³΄μ„Έμš”.

μ•ˆλ…•ν•˜μ„Έμš” @dooboolab , μ†Œλͺ¨ν’ˆμ΄ μ•„λ‹™λ‹ˆλ‹€. μ‚¬μš©μžλŠ” μ˜μ›νžˆ 가지고 μžˆμŠ΅λ‹ˆλ‹€. μ œν’ˆμ„ 볡원 ν•  μˆ˜μžˆλŠ” 방법이 μžˆμœΌλ―€λ‘œ 이미 κ΅¬λ§€ν–ˆκΈ° λ•Œλ¬Έμ— λ™μΌν•œ μ œν’ˆμ„ λ‹€μ‹œ ꡬ맀할 수 μ—†λ‹€λŠ” 것을 ν”„λ‘œλ•μ…˜μ—μ„œ μ‚¬μš©μžμ—κ²Œ μ•Œλ¦¬λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ν…ŒμŠ€νŠΈ λͺ©μ μœΌλ‘œ λͺ¨λ“  ꡬ맀λ₯Ό ꡬ맀할 λ•Œλ§ˆλ‹€ λ‹€λ₯Έ 계정을 μ‚¬μš©ν•΄μ•Όν•˜λŠ” 것은 맀우 λΆˆνŽΈν•©λ‹ˆλ‹€.

λ‚˜λŠ” 0.2.17 μ—μ„œμ΄ λ¬Έμ œκ°€ μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@ilyakar μ•„ .. ν˜Όλž€μŠ€λŸ¬μ›Œμ„œ μ£„μ†‘ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ non-consumable μ œν’ˆμ΄λ©΄ μ‹€μ œλ‘œ λ‹€μ‹œ ꡬ맀할 수 μ—†μŠ΅λ‹ˆλ‹€. 그것이 0.2.17 μ—μ„œ κ°€λŠ₯ν•˜λ‹€λ©΄ μ–΄μƒ‰ν•˜κ²Œ μž‘λ™ ν•  κ²ƒμž„μ— ν‹€λ¦Ό μ—†λ‹€ .. μ†Œλͺ¨ν’ˆ 만이 그것을 재ꡬ맀 ν•  μˆ˜μžˆλ‹€. 두 ν”Œλž«νΌ (iOS 및 Android)μ—μ„œ λ™μΌν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ ν•­λͺ©μ„ λ³΅μ›ν•˜λ €λ©΄ μ„ νƒμ μœΌλ‘œ μˆ˜ν–‰ν•΄μ•Όν•˜μ§€λ§Œ LINKμ—μ„œ 와 같이 μ‚¬μš©μžμ—κ²Œ λ‹€μ‹œ μ²­κ΅¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 재ꡬ맀둜 μ‚¬μš©μžμ—κ²Œ μš”κΈˆμ„ λΆ€κ³Όν•˜κ³  싢은 인앱 μƒν’ˆμ„ λ””μžμΈν•œλ‹€λ©΄ consumable μƒν’ˆμ„ λ§Œλ“€μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@ilyakar 친ꡬ κ°œλ°œμžλ‘œλΆ€ν„° ν”Όλ“œλ°±μ„ android μ—μ„œλ§Œ λ°œμƒν•˜λŠ” refreshItems λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μ†”λ£¨μ…˜μ„ μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. [email protected] μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. prepare 방법 후에 μ‚¬μš©ν•΄λ³΄μ„Έμš”. 제 μΉœκ΅¬λŠ” ꡬ맀 ν•œ μ œν’ˆμ˜ 토큰을 찾을 수 μ—†μ–΄μ„œμ΄ λ¬Έμ œμ— μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œμ΄ method λŠ” playstore μ˜μ‘΄ν•˜λŠ” ꡬ맀 내역에 μ‹ κ²½ 쓰지 μ•ŠλŠ” 경우 κ·€ν•˜μ˜ 편의λ₯Όμœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. ꡬ맀 내역을 μˆ˜μ§‘ν•˜λŠ” 자체 λ°±μ—”λ“œκ°€ 있으면 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 λ„μ›€μ΄λ©λ‹ˆλ‹€. λ‚˜λŠ” 이것에 λŒ€ν•΄ 더 νž˜λ“  κ²ƒμ„λ³΄μ•„μ•Όν•œλ‹€. λ˜ν•œ readme λ”°λ₯΄λŠ” 것이 도움이 될 κ²ƒμž…λ‹ˆλ‹€. μ‹ κ³  ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

μΆ”μ‹  μœ„μ˜ 방법이 non-consumable μ œν’ˆμ—μ„œλ„ μž‘λ™ ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€. λ˜ν•œ 이 기사 λŠ” refeshItems κ°€ 무엇을 ν•΄κ²°ν•˜λŠ”μ§€ μ΄ν•΄ν•˜λŠ” 데 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

IAPκ°€ ν…ŒμŠ€νŠΈ κ³„μ •μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μ•„ 이미 ν•΄κ²° 된 것 κ°™μŠ΅λ‹ˆλ‹€.

그리고 @dooboolab 의 refreshItems μ†”λ£¨μ…˜μ€

Android μ•±μ—μ„œ IAPλ₯Ό ν•œ 번만 κ΅¬ν˜„ν–ˆμ§€λ§Œ μž‘λ™ν•˜λ©΄ μ‹œλ„ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ—

$ 0❓ 같은 λˆμ„ 쓰지 μ•Šκ³  μ œν’ˆμ„ μ‚΄ 수 μžˆμŠ΅λ‹ˆκΉŒ?

예 @ deadcoder0904 , 이것이 Android ν…ŒμŠ€νŠΈ κ³„μ •μ˜ 전체 κ°œλ…μž…λ‹ˆλ‹€ (https://developer.android.com/google/play/billing/billing_testing.html). ν”ŒλŸ¬κ·ΈμΈμ—μ„œ 잘 μž‘λ™ν•˜μ§€λ§Œ λ‚΄κ°€ μ§€μ ν–ˆλ“―μ΄ λ™μΌν•œ ꡬ맀λ₯Ό 두 번 ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

@ilyakar 당신은 그것이 μ—¬μ „νžˆ μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  λ§ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ œν’ˆμ„ ꡬ맀 ν•œ ν›„ refreshItems μ „ν™” ν•΄ λ³΄μ…¨λ‚˜μš”? 여기에 μ„€λͺ… λœλŒ€λ‘œ Playstoreμ—μ„œ μ•½κ°„μ˜ 지연이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ œν’ˆμ„ κ°•μ œλ‘œ μ†ŒλΉ„ν•˜μ—¬ λ‹€μ‹œ ꡬ맀할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ˜ν•œ 이것이 μ™œ μž‘λ™ν•˜λŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€ .. λ˜ν•œ Google Play 내역에 λŒ€ν•œ ꡬ맀에 μ˜μ‘΄ν•˜κ³  λ°±μ—”λ“œμ—μ„œ μˆ˜μ§‘ν•˜μ§€ μ•ŠλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

μ•ˆλ…•ν•˜μ„Έμš” @dooboolab , 이전 μ§€μ‹μœΌλ‘œ @ deadcoder0904에 μ‘λ‹΅ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” κ·€ν•˜μ˜ μ†”λ£¨μ…˜μ„ μ‹œλ„ν•˜μ§€ μ•Šμ•˜μœΌλ©° κΈ΄κΈ‰ν•œ μˆ˜μ •μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— ν•œλ™μ•ˆ μ‹œλ„ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” λ‚΄κ°€ κ°€μ§€κ³ μžˆμ„ λ•Œ λ‹Ήμ‹ μ—κ²Œ μ•Œλ €μ€„ κ²ƒμž…λ‹ˆλ‹€.

@ilyakar λŠ” μ‚¬μš©μžκ°€ ꡬ맀 ν•œ λͺ¨λ“  μ œν’ˆμ„ μ†ŒλΉ„ν•˜λ―€λ‘œ refreshItems λ₯Ό μ‚¬μš©ν•˜μ—¬μ£Όμ˜ν•˜μ‹­μ‹œμ˜€. 당첨 된 μ„œλ²„κ°€ 있기 λ•Œλ¬Έμ— ν”Œλ ˆμ΄ μŠ€ν† μ–΄μ— μ €μž₯된 정보에 μ‹ κ²½ 쓰지 μ•ŠλŠ” κ²½μš°μ—λ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ,이 문제 μ‚¬μš©μ€ 13 일 μ „ μ—¬κΈ° μ—μ„œ κ²Œμ‹œ ν•œ κ²ƒμ²˜λŸΌ λ°œμƒν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μƒν’ˆμ„ ν™˜λΆˆ ν•œ 경우 24 μ‹œκ°„ λ™μ•ˆ λ™μΌν•œ μƒν’ˆμ„ λ‹€μ‹œ ꡬ맀할 수 μ—†μŠ΅λ‹ˆλ‹€.

@ilyakar 와 같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμœΌλ©° μ•„λž˜ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λΉ„ μ†Œλͺ¨μ„± ꡬ맀λ₯Ό μ§€μš°κ³  λ‹€μ‹œ ν…ŒμŠ€νŠΈ ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

async componentDidMount() {
    const { itemSkus } = this.props;
    try {
      const result = await RNIap.initConnection()
      console.log('initiated connection?', result)
      const consumed = await RNIap.consumeAllItems();
      console.log('consumed all items?', consumed)
      let products = await RNIap.getProducts(itemSkus);
      console.log('loaded products', products)
    } catch (err) {
      console.warn(err);
    }
  };

@TylerNoblett 이 μ†”λ£¨μ…˜μ€ μ§€κΈˆ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • λ‚˜λŠ” μ‹œλ„ν–ˆλ‹€ consumeAllItemsAndroid λŒ€μ‹  consumeAllItems .
    μΆ”κ°€ 도움을 μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ½˜μ†” 좜λ ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

setUpDeveloperTools.js:73 TypeError: _reactNativeIap.default.consumeAllItems is not a function
    at loadPurchases$ (NewGameScreen.js:167)
    at tryCatch (runtime.js:45)
    at Generator.invoke [as _invoke] (runtime.js:271)
    at Generator.prototype.<computed> [as next] (runtime.js:97)
    at tryCatch (runtime.js:45)
    at invoke (runtime.js:135)
    at runtime.js:145
    at tryCallOne (core.js:37)
    at core.js:123
    at JSTimers.js:289

의 μœ„μ—:

    "react": "16.9.0",
    "react-native": "0.61.3",
    "react-native-iap": "^4.3.0",

@tulpn consumeAllItemsAndroid 이 (κ°€) μ œλŒ€λ‘œ μž‘λ™ ν•  κ²ƒμ΄λ―€λ‘œ λͺ¨λ“ˆμ„ μ˜¬λ°”λ₯΄κ²Œ μ„€μΉ˜ν•˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€.

@hyochan μ €λ₯Ό μœ„ν•΄ μΌν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@ roots-ai μ–΄λ–€ 버전을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? λ˜ν•œ example μ—μ„œ 제곡 ν•œ μ½”λ“œλ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰