feat: 全局监听iap,在home初始化。避免过早处理,升级dart和flutter,支持storekit插件,强制指定storekit2版本
This commit is contained in:
@@ -1,15 +1,21 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../controllers/kr_home_controller.dart';
|
||||
// 导入你的 IAP Service 路径
|
||||
import 'package:kaer_with_panels/app/services/iap/iap_service.dart';
|
||||
|
||||
class KRHomeBinding extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
// 1. 注入 Home 控制器 (只保留一个)
|
||||
Get.lazyPut<KRHomeController>(
|
||||
() => KRHomeController(),
|
||||
() => KRHomeController(),
|
||||
);
|
||||
Get.lazyPut<KRHomeController>(
|
||||
() => KRHomeController(),
|
||||
|
||||
// 2. ✅ 在 Home 绑定中注入 IAP Service
|
||||
// 使用 fenix: true 是关键,它允许 Service 在页面销毁重建时自动恢复
|
||||
Get.lazyPut<KRIAPService>(
|
||||
() => KRIAPService(),
|
||||
fenix: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1879,6 +1879,12 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
print('ok');
|
||||
});
|
||||
});
|
||||
|
||||
Future.delayed(const Duration(milliseconds: 500), () async {
|
||||
if (Get.isRegistered<KRIAPService>()) {
|
||||
KRIAPService.instance.setup();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
+20
-7
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user