feat: 全局监听iap,在home初始化。避免过早处理,升级dart和flutter,支持storekit插件,强制指定storekit2版本

This commit is contained in:
2025-12-17 20:34:59 -08:00
parent 05d2c71cd0
commit 801a77f942
6 changed files with 113 additions and 37 deletions
@@ -450,10 +450,11 @@ class KRPurchaseMembershipController extends GetxController {
// ✅ 1. iOS 核心拦截:检测本地是否有“挂起”的订单号
if (Platform.isIOS) {
final existingOrderNo = await IAPPendingOrderService.getPendingOrderNo();
final getPendingJwsData = await IAPPendingOrderService.getPendingJwsData();
final getPendingOrderNo = await IAPPendingOrderService.getPendingOrderNo();
if (existingOrderNo != null && existingOrderNo.isNotEmpty) {
print('🛑 [IAP] 拦截成功:发现未结单 $existingOrderNo');
if (getPendingJwsData != null && getPendingJwsData.isNotEmpty!) {
print('🛑 [IAP] 拦截成功:发现未结单 $getPendingJwsData');
await HIDialog.show(
title: '检测到待激活订单',
@@ -461,10 +462,22 @@ class KRPurchaseMembershipController extends GetxController {
confirmText: '立即激活',
cancelText: '取消',
barrierDismissible: false,
onConfirm: () {
onConfirm: () async{
// 🚀 调用全局 Service 的重试逻辑
// 这会触发苹果重新推送 PurchaseStream,进而走验证流程
KRIAPService.instance.retryUnfinishedTransactions();
try{
await _kr_subscribeApi.kr_attachAppleIapTransaction(getPendingJwsData, getPendingOrderNo!);
Get.offNamed(
Routes.KR_ORDER_STATUS,
arguments: {
'order': getPendingOrderNo,
'payment_type': 'apple_iap',
'checkout_type': 'ipa',
},
);
}catch (e){
KRCommonUtil.kr_showToast('激活失败,请重试');
}
},
);
return; // 🛑 关键:必须 return,阻止创建重复的新订单
@@ -962,7 +975,7 @@ class KRPurchaseMembershipController extends GetxController {
final KRIpaPayment iapParams = (checkoutResponse.ipa == null ||
(checkoutResponse.ipa?.productId.isEmpty ?? true))
? KRIpaPayment(
productId: 'com.hifastvpn.plan.day${kr_getSelectedQuantity()}')
productId: 'com.hifastvpn.vip.day${kr_getSelectedQuantity()}')
: checkoutResponse.ipa!;
final iap = InAppPurchase.instance;