4.3.0
0.60.5
์์ ๋ชจ๋
์์ ์ ๋ฐ๋ผ ๊ตฌ๋
์ ๊ตฌ๋งค ํ ํ ์ฌ์ฉ์ ์ง์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ถ์ต๋๋ค. ๊ตฌ๋งค๋ฅผ ํ์ธํ ํ ์ฒญ์ทจ์๋ฅผ ์ ๊ฑฐํด์ผํ๋ค๋ ๊ฒ์ ์ดํดํ๊ณ ์์ต๋๊น? remove
๋ช
์ ์ ์ผ๋ก ํธ์ถํ์ง๋ง ์ฑ๊ณตํ์ง ๋ชปํ์ต๋๋ค.
์
const purchaseListener = purchaseUpdatedListener(purchase => {
const receipt = purchase.transactionReceipt;
if (receipt) {
callCustomEndpoint().then(result => {
if(result){
// Subscription is valid
finishTransaction(purchase);
}
})
};
finishTransaction(purchase);
});
callCustomEndpoint () ๋ฉ์๋๊ฐ ์ฌ๋ฌ ๋ฒ ํธ์ถ๋๊ณ ์์ต๋๋ค. ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์ง ์๋๋กํ๋ ค๋ฉด ์ด๋ป๊ฒํด์ผํฉ๋๊น? ์ด ๋์ ์ ํ ๋ฒ๋ง ๋๋ฅด๋ฉด๋ฉ๋๋ค.
์ค์ํ ๊ฒฝ์ฐ ํด๋์ค ๊ตฌ์ฑ ์์ ๋์ ๊ธฐ๋ฅ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ค์ ์ฅ์น
๊ตฌ์ฑ ์์๊ฐ ๋ค์ ๋ ๋๋ง ๋ ๋ purchaseListener๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฑ๋กํ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ์ดํ ๋งค ๋ ๋์์ ํธ์ถ๋์ง ์๋๋ก ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ์ด๋ฅผ ๋ค์ ์์ฑํ์ต๋๋ค. ๋ด ์ค์๋ ํด๋์ค ๊ตฌ์ฑ ์์์ ๋ฌธ์์์ ์ ๊ณต๋ ์์ ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ ๊ตฌ์ฑ ์์๋ก ํฌํ ํ๋ ค๋ ๊ฒ์ ๋๋ค. ๋์๊ด์์ ์ํ์ จ์ต๋๋ค!
@cgathergood ๋๋์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฐ์ ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฝ๋๋ฅผ ๊ฒ์ ํ ์ ์์ต๋๊น?
@cgathergood ์ฝ๋ ์ํ๋๋ณด๊ณ ์ถ์ต๋๋ค. ๋๋ ๊ฐ๊ณ ๋ฆฌ๋ก ์ฝ๊ฐ ๊ณ ๊ตฐ๋ถํฌํ๊ณ ์์ต๋๋ค.
@ wootwoot1234 @osmantuna ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฝ๋๋ฅผ ์ ๊ณตํด ์ฃผ์๊ฒ ์ต๋๊น?
๋์ค์ ํ์ํ ์ฌ๋๋ค์ ์ํด ๋ด ์๋ฃจ์ ์ ๋ด๋ ค ๋์ ๊ฒ์ ๋๋ค.
์ํ ๊ตฌ์ฑ ์์ ์ธ๋ถ (๋ด๋ถ์์๋ ์๋ ํ ์ ์์) :
var purchaseUpdateSubscription;
var purchaseErrorSubscription;
const loadIAPListeners = () => {
initConnection(); // important, or else it won't trigger before a random state change
purchaseUpdateSubscription = purchaseUpdatedListener(
async (
purchase: InAppPurchase | SubscriptionPurchase | ProductPurchase,
) => {
console.log('purchaseUpdatedListener', purchase);
let receipt = purchase.transactionReceipt;
if (receipt) {
apis.checkreceipt({data: purchase, platform: Platform.OS}); // I personally don't care about callback
if (Platform.OS === 'ios') {
await RNIap.finishTransactionIOS(purchase.transactionId);
} else if (Platform.OS === 'android') {
await RNIap.acknowledgePurchaseAndroid(purchase.purchaseToken);
}
await RNIap.finishTransaction(purchase, true);
await RNIap.finishTransaction(purchase, false);
} else {
// Retry / conclude the purchase is fraudulent, etc...
}
},
);
purchaseErrorSubscription = purchaseErrorListener((error: PurchaseError) => {
console.log('purchaseErrorListener', error);
});
};
์ํ ๊ตฌ์ฑ ์์ ๋ด๋ถ :
useEffect(() => {
loadIAPListeners();
return () => {
purchaseUpdateSubscription.remove();
purchaseErrorSubscription.remove();
};
}, []);
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋์ค์ ํ์ํ ์ฌ๋๋ค์ ์ํด ๋ด ์๋ฃจ์ ์ ๋ด๋ ค ๋์ ๊ฒ์ ๋๋ค.
์ํ ๊ตฌ์ฑ ์์ ์ธ๋ถ (๋ด๋ถ์์๋ ์๋ ํ ์ ์์) :
์ํ ๊ตฌ์ฑ ์์ ๋ด๋ถ :