You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用内购完成后无法添加游戏货币Emblems问题求助

问题排查与修复建议

核心问题定位

支付流程已确认正常(款项到账、console.log("purchase successful")可正常输出),但AsyncStorage更新游戏货币(Emblems)的逻辑未生效,而单独测试的AsyncStorage读写逻辑可以正常运行。

排查步骤

  1. 给AsyncStorage添加错误捕获
    当前代码里的AsyncStorage.getItem没有错误处理,读写过程中可能出现异常但未被发现。给异步操作加上catch块,查看控制台是否有错误输出:

    AsyncStorage.getItem('emblems')
      .then(value => {
        if (value == null){
          AsyncStorage.setItem('emblems', '1');
        } else {
          AsyncStorage.setItem('emblems', (Number(value) + 1).toString());
        }
      })
      .catch(err => console.error('AsyncStorage操作失败:', err))
    
  2. 验证entitlement判断逻辑是否正确
    虽然支付成功,但 entitlement 的判断条件可能不成立,导致后续存储逻辑未执行:

    • 打印customerInfo.entitlements.active的完整内容,确认目标 entitlement 确实存在:
      console.log('当前激活的entitlements:', customerInfo.entitlements.active);
      
    • 核对my_entitlement_identifier是否与后台配置的 entitlement 标识符完全一致。
  3. 对比测试按钮与支付逻辑的执行环境
    在支付成功后先打印当前emblems的值,和测试按钮的打印结果对比,确认是否存在存储上下文差异:

    console.log('支付前的emblems值:', await AsyncStorage.getItem('emblems'));
    

修复建议:统一用async/await简化异步逻辑

当前代码混合了await(支付部分)和then(存储部分),容易出现逻辑混乱。改用统一的async/await写法,同时完善错误处理和日志:

<BuyBox 
  Price='$0.99' 
  EN='1 Emblem' 
  onPress={async () => {
    try {
      if (this.state.offerings == null) return;
      
      const pkg = this.state.offerings.emblems.availablePackages.find(
        offering => offering.identifier === 'ispy_1_emblems'
      );
      if (!pkg) return;
      
      const {customerInfo} = await Purchases.purchasePackage(pkg);
      
      if (customerInfo.entitlements.active.my_entitlement_identifier) {
        console.log("purchase successful");
        const currentEmblems = await AsyncStorage.getItem('emblems');
        const newEmblems = currentEmblems ? (Number(currentEmblems) + 1).toString() : '1';
        await AsyncStorage.setItem('emblems', newEmblems);
        console.log('更新后的emblems值:', newEmblems);
      } else {
        console.log('未检测到激活的entitlement');
      }
    } catch (err) {
      console.error('购买或存储过程出错:', err);
    }
  }}
/>

需要补充的排查信息

若以上步骤未解决问题,请提供:

  • 控制台的完整日志输出(含支付成功日志、entitlements打印信息、AsyncStorage错误日志)
  • 测试按钮的完整代码,对比两者执行环境差异
  • Purchases库(推测为RevenueCat)的版本、React Native版本
  • 测试设备的系统版本(iOS/Android)

内容的提问来源于stack exchange,提问作者Theo Lupescu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:15:11