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已经下载了,但是就是不能使用。

开始想着手动填入,但是不识别,报错了。

网上看到很多解决方法比如:

  1. 交互的channelName写错了。这in_app_purchase_storekitGoogle推出的,大概率不会有错,检查后也是没错的。
  2. 重启。试过没用。
  3. 重新执行 cleanpub 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"]];

如图:
请添加图片描述

请添加图片描述

再次运行工程,可以进行内购了,非常完美

不知道大家遇到过这个问题没有,我是第一次遇到,挺奇葩的,不知道是哪里没设置对,导致的这个问题,对初学者挺不友好,解决这个问题浪费挺多时间,有知道怎么设置的大神可以评论或者私信我,非常感谢赐教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值