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 () рд╡рд┐рдзрд┐ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рдореИрдВ рдХреИрд╕реЗ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реВрдБ? рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЗрд╕ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рддреЛ рдореИрдВ рдХреНрд▓рд╛рд╕ рдХреЗ рдШрдЯрдХ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЕрд╕рд▓реА рдбрд┐рд╡рд╛рдЗрд╕
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдШрдЯрдХ рд░реЗрдВрдбрд░рд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрдИ рдмрд╛рд░ рдЦрд░реАрджрд╛рд░реАрд╕реВрдЪреА рдкрдВрдЬреАрдХреГрдд рдХреА рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рддрдм рд╕реЗ рдЗрд╕реЗ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдкрд░ рди рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПред рдореЗрд░реА рдЧрд▓рддреА рдПрдХ рд╡рд░реНрдЧ рдШрдЯрдХ рдХреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рдереА рдФрд░ рдЗрд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣реА рдереАред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдорд╣рд╛рди рдХрд╛рдо!
@ 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();
};
}, []);
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдиреАрдЪреЗ рд░рдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╢рд╛рдпрдж рдЕрдВрджрд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ):
рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░: