4.3.0
0.60.5
Kedua
Mengikuti contoh saya ingin memanggil metode kustom setelah langganan saya dibeli. Apakah pemahaman saya bahwa setelah mengakui pembelian, pendengar harus disingkirkan? Saya telah mencoba menelepon remove
secara eksplisit tetapi tidak berhasil.
Contoh
const purchaseListener = purchaseUpdatedListener(purchase => {
const receipt = purchase.transactionReceipt;
if (receipt) {
callCustomEndpoint().then(result => {
if(result){
// Subscription is valid
finishTransaction(purchase);
}
})
};
finishTransaction(purchase);
});
Metode callCustomEndpoint () dipanggil beberapa kali. Bagaimana saya bisa menghentikan ini terjadi? Karena saya hanya perlu mencapai titik akhir ini sekali.
Saya menggunakan komponen fungsional daripada komponen kelas jika itu penting.
Perangkat Nyata
Saya curiga Anda telah mendaftarkan purchaseListener beberapa kali saat komponen dirender.
Terima kasih, saya telah menulis ulang ini menggunakan kait sehingga tidak dipanggil pada setiap render. Kesalahan saya mencoba untuk mengambil contoh yang disediakan di dokumen komponen kelas dan mem-portnya ke komponen fungsional. Kerja bagus di perpustakaan!
@cgathergood Saya mengalami masalah ini juga. Apakah Anda keberatan memposting kode event handler Anda menggunakan react hooks?
@cgathergood saya ingin melihat contoh kode juga. saya sedikit berjuang dengan kail.
@ wootwoot1234 @osmantuna Bisakah Anda memberikan kode penanganan kejadian jika Anda berhasil memperbaikinya?
Saya akan meletakkan solusi saya untuk pengait bagi mereka yang akan membutuhkannya nanti.
di luar komponen negara Anda (meskipun mungkin juga berfungsi di dalam):
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);
});
};
di dalam komponen negara Anda:
useEffect(() => {
loadIAPListeners();
return () => {
purchaseUpdateSubscription.remove();
purchaseErrorSubscription.remove();
};
}, []);
Komentar yang paling membantu
Saya akan meletakkan solusi saya untuk pengait bagi mereka yang akan membutuhkannya nanti.
di luar komponen negara Anda (meskipun mungkin juga berfungsi di dalam):
di dalam komponen negara Anda: