React Native Android In App Purchase 错误
Posted
技术标签:
【中文标题】React Native Android In App Purchase 错误【英文标题】:React Native Android In App Purchase Error 【发布时间】:2019-07-22 05:02:18 【问题描述】:react-native-iap 的版本
^2.4.1
react-native 的版本
16.6.3
您遇到错误的平台(ios 或 android 或两者?)
安卓
预期行为
列出物品或购买物品
实际行为
产品数组为空
测试环境(模拟器?真机?)
真实设备
重现行为的步骤
我有两个错误: E_UNKNOWN 发生未知或意外错误。请稍后再试。 添加购买监听器仅在 ios 中提供。 这是我的物品 ID:ozann_ozan
一些代码:
<TouchableOpacity
onPress=() => this.buyItem('ozann_ozan')
>
const itemSkus = Platform.select(
ios: [
'com.example.coins100'
],
android: [
'com.bettipspro'
]
);
componentWillMount()
this.getAvailablePurchases();
this.getItems();
async componentDidMount()
try
const products = await RNIap.getProducts(itemSkus);
console.log(products);
this.setState( products );
catch(err)
console.warn(err); // standardized err.code and err.message available
getItems = async() =>
const products = await RNIap.getProducts(itemSkus);
console.log(itemSkus);
try
const products = await RNIap.getProducts(itemSkus);
// const products = await RNIap.getSubscriptions(itemSkus);
console.log('Products', products);
this.setState( productList: products );
catch (err)
console.warn(err.code, err.message);
getAvailablePurchases = async() =>
console.log('eben');
try
console.info('Get available purchases (non-consumable or unconsumed consumable)');
const purchases = await RNIap.getAvailablePurchases();
console.info('Available purchases :: ', purchases);
Alert.alert(purchases.length);
if (purchases && purchases.length > 0)
Alert.alert('purchases.length');
this.setState(
availableItemsMessage: `Got $purchases.length items.`,
receipt: purchases[0].transactionReceipt,
);
catch (err)
console.warn(err.code, err.message);
Alert.alert(err.message);
buyItem = async(sku) =>
console.info('buyItem: ' + sku);
try
const purchase: any = await RNIap.buyProduct(sku);
this.setState( receipt: purchase.transactionReceipt , () => this.goToNext());
catch (err)
console.warn(err.code, err.message);
const subscription = RNIap.addAdditionalSuccessPurchaseListenerIOS(async(purchase) =>
this.setState( receipt: purchase.transactionReceipt , () => this.goToNext());
subscription.remove();
);
【问题讨论】:
【参考方案1】:我也遇到了同样的问题,尽管这有点老了,但我认为为有问题的人提供一些支持会很有用。因为我自己刚刚遇到这个问题,这很烦人,因为文档并没有真正清楚地提到这一点。
仅在 Android 上 - 您需要打开与计费服务的连接。这曾经是RNIAP.prepare()
,但现在是RNIAP.initConnection()
。这在 iOS 上没有任何作用,但这是 RNIAP.getProducts(itemSkus)
工作的必要步骤。
此外,如果您尝试接收 订阅,由于某种原因,它在 iOS 上是不可知的,如果您调用 RNIAP.getProducts(itemSkus)
,您会得到它们,但在 Android 上,您需要将它们指定为它的订阅去工作。您可以使用RNIAP.getSubscriptions(itemSkus)
来执行此操作。
为了解决不同的问题,我在 Android 和 iOS 上为此奋斗了几个小时,所以我希望这会有所帮助。
干杯
【讨论】:
是的,非常感谢您,因为您分享了您的知识。我最近想通了这个问题。在我解决这个问题之前,我为 android 设备使用了不同的库。再次感谢您,这真的很痛苦,由于您的有用回答,人们可以解决问题。RNIAP.initConnection()
应该返回什么?调用此方法时,我得到一个空数组。
RNIAP.initConnection()
应该给你真或假。这是文档的形式:在 Android 上,可以调用它来预加载与 Play 服务的连接。在 iOS 上,它会简单地调用 canMakePayments 方法并返回侦听器正常工作所需的值。以上是关于React Native Android In App Purchase 错误的主要内容,如果未能解决你的问题,请参考以下文章
windows上react-native run-android时Exception in thread "main" java.lang.IllegalArgumentExcep
react-native android fetch json停止工作
Create a Draggable Opacity Changing Circle with Reanimated in React Native
React Native Android入门实战及深入源码分析系列——React Native源码编译
命令失败:gradlew.bat app:installRelease -PreactNativeDevServerPort=8081 in react-native