flutter接入三方,报错MissingPluginException(No implementation found for method xxx on channel plugins xxx)
起因:
最近公司项目要接入内购
导入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"]];
如图:


再次运行工程,可以进行内购了,非常完美
不知道大家遇到过这个问题没有,我是第一次遇到,挺奇葩的,不知道是哪里没设置对,导致的这个问题,对初学者挺不友好,解决这个问题浪费挺多时间,有知道怎么设置的大神可以评论或者私信我,非常感谢赐教
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)