Я использую пакет flutter in_app_purchase для своевременной покупки моего приложения (iOS). Работает нормально, покупки проходят гладко. Когда вызывается PurchaseDetails.purchased, я завершаю покупку и сохраняю ее в общих настройках. Возвратов очень мало, поэтому я их игнорирую.
Теперь я перехожу на модель подписки с еженедельной, ежемесячной и годовой подпиской. Если я использую общие настройки, чтобы узнать, подписался ли пользователь на мою профессиональную версию, пользователи, которые получают возмещение или отменяют подписку, продолжают использовать мою профессиональную версию. У меня нет возможности проверить, вернул ли пользователь деньги или отменил подписку.
Пожалуйста, подскажите мне, как справиться с этой ситуацией и реализовать мой код таким образом, чтобы пользователи, которые отменяют подписка или возврат средств будут возвращены к непремиальной версии моего приложения
это мой код
@override
void initState() {
loading();
final Stream purchaseUpdated = InAppPurchase.instance.purchaseStream;
_subscription = purchaseUpdated.listen((purchaseDetailsList) async {
_listenToPurchaseUpdated(purchaseDetailsList);
}, onDone: () {
log('On Done Called');
}, onError: (error) {
log('On Error Called');
});
super.initState();
}
void _listenToPurchaseUpdated(
List purchaseDetailsList) async {
log('in App Purchase Listener Called');
for (var purchaseDetails in purchaseDetailsList) {
if (purchaseDetails.status == PurchaseStatus.pending) {
// _showPendingUI();
} else {
if (purchaseDetails.status == PurchaseStatus.error) {
log('Some Error While Purchasing ${purchaseDetails.error!}');
//Handle Error Here
// _handleError(purchaseDetails.error!);
} else if (purchaseDetails.status == PurchaseStatus.canceled) {
log('Purchase Cancelled');
//Handle cancelled purchase
} else if (purchaseDetails.status == PurchaseStatus.purchased ||
purchaseDetails.status == PurchaseStatus.restored) {
bool valid = await _verifyPurchase(purchaseDetails);
if (valid) {
//Deliver Product Here
log('Product Purchased Or Restored');
InAppPurchase.instance.completePurchase(purchaseDetails);
//handle purchased product (basically storing reference in shared preference that user has purchased)
} else {
// _handleInvalidPurchase(purchaseDetails);
}
}
if (purchaseDetails.pendingCompletePurchase) {
await InAppPurchase.instance.completePurchase(purchaseDetails);
}
}
}
}
Источник: https://stackoverflow.com/questions/781 ... -cancelled
Как справиться с возвратом средств за покупку Flutter в приложении или отменой подписки ⇐ IOS
Программируем под IOS
1710412615
Гость
Я использую пакет flutter in_app_purchase для своевременной покупки моего приложения (iOS). Работает нормально, покупки проходят гладко. Когда вызывается PurchaseDetails.purchased, я завершаю покупку и сохраняю ее в общих настройках. Возвратов очень мало, поэтому я их игнорирую.
Теперь я перехожу на модель подписки с еженедельной, ежемесячной и годовой подпиской. Если я использую общие настройки, чтобы узнать, подписался ли пользователь на мою профессиональную версию, пользователи, которые получают возмещение или отменяют подписку, продолжают использовать мою профессиональную версию. У меня нет возможности проверить, вернул ли пользователь деньги или отменил подписку.
Пожалуйста, подскажите мне, как справиться с этой ситуацией и реализовать мой код таким образом, чтобы пользователи, которые отменяют подписка или возврат средств будут возвращены к непремиальной версии моего приложения
это мой код
@override
void initState() {
loading();
final Stream purchaseUpdated = InAppPurchase.instance.purchaseStream;
_subscription = purchaseUpdated.listen((purchaseDetailsList) async {
_listenToPurchaseUpdated(purchaseDetailsList);
}, onDone: () {
log('On Done Called');
}, onError: (error) {
log('On Error Called');
});
super.initState();
}
void _listenToPurchaseUpdated(
List purchaseDetailsList) async {
log('in App Purchase Listener Called');
for (var purchaseDetails in purchaseDetailsList) {
if (purchaseDetails.status == PurchaseStatus.pending) {
// _showPendingUI();
} else {
if (purchaseDetails.status == PurchaseStatus.error) {
log('Some Error While Purchasing ${purchaseDetails.error!}');
//Handle Error Here
// _handleError(purchaseDetails.error!);
} else if (purchaseDetails.status == PurchaseStatus.canceled) {
log('Purchase Cancelled');
//Handle cancelled purchase
} else if (purchaseDetails.status == PurchaseStatus.purchased ||
purchaseDetails.status == PurchaseStatus.restored) {
bool valid = await _verifyPurchase(purchaseDetails);
if (valid) {
//Deliver Product Here
log('Product Purchased Or Restored');
InAppPurchase.instance.completePurchase(purchaseDetails);
//handle purchased product (basically storing reference in shared preference that user has purchased)
} else {
// _handleInvalidPurchase(purchaseDetails);
}
}
if (purchaseDetails.pendingCompletePurchase) {
await InAppPurchase.instance.completePurchase(purchaseDetails);
}
}
}
}
Источник: [url]https://stackoverflow.com/questions/78159843/how-to-handle-flutter-in-app-purchase-refund-or-subscription-cancelled[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия