Реагировать родную покупку МАП остается в статусе «ожидающего платежа» в течение 3 днейAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Реагировать родную покупку МАП остается в статусе «ожидающего платежа» в течение 3 дней

Сообщение Anonymous »

Я использую React-Cniate-IAP (v12.16.2) в моем приложении Expo React Native (Android). < /p>
Когда пользователь покупает подписку, некоторые покупки остаются застрявшими в состоянии «ожидающего платежа» в течение нескольких дней. В течение этого времени пользователь технически имеет доступ к премиальному контенту - обнаружена подписка - но они получают электронное письмо, в котором говорится, что подписка будет отменена через 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('❌ Erreur lors de la souscription :', err);
} 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 && // ✅ PURCHASED state
!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') {
// ✅ iOS — pas besoin de acknowledge, juste finishTransaction
setIsSubscribed(true);
router.replace('/');
await RNIap.finishTransaction(purchase, true);
}

} catch (err) {
console.warn('❌ Erreur dans purchaseUpdatedListener :', err);
}
});

const purchaseErrorSubscription = RNIap.purchaseErrorListener((error) => {
console.warn('❌ Erreur lors de l’achat :', error);
});

return () => {
purchaseUpdateSubscription.remove();
purchaseErrorSubscription.remove();
};
}, []);


Подробнее здесь: https://stackoverflow.com/questions/796 ... for-3-days
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»