react-native-iap
的版本^2.4.1
react-native
的版本16.6.3
平台您遇到了错误(iOS或Android还是两者?)
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();
});
}
}
我也遇到了同样的问题,即使这有点旧,我认为为那些有问题的人提供一些支持是有用的。当我本人遇到这个问题时,这很烦人,因为文档并没有真正提及这一点。
仅在Android上 - 您需要打开与计费服务的连接。这曾经是RNIAP.prepare()
,但现在是RNIAP.initConnection()
。这在iOS上没有任何作用,但这是RNIAP.getProducts(itemSkus)
工作的必要步骤。
另外,如果您要接收订阅,出于某种原因,它在iOS上是不可知的,如果您致电RNIAP.getProducts(itemSkus)
,则会得到它们,但是在Android上,您需要将其指定为订阅,以使其工作以使其工作。您可以使用RNIAP.getSubscriptions(itemSkus)
。
我在Android和iOS上争夺了几个小时,以解决不同的问题,所以我希望这会有所帮助。
欢呼