起因:
最近公司项目要接入内购
导入in_app_purchase: ^3.1.11
flutter clean
flutter pub get
iOS
工程也重新执行了pod install
都是顺利执行
问题:
但是运行起来之后,点击支付支付页面断点卡在了final bool isAvailable = await _inAppPurchase.isAvailable();
再往下就不执行了,看控制台输出了捕获到的错误:
2023-11-15 19:07:51.113633+0800 Runner[984:507577] flutter: ============MissingPluginException(No implementation found for method -[SKPaymentQueue startObservingTransactionQueue] on channel plugins.flutter.io/in_app_purchase)
#0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:308)
<asynchronous suspension>
2023-11-15 19:07:51.113752+0800 Runner[984:507577] flutter: ============MissingPluginException(No implementation found for method -[SKPaymentQueue canMakePayments:] on channel plugins.flutter.io/in_app_purchase)
#0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:308)
<asynchronous suspension>
#1 SKPaymentQueueWrapper.canMakePayments (package:in_app_purchase_storekit/src/store_kit_wrappers/sk_payment_queue_wrapper.dart:52)
<asynchronous suspension>
#2 _PaymentPageState.initStoreInfo (package:jbs_flutter/ui/payment/payment_page.dart:64)
<asynchronous suspension>
尽然是没有找到iOS
对应的实现方法
然后就开始找是哪里的问题
后来发现iOS
工程中的Pods/FlutterPluginRegistrant/GeneratedPluginRegistrant.m
中没有in_app_purchase
相对应的注册
由图可见in_app_purchase_storekit
已经下载了,但是就是不能使用。
开始想着手动填入,但是不识别,报错了。
网上看到很多解决方法比如:
- 交互的
channelName
写错了。这in_app_purchase_storekit
是Google
推出的,大概率不会有错,检查后也是没错的。 - 重启。试过没用。
- 重新执行
clean
、pub get
。对我都不起作用,而且最开始我就是这么执行的,如果可以早就没问题了。
经过:
在Android Studio
的目录中发现iOS
工程下的Runner
下有一个GeneratedPluginRegistrant
类,里边引入了in_app_purchase
,
发现在ios/Flutter//FlutterPluginRegistrant/Classes/GeneratedPluginRegistrant.m
下是没有引入in_app_purchase
,
而且ios/Flutter//FlutterPluginRegistrant/FlutterPluginRegistrant.podspec
中也没有in_app_purchase
的相关信息。
解决:
然后尝试将ios/Runner/GeneratedPluginRegistrant.m
中的所有内容复制粘贴到ios/Flutter//FlutterPluginRegistrant/Classes/GeneratedPluginRegistrant.m
内;
在ios/Flutter//FlutterPluginRegistrant/FlutterPluginRegistrant.podspec
最后添加上in_app_purchase
的相关信息:s.dependency 'in_app_purchase_storekit'
最后重新执行pod install
奇迹出现,Pods/FlutterPluginRegistrant/GeneratedPluginRegistrant.m
也有了in_app_purchase
相关的代码
#if __has_include(<in_app_purchase_storekit/InAppPurchasePlugin.h>)
#import <in_app_purchase_storekit/InAppPurchasePlugin.h>
#else
@import in_app_purchase_storekit;
#endif
[InAppPurchasePlugin registerWithRegistrar:[registry registrarForPlugin:@"InAppPurchasePlugin"]];
如图:
再次运行工程,可以进行内购了,非常完美
不知道大家遇到过这个问题没有,我是第一次遇到,挺奇葩的,不知道是哪里没设置对,导致的这个问题,对初学者挺不友好,解决这个问题浪费挺多时间,有知道怎么设置的大神可以评论或者私信我,非常感谢赐教