Ios 反应本机IAP自动续订订阅检查到期

Ios 反应本机IAP自动续订订阅检查到期,ios,react-native,in-app-purchase,react-native-ios,in-app-subscription,Ios,React Native,In App Purchase,React Native Ios,In App Subscription,我正在尝试使用恢复并检测iOS上自动续订的结束 通过调用getAvailablePurchases(),每次调用此函数时,我都会得到不同数量的购买(例如7次,下次23次,然后4次..)。这对我来说毫无意义。我知道月费可以续费5分钟。 我的想法是得到最新的购买,然后在这张收据上检查过期日期。(目前我正在分析所有这些问题,这不是最佳实践)。另一件事是,我检测到几个具有不同交易凭证的活动购买,即使只有一个活动 RNIap.getAvailablePurchases().then((purchases)

我正在尝试使用恢复并检测iOS上自动续订的结束 通过调用getAvailablePurchases(),每次调用此函数时,我都会得到不同数量的购买(例如7次,下次23次,然后4次..)。这对我来说毫无意义。我知道月费可以续费5分钟。 我的想法是得到最新的购买,然后在这张收据上检查过期日期。(目前我正在分析所有这些问题,这不是最佳实践)。另一件事是,我检测到几个具有不同交易凭证的活动购买,即使只有一个活动

RNIap.getAvailablePurchases().then((purchases) => {
            if(purchases != undefined && purchases.length > 0){
                alert(purchases.length + ' purchases');
                purchases.forEach((purchase) => {
                    const receiptBody = {
                        'receipt-data': purchase.transactionReceipt,
                        'password': appSubscriptionId
                    };
                    RNIap.validateReceiptIos(receiptBody, true).then((result) => { // false for production
                        let from, to, lastRenewal = '';
                        if(result.status == 0){ // 0 means receipt is correct..
                            result.latest_receipt_info.forEach((info) => { 
                                if(this.dateIsInFuture(info.expires_date)){
                                    to = moment.utc(info.expires_date, "YYYY-MM-DD HH:mm:ss").toString();
                                    from = moment.utc(info.original_purchase_date, "YYYY-MM-DD HH:mm:ss").toString();
                                    lastRenewal = moment.utc(info.purchase_date, "YYYY-MM-DD HH:mm:ss").toString();
                                    this.setState({ premium: true, from: from, to: to, lastRenewal: lastRenewal});
                                }else{
                                    alert('nicht aktiv');
                                }
                            });
                        }
                    }); 
                }); 
            }else{
                alert('No purchases found');
            }
        });

此函数提供所有可用的购买,还提供
收据:购买[0]。transactionReceipt,
行返回最新订阅。我想它解决了你的问题

getAvailablePurchases = async () => {
    try {
      console.info(
        'Get available purchases (non-consumable or unconsumed consumable)',
      );
      const purchases = await RNIap.getAvailablePurchases();
      console.info('Available purchases :: ', purchases);
      if (purchases && purchases.length > 0) {
        this.setState({
          availableItemsMessage: `Got ${purchases.length} items.`,
          receipt: purchases[0].transactionReceipt,
        });

        console.log(this.state.availableItemsMessage);
      }
    } catch (err) {
      console.warn(err.code, err.message);
      Alert.alert(err.message);
    }
  };

你能解决这个问题吗?你能解决吗?