mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-30 19:36:25 +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 {
|
||||
static Future<void> confirmProPurchaseBoot() async {
|
||||
clearTransactionsIos();
|
||||
confirmPendingPurchases();
|
||||
|
||||
if (Features.alwaysPro) {
|
||||
return;
|
||||
@ -103,7 +104,10 @@ class InAppPurchases {
|
||||
}
|
||||
|
||||
static Future<void> clearTransactionsIos() async {
|
||||
if (Platform.isIOS) {
|
||||
if (!Platform.isIOS) {
|
||||
return;
|
||||
}
|
||||
|
||||
final transactions = await SKPaymentQueueWrapper().transactions();
|
||||
for (final transaction in transactions) {
|
||||
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