在应用程序购买错误中反应本机Android



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上争夺了几个小时,以解决不同的问题,所以我希望这会有所帮助。

欢呼

相关内容

  • 没有找到相关文章

最新更新