我可以使用FlutterInappPurchase从Play商店中获取产品数据,但无法购买。遵循以获取详细信息;
我正在使用 flutter_inapp_purchase @ 2.2.0
我在模块的转到页面上共享了它,但我想吸引更多的受众。因为我无法解决资源不足的问题。
我的代码的工作过程;
List<IAPItem> _items = []
中,然后连接插件。 Setting.productLists:: [io.kr.english.course.purchase.all.3, io.kr.english.course.purchase.all.2, io.kr.english.course.purchase.all.1]
I/flutter ( 3947): consumeAllItems error: PlatformException(consumeAllItems, refreshItem, No purchases found)
_getProduct()
函数起作用了,并且可以在日志屏幕上看到产品。
SUBSCRIPTION_ID:: productId: io.kr.english.course.purchase.all.1, price: 1.19, currency: TRY, localizedPrice: ₺1,19, title: 1 Aylık (Keyrote), description: 1 Aylık eğitim paketi, introductoryPrice: , introductoryPricePaymentModeIOS: , subscriptionPeriodNumberIOS: null, subscriptionPeriodUnitIOS: null, introductoryPricePaymentModeIOS: null, introductoryPriceNumberOfPeriodsIOS: null, introductoryPriceSubscriptionPeriodIOS: null, subscriptionPeriodAndroid: P1M, introductoryPriceCyclesAndroid: , introductoryPricePeriodAndroid: , freeTrialPeriodAndroid: , iconUrl: , originalJson: {"skuDetailsToken":"AEuhp4Ibjcl0f_I9C1Apvz79Dzgbd_tPs3Rn4vxtBF2dpLKwsnJYvyTR10Gc_CvI7Z2C","productId":"io.kr.english.course.purchase.all.1","type":"subs","price":"₺1,19","price_amount_micros":1190000,"price_currency_code":"TRY","subscriptionPeriod":"P1M","title":"1 Aylık (Keyrote)","description":"1 Aylık eğitim paketi"}, originalPrice: {"skuDetailsToken":"AEuhp4Ibjcl0f_I9C1Apvz79Dzgbd_tPs3Rn4vxtBF2dpLKwsnJYvyTR10Gc_CvI7Z2C","pr
W/ProxyBillingActivity( 3947): Activity finished with resultCode 0 and billing's responseCode: 4
W/BillingHelper( 3947): Couldn't find purchase lists, trying to find single data.
W/BillingHelper( 3947): Received a bad purchase data.
W/BillingHelper( 3947): Couldn't find single purchase data as well.
E/DoobooUtils( 3947): Error Code : 4
I/flutter ( 3947): purchase-error: responseCode: 4, debugMessage: , code: E_ITEM_UNAVAILABLE, message: That item is unavailable.
产品已附加并在Google Play中有效。
没有太多我无法解决的资源。预先感谢您的帮助,我希望它能起到描述性作用。
如果我需要共享与在互联网上找到的代码相同的代码,则可以在下面关注它们。
将iAP连接到服务
Future<void> initPlatformState() async {
String platformVersion;
try {
platformVersion = await FlutterInappPurchase.instance.platformVersion;
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
var result = await FlutterInappPurchase.instance.initConnection;
print('result: $result');
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
try {
String msg = await FlutterInappPurchase.instance.consumeAllItems;
print('consumeAllItems: $msg');
} catch (err) {
print('consumeAllItems error: $err');
}
_conectionSubscription = FlutterInappPurchase.connectionUpdated.listen((connected) {
print('connected: $connected');
});
_purchaseUpdatedSubscription = FlutterInappPurchase.purchaseUpdated.listen((productItem) {
print('purchase-updated: $productItem');
});
_purchaseErrorSubscription = FlutterInappPurchase.purchaseError.listen((purchaseError) {
print('purchase-error: $purchaseError');
});
await this._getProduct();
}
获取产品
Future _getProduct() async {
List<IAPItem> items = await FlutterInappPurchase.instance.getSubscriptions(_productLists);
for (var item in items) {
print('SUBSCRIPTION_ID:: ${item.toString()}');
this._items.add(item);
}
setState(() {
this._items = items;
this._purchases = [];
});
}
购买产品
Future _buyProduct(IAPItem item) async{
log.just("_buyProduct.item.id:: ${item.productId.toString()}");
try {
PurchasedItem purchased = await FlutterInappPurchase.instance.requestSubscription(item.productId);
log.just("_buyProduct.purchased:: ${purchased.toString()}");
String msg = await FlutterInappPurchase.instance.consumeAllItems;
log.just("_buyProduct.msg:: $msg");
} catch (error) {
log.just('_buyProduct.catch:: $error');
}
}
initState
@override
void initState() {
super.initState();
_productLists = [];
for(var i = 0; i < widget.pricingItemData.length; i++){
_productLists.add(widget.pricingItemData[i]['product_id'].toString());
}
log.just('Setting.productLists:: ${_productLists.toString()}');
initPlatformState();
_pageController = new PageController(initialPage: 0);
selectedIndex = 0;
}
购买操作代码
this._buyProduct(this._items[selectedIndex]);
扑打医生-v
[√] Flutter (Channel beta, v1.17.0-3.2.pre, on Microsoft Windows [Version 10.0.18362.778], locale en-US)
• Flutter version 1.17.0-3.2.pre at C:\src\flutter
• Framework revision 2a7bc389f2 (10 days ago), 2020-04-21 20:34:20 -0700
• Engine revision 4c8c31f591
• Dart version 2.8.0 (build 2.8.0-dev.20.10)
[!] Android toolchain - develop for Android devices (Android SDK version 30.0.0-rc2)
• Android SDK at C:\Users\fatih\AppData\Local\Android\Sdk
• Platform android-29, build-tools 30.0.0-rc2
• ANDROID_HOME = C:\Users\fatih\AppData\Local\Android\Sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)
! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
[√] Chrome - develop for the web
• Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
[√] Android Studio (version 3.6)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 45.0.1
• Dart plugin version 192.7761
• Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)
[√] VS Code (version 1.44.2)
• VS Code at C:\Users\fatih\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.9.1
[√] Connected device (3 available)
• Venus GO • 2811389118001055 • android-arm • Android 8.1.0 (API 27)
• Chrome • chrome • web-javascript • Google Chrome 81.0.4044.129
• Web Server • web-server • web-javascript • Flutter Tools
! Doctor found issues in 1 category.
答案 0 :(得分:0)
FlutterInappPurchase.instance.requestSubscriptions方法在android上需要第二个参数:
///在Android
或iOS
上请求订阅。
///将在purchaseUpdated
侦听器或purchaseError
侦听器中接收结果。
///
/// <{NOTICE 注意”在Android
上是第二个参数。
///
///与iOS
上的[requestPurchase]相同。
未来requestSubscription(字符串sku, { 字符串oldSkuAndroid, int prorationModeAndroid, 字符串developerIdAndroid, 字符串accountIdAndroid, })异步{
if (_platform.isAndroid) {
return await _channel
.invokeMethod('buyItemByType', <String, dynamic>{
'type': EnumUtil.getValueString(_TypeInApp.subs),
'sku': sku,
'oldSku': oldSkuAndroid,
'prorationMode': prorationModeAndroid ?? -1,
'developerId': developerIdAndroid,
'accountId': accountIdAndroid,
});
} else if (_platform.isIOS) {
return await _channel.invokeMethod(
'buyProduct', <String, dynamic>{
'sku': sku,
});
}
throw PlatformException(
code: _platform.operatingSystem, message: "platform not supported");
}