React Native 在iOS上,RNIap.getPurchaseHistory()总是返回一个空数组

nwo49xxi  于 2023-06-24  发布在  React
关注(0)|答案(2)|浏览(133)

RNIap.getPurchaseHistory总是返回一个空数组。不要紧,如果我呼吁应用程序启动或购买后作出。在componentDidMount中,我执行以下操作:

async componentDidMount() {

  await RNIap.initConnection();

  this.purchaseUpdateSubscription = purchaseUpdatedListener(
    async purchase => {
      try {
        // send purchase to the server
        const savedPurchase = await savePurchase(purchase);

        // finish transaction if server returned truthly value
        if (savedPurchase) {
          await RNIap.finishTransaction(purchase, true);

          // always returns en empty array
          console.log('Purchase history', await RNIap.getPurchaseHistory())
        }
      } catch (e) {
        console.log('Error: ', e);
      }
    }
  });
}

buyProduct功能:

buyProduct = async productId => {
  try {
    await RNIap.requestPurchase(productId, false);
  } catch (e) {
    console.warn('Error: ', e);
  }
};

当购买完成后,我收到以下消息:
你都准备好了
您的购买成功
【环境:沙盒]。
也许问题可能在与代码库无关的另一个地方?

jyztefdp

jyztefdp1#

偶然发现了一个我认为可能适合你的解决方案:
将RNIap.getPurchaseHistory() Package 在initConnection()和endConnection()调用周围。在请求购买历史记录之前,可能还给予RNIap.finshTransaction更多的时间来完成,以确保包含最新的购买记录。

// CODE 
await RNIap.initConnection();
   const purchase_history = await RNIap.getPurchaseHistory()
   console.log(purchase_history)
RNIap.endConnection()
e1xvtsh3

e1xvtsh32#

  • 此解决方案适用于除自动续订订阅或产品以外的产品或订阅。*

根据苹果的文档,他们只存储自动更新的订阅。因此,您必须设法使订阅/产品可用于此用户拥有的其他设备。
管理此功能的步骤:
1.使用https://www.npmjs.com/package/react-native-user-identity包调用getUserId获取用户标识。
1.保存订阅/产品详细信息,并引用服务器上的ID
您可以通过对使用相同apple ID登录的其他设备调用getUserId来获取相同的ID。

相关问题