iOS 在开发阶段测试会员购买功能

在开发阶段测试会员购买功能,你有以下几种方法:

🎯 方法一:使用 StoreKit Configuration File(推荐)

这是最方便的本地测试方法,无需真实的 App Store Connect 配置。

1. 创建 StoreKit Configuration 文件

  1. 在 Xcode 中:FileNewFile
  2. 选择 StoreKit Configuration File
  3. 命名为 Products.storekit
  4. 保存到项目根目录

2. 配置产品信息

Products.storekit 文件中添加你的产品(根据你的代码,产品ID已定义):

{
  "products": [
    {
      "displayName": "月度会员",
      "familyShareable": false,
      "internalID": "monthly_123",
      "localizations": [
        {
          "description": "每月订阅 SpeechNote Pro",
          "displayName": "月度会员",
          "locale": "zh_CN"
        }
      ],
      "productID": "SpeechNote.Membership.Monthly",
      "referenceName": "Monthly Membership",
      "type": "AutoRenewableSubscription",
      "subscription": {
        "subscriptionGroupID": "group_speechnote",
        "subscriptionPeriod": "P1M"
      }
    },
    {
      "displayName": "年度会员",
      "familyShareable": false,
      "internalID": "yearly_456",
      "localizations": [
        {
          "description": "年度订阅 SpeechNote Pro",
          "displayName": "年度会员",
          "locale": "zh_CN"
        }
      ],
      "productID": "SpeechNote.Membership.Yearly",
      "referenceName": "Yearly Membership",
      "type": "AutoRenewableSubscription",
      "subscription": {
        "subscriptionGroupID": "group_speechnote",
        "subscriptionPeriod": "P1Y"
      }
    },
    {
      "displayName": "终身会员",
      "familyShareable": false,
      "internalID": "lifetime_789",
      "localizations": [
        {
          "description": "一次购买,永久使用",
          "displayName": "终身会员",
          "locale": "zh_CN"
        }
      ],
      "productID": "SpeechNote.Membership.Lifetime",
      "referenceName": "Lifetime Membership",
      "type": "NonConsumable"
    }
  ],
  "settings": {
    "locale": "zh_CN"
  },
  "version": {
    "major": 1,
    "minor": 0
  }
}

3. 在 Xcode 中启用

  1. 选择你的 Scheme:ProductSchemeEdit Scheme...
  2. 选择 RunOptions
  3. StoreKit Configuration 下拉菜单中选择 Products.storekit

4. 测试购买

  • 运行应用,购买流程会在本地模拟
  • 可以在 Xcode 菜单栏 DebugStoreKitManage Transactions 查看和管理测试交易
  • 可以快速测试订阅续订、过期、退款等场景

🧪 方法二:使用 Sandbox 测试账号

这个方法更接近真实环境,需要在 App Store Connect 中配置。

1. 在 App Store Connect 中配置产品

  1. 登录 App Store Connect
  2. 创建应用(如果还没创建)
  3. 进入 功能App 内购买项目
  4. 添加三个产品,使用你代码中的产品ID:
    • SpeechNote.Membership.Monthly - 自动续期订阅
    • SpeechNote.Membership.Yearly - 自动续期订阅
    • SpeechNote.Membership.Lifetime - 非消耗型项目

2. 创建 Sandbox 测试账号

  1. 在 App Store Connect 中:用户和访问沙盒测试员
  2. 点击 + 创建新的测试账号
  3. 使用一个不存在的邮箱(如 test@yourdomain.com
  4. 设置密码,选择地区为中国

3. 在设备上测试

  1. 退出真实的 Apple ID

    • 设置App Store → 点击头像 → 退出登录
  2. 运行应用

    • 在 Xcode 中运行应用到真机或模拟器
  3. 购买时登录 Sandbox 账号

    • 点击购买按钮时,系统会提示登录
    • 使用刚创建的 Sandbox 测试账号登录
    • 注意: 横幅会显示 [环境:沙盒] 表示是测试环境

4. Sandbox 测试特点

  • 免费购买:不会真实扣款
  • 快速订阅周期
    • 1个月订阅 = 5分钟
    • 1年订阅 = 1小时
  • 自动续订测试:可以测试续订6次后自动取消

💡 方法三:临时绕过购买(仅开发测试)

如果只想测试会员功能的 UI 和逻辑,可以临时修改代码:

查看当前会员状态判断逻辑

代码 StoreKitManager.swift 会员状态判断为:

var isUserMember: Bool {
    if #available(iOS 15.0, *) {
        return purchaseStatus == .purchased || purchaseStatus == .restored
    } else {
        if let membershipStatus = UserDefaults.standard.object(forKey: "MembershipStatus") as? Bool {
            return membershipStatus
        }
        return false
    }
}

临时测试方案(仅用于开发)

你可以在 UsageLimitManager.swift 中临时修改 isProUser 属性:

var isProUser: Bool {
    // 开发测试:临时返回 true 模拟会员
    return true  // ⚠️ 正式发布前必须删除!
    
    // 原逻辑...
}

或者使用编译标志:

var isProUser: Bool {
    #if DEBUG
    // 开发环境:可以通过设置来模拟
    if UserDefaults.standard.bool(forKey: "DEBUG_SimulateProMember") {
        return true
    }
    #endif
    
    // 正式逻辑
    if #available(iOS 15.0, *) {
        if StoreKitManager.shared.isUserMember {
            return true
        }
    }
    
    if isInTrialPeriod {
        return true
    }
    
    return false
}

然后在调试时设置:

UserDefaults.standard.set(true, forKey: "DEBUG_SimulateProMember")

📋 推荐的测试流程

阶段 1:本地快速测试(StoreKit Configuration)

✅ 测试购买流程UI
✅ 测试会员功能解锁
✅ 测试错误处理

阶段 2:Sandbox 真实测试

✅ 测试与 App Store Connect 的集成
✅ 测试订阅续订逻辑
✅ 测试恢复购买功能

阶段 3:TestFlight 测试

✅ 在真实环境中测试(使用Sandbox账号)
✅ 邀请测试用户反馈


⚠️ 注意事项

  1. 永远不要在生产代码中硬编码会员状态为 true
  2. Sandbox 账号不能用于真实购买
  3. 测试完成后要退出 Sandbox 账号
  4. StoreKit Configuration 仅在模拟器/调试时生效
  5. 正式发布前,确保 App Store Connect 中的产品已审核通过

🎓 调试技巧

查看购买事务

// 在 StoreKitManager 中添加日志
print("Current purchase status: \(purchaseStatus)")
print("Is user member: \(isUserMember)")

重置测试状态

  • 删除应用重新安装
  • 或在代码中清除 UserDefaults
  • 或在 Xcode: DebugStoreKitClear Purchase History

开发阶段,强烈推荐先使用方法一(StoreKit Configuration File),这样你可以快速迭代测试,无需等待 App Store Connect 的配置和审核。等基本功能稳定后,再使用方法二进行真实环境测试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容