Когда пользователь покупает подписку, некоторые покупки остаются застрявшими в состоянии «ожидающего платежа» в течение нескольких дней. В течение этого времени пользователь технически имеет доступ к премиальному контенту - обнаружена подписка - но они получают электронное письмо, в котором говорится, что подписка будет отменена через 3 дня, если они не откроют приложение для проверки его. Тем не менее, открытие приложения не решает проблему. < /P>
Как я могу правильно обработать этот конкретный случай?const loadProducts = async () => {
try {
// If activ subscriptions
await RNIap.initConnection();
const purchases = await RNIap.getAvailablePurchases();
const activeSubscriptions = purchases
.filter(
(purchase) => productIds.includes(purchase.productId) && purchase.transactionReceipt
)
.map((purchase) => purchase.productId); // Récupérer uniquement les IDs des abonnements actifs
setActivSubscriptions(activeSubscriptions);
// List Offers
const products = await RNIap.getSubscriptions({skus: productIds});
if (products.length === 0) {
return;
}
const monthly_priceIAP = products[0]?.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList?.[0].formattedPrice;
const annual_priceIAP = products[1]?.subscriptionOfferDetails[0].pricingPhases.pricingPhaseList?.[0].formattedPrice;
setMonthly_price(monthly_priceIAP);
setAnnual_price(annual_priceIAP);
} catch (err) {
// console.warn('Erreur lors de l\'achat ou de la récupération de l\'abonnement:', err);
} finally {
await RNIap.endConnection();
}
};
< /code>
Получить подписку: < /p>
const subscribe = async (number) => {
try {
await RNIap.initConnection();
const products = await RNIap.getSubscriptions({ skus: productIds });
if (products.length === 0) {
// console.warn('Aucun produit trouvé');
return;
}
const offerToken = products[number].subscriptionOfferDetails[0].offerToken;
const productId = products[number].productId;
await RNIap.requestSubscription({
subscriptionOffers: [{
offerToken,
sku: productId,
}],
});
} catch (err) {
console.warn('
} finally {
await RNIap.endConnection();
}
};
< /code>
после функции подписки: < /p>
useEffect(() => {
const purchaseUpdateSubscription = RNIap.purchaseUpdatedListener(async (purchase) => {
try {
const receipt = purchase.transactionReceipt;
if (
receipt &&
Platform.OS === 'android' &&
purchase.purchaseStateAndroid === 1 && //
!purchase.isAcknowledgedAndroid
) {
// 1. Marquer l'utilisateur comme abonné
setIsSubscribed(true);
setActivSubscriptions((prev) => [...prev, purchase.productId]);
// 2. Acknowledge l'achat
await RNIap.acknowledgePurchaseAndroid(purchase.purchaseToken);
// 3. Finaliser
await RNIap.finishTransaction(purchase, true);
// 4. Navigation
router.replace('/');
} else if (receipt && Platform.OS === 'ios') {
//
setIsSubscribed(true);
router.replace('/');
await RNIap.finishTransaction(purchase, true);
}
} catch (err) {
console.warn('
}
});
const purchaseErrorSubscription = RNIap.purchaseErrorListener((error) => {
console.warn('
});
return () => {
purchaseUpdateSubscription.remove();
purchaseErrorSubscription.remove();
};
}, []);
Подробнее здесь: https://stackoverflow.com/questions/796 ... for-3-days
Мобильная версия