Javascript React本机Android应用程序内购买错误 react本机iap的版本

Javascript React本机Android应用程序内购买错误 react本机iap的版本,javascript,android,react-native,Javascript,Android,React Native,^2.4.1 react native的版本 16.6.3 您面临错误的平台(IOS或Android或两者皆有?) 安卓 预期行为 列出物品或购买物品 实际行为 产品数组为空 测试环境(仿真器?真实设备?) 真实设备 复制行为的步骤 我有两个错误: E_UNKNOWN发生未知或意外错误。请稍后再试。 添加购买侦听器仅在ios中提供。 这是我的物品id:ozann_ozan 一些代码: <TouchableOpacity onPress={() =>

^2.4.1

react native的版本 16.6.3

您面临错误的平台(IOS或Android或两者皆有?) 安卓

预期行为 列出物品或购买物品

实际行为 产品数组为空

测试环境(仿真器?真实设备?) 真实设备

复制行为的步骤 我有两个错误: E_UNKNOWN发生未知或意外错误。请稍后再试。 添加购买侦听器仅在ios中提供。 这是我的物品id:ozann_ozan

一些代码:

<TouchableOpacity 
                onPress={() => this.buyItem('ozann_ozan')}
                > 

我也有同样的问题,尽管这有点陈旧,但我认为为那些有问题的人提供一些支持会很有用。因为我自己刚刚遇到了这个问题,文档中并没有明确提到这一点,所以很烦人

仅在android上-您需要打开与计费服务的连接。以前是
RNIAP.prepare()
,但现在是
RNIAP.initConnection()
。这在iOS上不起任何作用,但这是
RNIAP.getProducts(itemSkus)
工作所必需的步骤

此外,如果您试图接收订阅,出于某种原因,它在iOS上是不可知的,如果您调用
RNIAP.getProducts(itemSkus)
,您会得到它们,但在android上,您需要将它们指定为订阅才能工作。您可以使用
RNIAP.getSubscriptions(itemSkus)
来实现这一点

我在Android和iOS上为不同的问题争论了几个小时,所以我希望这能有所帮助


干杯

是的,非常感谢你,因为你分享了你的知识。我最近发现了这个问题。在我解决这个问题之前,我为android设备使用了不同的库。再次感谢您,这真的很痛苦,因为您的帮助性回答,人们可以解决这个问题。
RNIAP.initConnection()
应该返回什么?调用此方法时,我得到一个空数组。
RNIAP.initConnection()
应给出true或false。这是文档的形式:在Android上,可以调用它来预加载连接以播放服务。在iOS上,它只需调用canMakePayments方法并返回监听器正常工作所需的值。
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();
        });
      }
    }