4.3.3
0.59.10
๊ธฐ๊ณ์ ์ธ์กฐ ์ธ๊ฐ
DEFERRED ๋ชจ๋๋ก ๊ตฌ๋ ์ ์ ๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋ ํ ๋ ๊ตฌ๋งค ์ ๋ฐ์ดํธ ๋ฆฌ์ค๋๋ฅผ ์ ํธ๋์ญ์ ์์์ฆ๊ณผ ํจ๊ป ํธ์ถํด์ผํฉ๋๋ค.
๊ตฌ๋งค ์ค๋ฅ ๋ฆฌ์ค๋๊ฐ ๋ค์ ์ค๋ฅ์ ํจ๊ป ํธ์ถ๋์์ต๋๋ค.
{๋ฉ์์ง : '๊ตฌ๋งค๊ฐ null์
๋๋ค.',
์ฝ๋ : 'OK',
debugMessage : '',
responseCode : 0}
์ค์ ์ฅ์น-์๋ ๋ฐ์ค
1. RNIap.requestSubscription (sku)์ผ๋ก ๊ตฌ๋ ์ ๊ตฌ๋งคํ๋ฉด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค.
2. RNIap.requestSubscription (newSku, false, sku, 4)์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ ์ ์ ๊ทธ๋ ์ด๋ํ๊ฑฐ๋ ๋ค์ด ๊ทธ๋ ์ด๋ํฉ๋๋ค. (4๋ ์ง์ฐ๋ ๋น๋ก ๋ฐฐ๋ถ ๋ชจ๋์ ๋๋ค.) Google Play ๊ฒฐ์ ๋ํ ์์์ ๊ตฌ๋ ์๊ธ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋ณ๊ฒฝ๋์์์ ํ์ํ๊ณ ์ด์ ๋ํ ์๋ฆผ ์ด๋ฉ์ผ์ Google Play์์ ๋ฐ๊ฒ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์์์ ์ธ๊ธ ํ ์ค๋ฅ์ ํจ๊ป ์ค๋ฅ ๋ฆฌ์ค๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
3. RNIap.requestSubscription (newSku, false, sku, 4)๋ฅผ ๋ค์ ํธ์ถํ๋ฉด Google Play ๊ฒฐ์ ๋ํ ์์์์ ๊ตฌ๋ ์๊ธ์ ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๋ฉ์์ง๊ฐ ํ์๋๊ณ ๋ค์ ์ค๋ฅ์ ํจ๊ป ์ค๋ฅ ๋ฆฌ์ค๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
{message : 'Google์์ ๊ฒฐ์ ์ฐ๊ฒฐ์ ๋ฌธ์ ๊ฐ ์์์ ๋ํ๋
๋๋ค.',
์ฝ๋ : 'E_DEVELOPER_ERROR',
debugMessage : '',
responseCode : 5}
ํ์ง๋ง ๋๋๋ก Google Play ๊ฒฐ์ ๋ํ ์์์ ์ฃผ๋ฌธ์ด ์ฒ๋ฆฌ ์ค์ด๋ฉฐ ์ ํ์ด ๊ณง ๋ฐฐ์ก ๋ ๊ฒ์ด๋ผ๊ณ ํ์๋๋ฉฐ ์ค๋ฅ ๋ฆฌ์ค๋๊ฐ ๋ค์ ์ค๋ฅ์ ํจ๊ป ํธ์ถ๋ฉ๋๋ค.
{message : '์ด๋ฏธ์ด ํญ๋ชฉ์ ์์ ํ๊ณ ์์ต๋๋ค.',
์ฝ๋ : 'E_ALREADY_OWNED',
debugMessage : '',
responseCode : 7}
๋๋ ์ด๊ฒ์ด 2 ๋จ๊ณ์ ๊ฑฐ๋๊ฐ ์น์ธ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ 2 ๋จ๊ณ์์๋ ์์์ฆ์ด ๋ฐํ๋์ง ์์ผ๋ฏ๋ก ํ์ธํ ์ ์์ต๋๋ค.
๊ตฌ๋
์ ์
๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋ ํ ํ getAvailablePurchases
๋ก ์ ํ ํด๋ณด์ธ์.
doc , The list of Purchase objects in onPurchasesUpdated() does not contain paused subscriptions.
์ฐธ์กฐํ์ญ์์ค.
๋๋ ๊ทธ๊ฒ์ด ๋์์ด๋๊ธฐ๋ฅผ ํฌ๋งํ๋ ๋งค์ฐ ํ๋ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ค๋ฅธ ์๋ จ๊ณผ ํ ๋ก ์ ์์ ๋กญ๊ฒ ๋ ๋์ญ์์ค.
๊ตฌ๋ ์ ์ ๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋ ํ ํ getAvailablePurchases ()๋ฅผ ์๋ํ์ง๋ง ์ํ๊น๊ฒ๋ ์๋ ๊ตฌ๋งค์ ๊ฑฐ๋ ์์์ฆ ๋ง ๋ฐํ ๋ ๋ฐฐ์ด์ ์์ต๋๋ค.
RNIap v2.3.19 ๋ฐ v2.5.5๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ฉฐ, ๊ตฌ๋ ์ ์ ๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋ ํ ๋ buySubscription ()์ด ์ ์์์ฆ์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ ๋์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ชจ๋ธ์ ๊ฐ์ง v3 ๋๋ v4๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ์ถ์ต๋๋ค.
๋ค์์ Android ๊ตฌ๋ ์ ๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋ ์๋ ๋ฐฉ์๊ณผ ์ ๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋ ํ ์ ์์์ฆ์ด ํ์ํ ์ด์ ๋ฅผ ์ค๋ช ํ๋ ์ฐธ์กฐ ๋ฌธ์ ์ ๋๋ค.
@ howg0924 ํ์ธํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. v2 ๋ฐ ํ์ฌ ๋ฒ์ ๊ณผ์ ์ฐจ์ด์ ์ ๋น๊ตํ๊ณ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง๋ณด๊ณ ์ถ์ต๋๋ค.
์ฃผ๋ง์ # 893์์ ์ฝ๋๋ฅผ ์ฐพ์์ต๋๋ค.
์ ์
๋ฐ์ดํธ๋ 4.4.0
๋ฉ๋๋ค.
[email protected]
๋ฒ์ ์ ์น์ ํ๊ฒ ํ
์คํธ ํด ์ฃผ์๊ฒ ์ต๋๊น?
@hyochan ๋ฐฉ๊ธ 4.4.0-rc.1์ ์๋ํ์ง๋ง ์ํฉ์ ์ฌ์ ํ โโ๋์ผํฉ๋๋ค.
RNIap.requestSubscription (oldSku, false, newSku 4)๋ฅผ ํธ์ถํ๊ณ ์ ๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋๋ฅผ ์๋ฃํ๋ฉด ๋ค์ ์ค๋ฅ์ ํจ๊ป ์ค๋ฅ ๋ฆฌ์ค๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
{๋ฉ์์ง : '๊ตฌ๋งค๊ฐ null์
๋๋ค.',
์ฝ๋ : 'OK',
debugMessage : '',
responseCode : 0}
๊ทธ๋ฆฌ๊ณ getAvailablePurchases ()๋ ์ค๋๋ ์์์ฆ ๋ง ํฌํจํฉ๋๋ค.
๋๋ฒ๊น
ํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋ค๋ฉด @ howg0924 android
, ๋๋ ๋น์ ์ด ์ด๋ค ํผํ
ํ
์คํธ๋ฅผ ํฌ๋ง Log.d
ํ๊ณ ํต๊ณผํ๋ฉด ๋ณผ if
์ ์กฐ๊ฑด buyItemByType
. ๊ทธ๊ฒ ๊ฐ๋ฅํ ๊น์? ๋๋ ๊ทธ๋ค์ด ์ด๋ป๊ฒ ์คํ๋๊ณ ์๋์ง๋ณด๊ณ ์ถ๋ค.
@ howg0924 ์ ์ ๊น ~! ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ณง ์ฐ๋ฝ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
@ howg0924 4.4.0-rc.2
์๋ํด ์ฃผ ์๊ฒ ์ด์ ? ์ด๋ฒ์๋ ํจ๊ณผ๊ฐ์์ ๊ฒ ๊ฐ์์.
@hyochan 4.4.0-rc.2 ๋น๋ ์คํจ :
RNIapModule.java:436: error: incompatible types: SkuDetails cannot be converted to String:
builder.setOldSku(selectedOldSku);
^
@hyochan 4.4.0-rc.1์ buyItemByType ()์ ๋ชจ๋ํฐ๋งํ์ต๋๋ค. ์ ๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋ ํ ๋ ๋ค์์ ์คํํ์ต๋๋ค.
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.DEFERRED);
๋ํ ์คํ๋ฉ๋๋ค.
BillingResult billingResult = billingClient.launchBillingFlow(activity, flowParams);
ํ๋ฆ / ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ํฐ๋ง / ๋คํ ํ์๊ฒ ์ต๋๊น?
(์ผ๋ถ ์คํด๋ก ์ญ์ )
@ howg0924 env
๋๋ฒ๊น
์ ์ํ์ง ๋ชปํด์ ์ค์๋ฅผ ํด์ ์ฃ์กํฉ๋๋ค. 4.4.0-rc.3
๋๋ ๋ ธ์ต๋๋ค. ์ฝ๋๊ฐ ๊ฐ์ฅ ์ค์ํ builder.setOldSku(oldSku)
๋ฅผ ์คํํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
2.5.5์ ๋น๊ต ํ ๊ฒฐ๊ณผ 2.5.5๊ฐ
builder.setReplaceSkusProrationMode (BillingFlowParams.ProrationMode.DEFERRED);
DEFERRED ๋ชจ๋๋ฅผ ์ฌ์ฉํ ๋.
๊ทธ๋์ 4.4.0-rc.1์์์ด ์ค์ ์ ๊ฑฐํ๋ ค๊ณ ํ๋๋ฐ, ์๋ํฉ๋๋ค! ํ์ง๋ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
1. ํ์ฌ ์์
์ค์ธ ๋น๋ก ๋ฐฐ๋ถ ๋ชจ๋.
2. setReplaceSkusProrationMode ()์ ์ํด DEFERRED ๋ชจ๋๋ก ์ค์ ํ๋ฉด ์๋ํ์ง ์๋ ์ด์
if (prorationMode != null && prorationMode != -1) {
if (prorationMode == BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE);
if (type.equals(BillingClient.SkuType.SUBS) == false) {
String debugMessage = "IMMEDIATE_AND_CHARGE_PRORATED_PRICE for proration mode only works in subscription purchase.";
WritableMap error = Arguments.createMap();
error.putString("debugMessage", debugMessage);
error.putString("code", PROMISE_BUY_ITEM);
error.putString("message", debugMessage);
sendEvent(reactContext, "purchase-error", error);
promise.reject(PROMISE_BUY_ITEM, debugMessage);
return;
}
} else if (prorationMode == BillingFlowParams.ProrationMode.IMMEDIATE_WITHOUT_PRORATION) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_WITHOUT_PRORATION);
} else if (prorationMode == BillingFlowParams.ProrationMode.DEFERRED) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.DEFERRED);
} else if (prorationMode == BillingFlowParams.ProrationMode.IMMEDIATE_WITH_TIME_PRORATION) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_WITH_TIME_PRORATION);
} else {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY);
}
}
ํ์ฌ ์์ ๊ฐ์ด ProrationMode
ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด DEFERRED
์ ๊ฑฐํ์ ๋ auto renew subscription
ํ ์ ์๋ค๋ ๋ป์
๋๊น?
์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ๋ฉด
if (prorationMode != null && prorationMode != -1) {
if (prorationMode == BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE);
if (type.equals(BillingClient.SkuType.SUBS) == false) {
String debugMessage = "IMMEDIATE_AND_CHARGE_PRORATED_PRICE for proration mode only works in subscription purchase.";
WritableMap error = Arguments.createMap();
error.putString("debugMessage", debugMessage);
error.putString("code", PROMISE_BUY_ITEM);
error.putString("message", debugMessage);
sendEvent(reactContext, "purchase-error", error);
promise.reject(PROMISE_BUY_ITEM, debugMessage);
return;
}
} else if (prorationMode == BillingFlowParams.ProrationMode.IMMEDIATE_WITHOUT_PRORATION) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_WITHOUT_PRORATION);
} else if (prorationMode == BillingFlowParams.ProrationMode.DEFERRED) {
// comment following line
// builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.DEFERRED);
} else if (prorationMode == BillingFlowParams.ProrationMode.IMMEDIATE_WITH_TIME_PRORATION) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_WITH_TIME_PRORATION);
} else {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY);
}
}
๊ทธ๋ฐ ๋ค์ RNIap.requestSubscription (newSku, false, sku, 4 / * DEFERRED ๋ชจ๋ * /)๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ ์ ์ ๊ทธ๋ ์ด๋ / ๋ค์ด ๊ทธ๋ ์ด๋ ํ ์ ์์ต๋๋ค. v2.5.5์ฒ๋ผ builder.setReplaceSkusProrationMode ()๊ฐ ์คํ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์๋ํ๋ ๋น๋ก ๋ฐฐ๋ถ ๋ชจ๋๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ค์ ์ฝ๋๋ v2.5.5์์ ๊ฐ์ ธ์จ ๊ฒ์ ๋๋ค.
if (type.equals(BillingClient.SkuType.SUBS) && oldSku != null && !oldSku.isEmpty()) {
// Subscription upgrade/downgrade
if (prorationMode != null && prorationMode != 0) {
builder.setOldSku(oldSku);
if (prorationMode == BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE);
} else if (prorationMode == BillingFlowParams.ProrationMode.IMMEDIATE_WITHOUT_PRORATION) {
builder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_WITHOUT_PRORATION);
} else {
builder.addOldSku(oldSku);
}
} else {
builder.addOldSku(oldSku);
}
}
@ howg0924 ํ์ฌ ๋ง์คํฐ ๋ธ๋์น ์ธ 4.3.4
์์ DEFFERED
์กฐ์ฐจ ์ค์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋งค์ฐ ์ด์ํฉ๋๋ค. ์ด ์ฝ๋๋ฅผ 4.4.0+
.
์ด์ ๊ฐ ๋ค๋ฅผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค๋ฅธ ์์์ด ์์ผ๋ฉด ๋ค์ ์ค์๊ธฐ ๋ฐ๋๋๋ค.
๊ด๋ จ # 391 # 555
์ข์์, ๋ ์๋ํ๊ณ ๋ค์๋ณด๊ณ ํ๊ฒ ์ต๋๋ค.
๊ด๋ จ # 707
@hyochan 4.4.0-rc.1์์ ์ถ๊ฐ ํ ์คํธ ํ :
IMMEDIATE_WITH_TIME_PRORATION => ์๋
IMMEDIATE_AND_CHARGE_PRORATED_PRICE => ์๋
IMMEDIATE_WITHOUT_PRORATION => ์๋
์ง์ฐ๋จ => ์๋ํ์ง ์์ (์ด์ ๋ฅผ ๋ชจ๋ฆ)
ํ์ฌ ๋ง์คํฐ ๋ธ๋์น ์ธ 4.3.4์์ DEFFERED๋ฅผ ์ค์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋งค์ฐ ์ด์ํฉ๋๋ค. ์ด ์ฝ๋๋ฅผ 4.4.0 ์ด์์ ์ถ๊ฐํ์ต๋๋ค.
4.3.0 ์
if (prorationMode != 0 && prorationMode != -1) {
builder.setReplaceSkusProrationMode(prorationMode);
}
๊ทธ๋ฌ๋ ์์ ์ฝ๋๋ 2.3.19 ๋ฐ 2.5.5์๋ ์กด์ฌํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ 2.3.19 ๋ฐ 2.5.5์์ RNIap.requestSubscription (newSku, false, sku, 4 / * DEFERRED * /)์ ํธ์ถํ์ ๋ ์ด์ ์๋ ์๋ํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ด์ ์ค์ ๋ก ๊ธฐ๋ณธ IMMEDIATE_WITH_TIME_PRORATION ๋ชจ๋์์ ์๋ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
๊ทธ๋์ Deffered ๊ฐ ์๋ํ์ง ์๋ ์ด์ ๋ฅผ ์์์ผํฉ๋๋ค. ์ง๊ธ์ ์ด์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ง๋ง ํ๋์ด ๋ค๋ฆ ๋๋ค.
requestSubscription(newSku, false, oldSku, 4)
ํธ์ถํ๋ฉด ์ค๋ฅ ์ฝ๋ OK
๋ฐ ๋น ์ค๋ฅ ๋ฉ์์ง์ ํจ๊ป ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. Google Play ์ธก์์ ๊ฒฐ์ ๊ฐ ์์๋๋ก ์งํ๋ฉ๋๋ค (์ง์ฐ๋จ). ๋ค์ ๊ตฌ๋
์๊ธ์ด ๋ฐ์ํ๋ฉด ์ฑ ์์์ purchaseUpdatedListener
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง๋ง ๊ตฌ๋งค๋ฅผ ํ์ธํ ์ ์์ต๋๋ค ( finishTransaction()
๋ฅผ ํธ์ถํ์ฌ). finishTransaction()
๋ DEVELOPER_ERROR
์ค๋ฅ๋ฅผ ์ ๊ณตํฉ๋๋ค.
4.4.0
๋ฐ 4.3.4
๋ฒ์ ๋ชจ๋์์ ๋ฐ์ํฉ๋๋ค.
์๋
ํ์ธ์ @hyochan , https://github.com/dooboolab/react-native-iap/pull/893 ์์์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋ ๊ฒ์ผ๋ก ํ์ํ์ง๋ง react-native-iap์ ์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธํ์ง๋ง ์์ง ๊ทธ๋ ์ง ์์ต๋๋ค. ๊ฒฐ์ ๋. ์ฌ์ ํ error {"code": "OK", "debugMessage": "", "message": "purchases are null.", "responseCode": 0}
๋ฆฌ์ค๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ You updated your subscription purchase
์ด๋ฉ์ผ์ ์ ์์ ์ผ๋ก ๋ฐ์์ต๋๋ค. ๊ทธ๋์ ๋ด ์ง๋ฌธ์ DEFERRED ๋ชจ๋์ ๋ํ ์ฌ๋ฐ๋ฅธ ํด๊ฒฐ์ฑ
์ ๋ฌด์์
๋๊น?
์ง๋๋ฒ์๋์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด์ํ๊ฒ๋ deferred
๋ชจ๋์์๋ง ์๋ํ์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํด์ผํฉ๋๋ค.
์๋ ํ์ธ์ @ howg0924 ๋ , ์์ง์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ป์์ต๋๊น?
@ nenjamin2405 ์๋์, ์ฌ์ ํ ๊ธฐ๋ณธ IMMEDIATE_WITH_TIME_PRORATION ๋ชจ๋๋ฅผ ์ฌ์ฉํ๊ณ
์๋ ํ์ธ์ @hyochan , ์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ๋ด ์ฑ์ ์๋ก์ด ๊ธฐ๋ฅ์ด์ด ๋ฌธ์ ๋ก ์ธํด ๋ฉ์ท์ต๋๋ค. ์กฐ์ฌํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์์ง. ์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฃฐ ์๊ฐ์ด ์์์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
Google
๋๋ StackOverflow
๋ฅผ ์์ฒญํ๊ณ ์ด ์ค๋ ๋์์ ๊ณต์ ํ๋ฉด ์ ๋ง ๋์์ด ๋ ๊ฒ์
๋๋ค.
์๋ ํ์ธ์. ์ต๊ทผ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์์ฃผ์๊ฐ ํ์ํฉ๋๊น? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ "ํ ๋ก ์ฉ"๋๋ "์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ "๋ก ํ์ ํ ์๋ ์์ผ๋ฉฐ ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฐ๋ฆฌ๋์ด ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ณ ์ปค๋ฎค๋ํฐ์ ๊ณต์ ํ๊ณ ์ถ์์ต๋๋ค. ์ผ๋ถ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ Android๊ฐ ์๋ํ๋ ๋ฐฉ์ ์ธ ์ง์ฐ๋ ๊ตฌ๋ ๊ต์ฒด์์ ๋น ๊ตฌ๋งค ๋ชฉ๋ก๊ณผ ํจ๊ป ๊ตฌ๋งค ์ ๋ฐ์ดํธ ๋ ๋ฆฌ์ค๋๊ฐ ํธ์ถ ๋์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค (์ฌ๊ธฐ ์์ "์ง์ฐ๋ ๊ต์ฒด ๋ชจ๋์ ๊ฒฝ์ฐ ..."์ฐธ์กฐ).
๊ตฌ๋
๊ต์ฒด์ purchases are null
์ค๋ฅ์ ํจ๊ป ์ค๋ฅ ๋ฆฌ์ค๋๊ฐ ํธ์ถ ๋ ๋๋ฅผ ์ฐพ๋ ์์ ์ ์ํํ์ฌ react-native-iaphub ์์ Android ์ง์ฐ ๊ตฌ๋
๊ต์ฒด ์ง์์ ์ถ๊ฐํ์ต๋๋ค. ( ์ปค๋ฐ ์ฐธ์กฐ )
๋ฌผ๋ก ์์์ฆ์ ํ์ธํ๋ ์๋ฒ ์ธก์์๋ ์ฝ๊ฐ์ ์์ ์ํด์ผํฉ๋๋ค. ์ง์ฐ๋ ๊ตฌ๋
์ ์ฒ๋ฆฌ ํ ๋ ์์์ฆ์ ์๋ก ๊ณ ์น๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค.
๊ตฌ๋
๊ต์ฒด๊ฐ ๋ฐ์ํ๋์๊ธฐ๋ฅผ ๊ฐ์งํ๊ณ ์ ํ ํฐ์ ์ฒ๋ฆฌํ๋ ค๋ฉด Android ์ค์๊ฐ ์๋ฆผ์ ๊ตฌํํด์ผํฉ๋๋ค.
์๋๋ฉด ๋น์ ์ ์ํด ๋ชจ๋ ๊ฒ์ํ๋ IAPHUB ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค ๐
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ณํ์ด ์์ต๋๊น?
@iaphub์์ ์ธ๊ธํ๋ฏ์ด ๋ฌธ์ ๋ DEFERRED ๋ชจ๋๋ฅผ ์ฌ์ฉํ ๋ purchases
์ธ์๋ฅผ null
๋ก ์ฌ์ฉํ์ฌ onPurchasesUpdated
๊ฐ ํธ์ถ๋๋ค๋ ๊ฒ์
๋๋ค.
์ง์ฐ๋ ๊ต์ฒด ๋ชจ๋์ ๊ฒฝ์ฐ ์ฑ์ ๋น ๊ตฌ๋งค ๋ชฉ๋ก๊ณผ ์ ๊ทธ๋ ์ด๋ ๋๋ ๋ค์ด ๊ทธ๋ ์ด๋ ์ฑ๊ณต ์ฌ๋ถ์ ๋ํ ์ํ๊ฐ ํฌํจ ๋ PurchasesUpdatedListener์ ๋ํ ํธ์ถ์ ์์ ํฉ๋๋ค.
๊ทธ๋์ ๊ทธ๊ฒ์ ๊ทธ ์ฒญ์ทจ์ ์์์ ๊ทธ ์ฌ๊ฑด์ ์ฒ๋ฆฌํ๋ ๋ฌธ์ ์ผ๋ฟ์ ๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ ์ํฉ์ ์ฒ๋ฆฌํ๋ ์ ์ ํ ๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
undefined
์ฝ์ ํด๊ฒฐPURCHASE_DEFERRED
์ฝ๋๋ก ํ๋ผ ๋ฏธ์ค ๊ฑฐ๋ถ์ด๋ป๊ฒ ์๊ฐํด?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ณํ์ด ์์ต๋๊น?