mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 02:07:39 +08:00
Android: Confirm pending purchases
There seems to be a race condition which results in some purchases not being confirmed.
This commit is contained in:
28
lib/iap.dart
28
lib/iap.dart
@ -15,6 +15,7 @@ import 'package:gitjournal/utils/logger.dart';
|
|||||||
class InAppPurchases {
|
class InAppPurchases {
|
||||||
static Future<void> confirmProPurchaseBoot() async {
|
static Future<void> confirmProPurchaseBoot() async {
|
||||||
clearTransactionsIos();
|
clearTransactionsIos();
|
||||||
|
confirmPendingPurchases();
|
||||||
|
|
||||||
if (Features.alwaysPro) {
|
if (Features.alwaysPro) {
|
||||||
return;
|
return;
|
||||||
@ -103,7 +104,10 @@ class InAppPurchases {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Future<void> clearTransactionsIos() async {
|
static Future<void> clearTransactionsIos() async {
|
||||||
if (Platform.isIOS) {
|
if (!Platform.isIOS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final transactions = await SKPaymentQueueWrapper().transactions();
|
final transactions = await SKPaymentQueueWrapper().transactions();
|
||||||
for (final transaction in transactions) {
|
for (final transaction in transactions) {
|
||||||
try {
|
try {
|
||||||
@ -125,6 +129,28 @@ class InAppPurchases {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void confirmPendingPurchases() async {
|
||||||
|
// On iOS this results in a "Sign in with Apple ID" dialog
|
||||||
|
if (!Platform.isAndroid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
InAppPurchaseConnection.enablePendingPurchases();
|
||||||
|
final iapCon = InAppPurchaseConnection.instance;
|
||||||
|
|
||||||
|
var pastPurchases = await iapCon.queryPastPurchases();
|
||||||
|
for (var pd in pastPurchases.pastPurchases) {
|
||||||
|
if (pd.pendingCompletePurchase) {
|
||||||
|
Log.i("Pending Complete Purchase - ${pd.productID}");
|
||||||
|
|
||||||
|
try {
|
||||||
|
await iapCon.completePurchase(pd);
|
||||||
|
} catch (e, stackTrace) {
|
||||||
|
logException(e, stackTrace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user