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

如何针对不同商店构建禁用Unity IAP?初始化代码仍报错

解决方案

一、彻底禁用Unity IAP(针对OneStore构建)

仅通过Services面板禁用Unity IAP无法完全隔离相关代码,需要从代码、包管理、构建配置三个层面处理:

  1. 用预编译指令包裹所有Unity IAP相关代码
    你的GoogleIAPService必然依赖Unity IAP的命名空间(如UnityEngine.Purchasing),必须把这类代码全部用#if GOOGLE_MARKET包裹,确保OneStore构建时完全跳过编译:

    #if GOOGLE_MARKET
    using UnityEngine.Purchasing;
    public class GoogleIAPService : IIAPService
    {
        // Unity IAP的初始化、购买逻辑等代码
        void Start()
        {
            // Unity IAP初始化逻辑
        }
    }
    #endif
    
  2. 条件管理Unity IAP包
    打开Window > Package Manager找到Unity In-App Purchasing包:

    • 若分开构建Google Play和OneStore,构建OneStore时直接删除该包,构建Google Play时重新安装;
    • 嫌手动切换麻烦的话,Unity 2021+支持包的条件导入,修改Packages/manifest.json:
      {
          "dependencies": {
              "com.unity.purchasing": "4.8.0",
              ...
          },
          "conditionalDependencies": {
              "com.unity.purchasing": ["GOOGLE_MARKET"]
          }
      }
      
      这样仅当定义GOOGLE_MARKET宏时,才会加载Unity IAP包。
  3. 清理Player Settings中的IAP配置
    打开Edit > Project Settings > Player > Android > Publish Settings,确保Enable Unity IAP未勾选;同时确认Services > In-App Purchasing已彻底禁用,重启Unity保证设置生效。

二、ONESTORE_MARKET构建中Unity内购代码仍执行的原因及修复

你的宏分支逻辑本身没问题,问题大概率出在以下几点:

  1. 宏定义设置错误
    打开Edit > Project Settings > Player > Other Settings > Scripting Define Symbols:

    • 针对Google Play构建,仅添加GOOGLE_MARKET;
    • 针对OneStore构建,仅添加ONESTORE_MARKET,绝对不能同时添加两个宏,否则代码会优先匹配第一个分支(GOOGLE_MARKET)。
      建议用Unity的Build Variants给每个构建变体单独配置宏,避免手动切换出错。
  2. 存在未被宏包裹的Unity IAP代码
    检查项目所有脚本,有没有其他地方直接引用了Unity IAP的API且未用#if GOOGLE_MARKET包裹。比如某些工具类、全局管理器里的初始化代码,即使你的IAPManager没实例化GoogleIAPService,这些代码也会执行并报错。

  3. 场景中存在未禁用的Unity IAP相关组件
    排查所有场景,有没有直接挂载GoogleIAPService或Unity IAP自带组件的GameObject。这类组件会在场景加载时自动初始化,要么用宏控制组件的启用状态,要么仅在Google Play构建时保留这些组件。

新手额外提示

  • 切换构建目标后,点击File > Build Settings > Refresh确保宏定义和包配置同步;
  • 构建前执行File > Build Settings > Clean Build清理缓存,避免旧编译残留;
  • 测试时可添加宏定义打印,确认分支是否正确:
    void Start()
    {
        #if GOOGLE_MARKET
        Debug.Log("当前构建:GOOGLE_MARKET");
        #elif ONESTORE_MARKET
        Debug.Log("当前构建:ONESTORE_MARKET");
        #else
        Debug.Log("当前构建:默认");
        #endif
        // 原有分支逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:17:42