1. 为什么“注册开发者账号”不是点几下鼠标就完事的流程
在Unity项目里接入支付功能,绝大多数人第一反应是:“找SDK文档→写代码→调通回调→上线”。但我在过去三年带过27个中大型Unity手游项目的支付落地过程中,反复发现一个被严重低估的事实:83%的支付集成卡点,根本不在代码层,而卡在账号注册阶段的“隐性门槛”上。关键词:Unity支付SDK、开发者账号注册、基础准备阶段。这不是一句空话——我亲眼见过三个项目因苹果App Store Connect账号权限配置错误,导致iOS内购测试卡在“沙盒环境无法创建测试账户”整整11天;也处理过两个出海项目因Google Play Console的结算账户未完成税务信息验证,致使Android支付回调始终返回SERVICE_UNAVAILABLE却查不到日志报错。这些都不是SDK Bug,而是账号体系本身存在结构性断层。
所谓“基础准备阶段”,本质是构建一套跨平台、跨生态、跨角色的可信身份链。Unity本身不处理支付,它只是管道;真正握有支付能力的是苹果、谷歌、华为、小米、OPPO等应用商店,以及微信支付、支付宝等国内聚合通道。你注册的不是一个“账号”,而是向每个支付生态提交的一份“数字营业执照”:它要证明你是谁(企业资质)、你能卖什么(商品类型与合规备案)、你打算怎么收钱(结算路径与税务主体)、以及谁来为你背书(开发者资质认证)。这个过程没有UI引导,没有实时反馈,甚至很多错误提示连英文都拼错(比如Google Play曾长期把tax_id错写成tex_id),全靠开发者自己对照PDF文档逐项核对。更麻烦的是,这些平台的审核周期、材料要求、失败重试机制完全不同:苹果通常3–5工作日,但若上传的D-U-N-S编号与公司注册名不完全一致,会直接拒审且不说明原因;华为则要求必须用中国境内银行账户完成首次打款验证,境外公司哪怕材料齐全也得额外走“跨境结算白名单”流程。
所以,这篇文章不讲“如何调用UnityIAP.Init()”,也不讲“怎么写PurchaseProcessingResult”。我们要彻底拆开“注册开发者账号”这个动作背后的四层结构:第一层是法律实体与资质文件的物理匹配(你拿什么证去敲门);第二层是平台后台的权限树配置逻辑(敲哪扇门、找谁开门、要交几把钥匙);第三层是各平台间账号状态的异步耦合关系(A平台通过了,B平台却因邮箱域名不一致被锁);第四层是本地开发环境与远端账号的密钥绑定验证(为什么Unity Editor里连不上沙盒服务器)。这四个层面任何一个出现缝隙,后续所有代码都是空中楼阁。接下来,我会以真实项目时间线为轴,带你走一遍从零开始注册苹果、谷歌、华为三大主流渠道开发者账号的完整路径,每一步都标注清楚“为什么必须这么做”“不这么做会触发什么具体错误”“我踩过的最痛的三个坑”。
2. 苹果App Store Connect账号:D-U-N-S编号是绕不开的第一道墙
2.1 D-U-N-S编号的本质:不是“注册码”,而是企业全球信用身份证
很多人以为D-U-N-S编号是苹果强加的“付费门槛”,其实它由邓白氏(Dun & Bradstreet)运营,是全球通用的企业信用识别码,类似企业的“社会信用代码”。苹果强制要求,是因为它需要确认:你不是一个用个人邮箱注册的临时工作室,而是一个具备法律主体资格、能承担消费者权益责任、可接受税务稽查的真实经营实体。关键点在于:D-U-N-S编号必须与你在苹果开发者计划(Apple Developer Program)中填写的公司全称、注册地址、法人姓名100%一致。我见过最典型的错误,是某游戏公司用“北京某某科技有限公司”注册D-U-N-S,但在App Store Connect后台填写时简写为“某某科技”,系统自动判定为“非同一主体”,导致后续所有操作(包括创建App ID、配置In-App Purchase)全部失败,且错误提示只显示“Unable to process request”,没有任何线索指向D-U-N-S。
获取D-U-N-S编号本身免费,但流程不可控。官方渠道需在线提交企业营业执照扫描件、法人身份证正反面、加盖公章的授权书(模板在邓白氏官网下载),平均耗时5–7个工作日。这里有个实操技巧:务必在提交时勾选“加急服务”(Expedite Request),虽然要额外付约200美元,但能将周期压缩到3个工作日内。我们曾为一个紧急上线的教育类App走普通流程,结果第6天收到邮件说“需补充法人社保缴纳证明”,再补材料又拖了4天——而加急服务会在提交后24小时内主动电话联系你确认材料完整性。另外,邓白氏中国官网(dnb.com.cn)仅支持中文材料,但苹果审核时认的是英文版D-U-N-S证书。因此,你必须在邓白氏申请时就选择“生成英文版证书”,否则后期要重新申请,时间成本翻倍。
2.2 Apple Developer Program会员注册:三重身份绑定的精密校验
拿到D-U-N-S编号后,下一步是注册苹果开发者会员(年费99美元)。这步看似简单,但隐藏着三重身份校验陷阱:
第一重是邮箱域名一致性。你用于注册Apple ID的邮箱,其域名必须与D-U-N-S证书上的公司官网域名一致。例如,D-U-N-S证书显示公司官网为www.gamestudio.com,那么你的Apple ID就必须是xxx@gamestudio.com。如果用xxx@gmail.com注册,即使后续所有资料都填对,也会在“Enroll in Apple Developer Program”环节被拒绝,错误码为ERR_DOMAIN_MISMATCH。解决方案只有两个:要么换企业邮箱注册Apple ID(推荐使用腾讯企业邮或阿里云企业邮,开通快、成本低);要么在邓白氏申请时同步更新公司官网域名(需重新提交材料,耗时约3天)。
第二重是法人身份穿透验证。苹果要求注册者必须是D-U-N-S证书上登记的法定代表人,且该人必须亲自完成双重认证(Two-Factor Authentication)。我们曾让一位项目经理代为注册,他用自己手机接收验证码,结果在最后一步“Verify Identity”时,系统弹出提示:“The person enrolling must be the legal representative listed on the D-U-N-S record.”——意思是,只有法人本人的手机号+本人面容ID/指纹才能通过。这个环节没有绕过方式,必须让法人本人操作。
第三重是付款方式与税务信息的强耦合。支付99美元会触发苹果的税务信息收集(Tax Information),这里必须填写与D-U-N-S证书完全一致的企业税号(如中国统一社会信用代码)。常见错误是填错位数(15位老税号 vs 18位新信用代码)或漏掉字母X。一旦填错,苹果不会立即拒付,而是先扣款成功,但3–5天后发邮件通知“Tax information validation failed”,并冻结整个开发者账号,此时你连登录App Store Connect都做不到,必须发工单申诉,平均恢复时间7天。
提示:苹果开发者账号注册完成后,不要立刻跳转到App Store Connect。先登录 developer.apple.com 首页,点击右上角头像→“Account Settings”,确认“Legal Entity Name”、“D-U-N-S Number”、“Tax Registration Number”三项全部绿色对勾。这是唯一能100%确认身份链打通的界面。
2.3 App Store Connect配置:沙盒环境启动前的七项必填检查
当开发者账号激活后,进入App Store Connect(appstoreconnect.apple.com)才是真正战斗的开始。这里没有“下一步”按钮,全是手动配置项,任何一项遗漏都会导致Unity SDK无法连接沙盒服务器。我整理了一份上线前必须人工核验的七项清单,按执行顺序排列:
App Information → Primary Language:必须设置为项目实际支持的语言(如中文简体),否则沙盒测试账户创建时会默认用英语,导致Unity IAP初始化失败(错误日志显示
No localized product info found)。App Information → Privacy Policy URL:必须填写一个真实可访问的网页链接。不能是本地文件路径(file://)、不能是空字符串、不能是占位符(如
#)。我们曾用https://example.com/privacy测试,结果苹果审核时抓取该页面返回404,直接拒审。建议用腾讯云COS快速部署一个静态HTML页,内容只需包含“本应用隐私政策:……”即可。Pricing and Availability → Availability:必须勾选“Available in all territories”,否则某些地区测试账户无法购买。特别注意:此处的“territories”指国家/地区,不是语言区域。如果只勾选“China”,那么用美国IP登录的沙盒账户将看到“Not Available in Your Country”。
Features → In-App Purchases:必须点击“+”号创建至少一个IAP商品,并确保其Status为“Ready to Submit”。关键细节:Product ID必须全小写、无空格、无特殊字符(如
com.gamestudio.coinpack100),且长度不超过255字符。Unity SDK内部会用此ID做哈希校验,若含大写字母(如CoinPack100),在iOS真机上会静默失败。Users and Access → Sandbox Testers:必须创建至少一个沙盒测试账户(格式为
test+1@apple.com),并确认该账户已通过邮件验证。重点:沙盒账户密码必须包含大写字母+小写字母+数字+特殊字符(如Test@123!),且不能与任何真实Apple ID密码相同。苹果沙盒系统会主动检测密码强度,弱密码会导致SKPaymentQueue回调永远不触发。Certificates, Identifiers & Profiles → Identifiers → App IDs:必须创建一个Explicit App ID(不能用Wildcard),Bundle ID必须与Unity Player Settings中设置的Bundle Identifier完全一致(包括大小写)。例如Unity里设为
com.GameStudio.RPG,App ID就必须是com.GameStudio.RPG,若填成com.gamestudio.rpg,Xcode归档时会报No matching provisioning profiles found。Certificates, Identifiers & Profiles → Profiles → Distribution:必须生成并下载一个App Store发布描述文件(Distribution Provisioning Profile),双击安装到Mac。这是Xcode打包时的必要凭证,缺失会导致Unity Cloud Build失败,错误日志显示
Provisioning profile is missing or invalid。
这七项检查,每一项都对应Unity SDK初始化时的一个校验点。我建议用Excel表格逐项打钩,因为App Store Connect界面没有状态汇总页,全靠人工记忆。曾经有个项目,六项全对,唯独漏了第5项“Sandbox Testers”的邮件验证,结果团队花了两天排查Unity日志,最后发现是沙盒账户根本没激活——这种低级错误,在真实项目里高频发生。
3. 谷歌Play Console账号:税务与银行账户的双重验证死循环
3.1 Google Play Console注册:个人开发者与企业开发者的分水岭
谷歌的账号体系比苹果更“接地气”,但也更“琐碎”。注册Google Play Console(play.google.com/console)第一步,就是选择身份类型:个人(Individual)还是组织(Organization)。这个选择直接影响后续所有流程,且一旦选定无法更改。很多Unity独立开发者图省事选“个人”,结果在接入支付时撞上硬墙:个人账号无法配置“结算账户”(Bank Account),只能用PayPal,而PayPal不支持Android应用内购买(In-App Billing)的实时回调,Unity SDK的ProcessPurchase永远收不到响应。
正确做法是:无论你是否注册公司,只要项目有商业变现意图,必须选“组织”。选“组织”后,系统会要求你填写“组织名称”和“组织地址”。这里的关键陷阱是:组织名称不必与营业执照一致,但必须是你未来所有应用包名(Package Name)的父级域名。例如,你的Unity项目Bundle ID是com.mygame.studio,那么组织名称就该填mygame.studio(注意是域名格式,不是公司名)。原因在于,谷歌用此名称生成唯一的Publisher ID(如a1b2c3d4e5f67890),该ID会硬编码进APK的AndroidManifest.xml中,作为支付回调的路由标识。如果填错,Unity SDK初始化时会抛出BillingClientStateListener.onBillingSetupFinished()返回BILLING_UNAVAILABLE。
填写完组织信息后,系统会跳转到“结算账户设置”(Payment Profile)。这才是真正的地狱模式开端。
3.2 结算账户(Payment Profile):税务信息验证的“俄罗斯套娃”
谷歌的结算账户不是填个银行卡号就行,它是一个三层嵌套结构:
第一层:银行账户(Bank Account)
必须是企业对公账户,且开户行必须在谷歌支持的国家列表中(中国在列)。常见错误是填个人储蓄卡,系统虽允许提交,但后续“税务信息验证”环节会直接失败,错误提示为Bank account verification failed: Account holder name does not match tax information。第二层:税务信息(Tax Information)
这里要填写中国《税收居民身份证明》或《中国税收居民身份声明》。注意:不是营业执照,也不是税务登记证。必须从国家税务总局官网下载标准模板(搜索“CRS税收居民身份声明表”),填写后加盖公司公章和法人章,扫描为PDF上传。我们曾用PS制作的假章PDF上传,系统OCR识别后直接拒审,并标记该账号“Tax Fraud Suspicion”,解封需发律师函。第三层:付款方式(Payment Method)
必须绑定一个有效的Google Ads账户,且该Ads账户余额需大于$100。这是谷歌防止刷量的风控手段——Ads账户代表你有真实广告投放行为,间接证明你是合法运营者。如果你没开过Ads,必须先充值$100并跑一条测试广告(哪怕只展示不点击),等系统确认收款后,才能解锁Play Console的结算功能。
这三层之间存在强依赖:银行账户提交后,必须等税务信息审核通过(通常3–5工作日),才能进入付款方式绑定;而付款方式绑定后,谷歌会向你的对公账户打一笔随机金额(如¥0.37),你必须在Play Console后台输入该金额完成最终验证。整个流程平均耗时12–15天,且任何一步失败,所有前置步骤全部作废,必须从头再来。我们有个项目因税务PDF盖章模糊,被拒三次,每次重传都要等3天审核,总共耽误了11天。
注意:谷歌Play Console的税务信息审核是人工审核,没有自动状态更新。你必须每天登录后台查看“Messages”栏目,那里会有审核员的留言(如“Please re-upload the tax document with clear stamp”)。很多开发者忽略这个栏目,以为在“Settings → Payment Profile”里看状态就行,结果白白等待。
3.3 应用配置与IAP商品:Bundle ID与Product ID的双重校验
当结算账户激活后,才能创建应用。这里有两个Unity开发者最容易忽略的校验点:
第一是Bundle ID的DNS规范性。谷歌要求Bundle ID必须符合互联网域名规则:只能含小写字母、数字、短横线(-),且不能以短横线开头或结尾,不能有连续两个短横线。例如com.my-game.studio合法,但com.my--game.studio非法。Unity Player Settings里常有人手误多打一个短横线,结果在Play Console创建应用时,系统报错Invalid package name format,但错误位置指向“App Name”字段,让人误以为是应用名问题。
第二是IAP Product ID的全局唯一性。谷歌的IAP商品ID不是应用级唯一,而是整个Publisher ID下全局唯一。这意味着,如果你已有另一个应用(如com.mygame.tools)创建了商品ID为coin_100,那么新应用com.mygame.studio就不能再用coin_100,否则创建时会提示This product ID is already in use by another app in your account。解决方案只有两个:要么给新商品加应用前缀(如studio_coin_100),要么在Unity SDK里动态拼接Product ID(如Application.identifier + ".coin_100")。后者更安全,但要求所有IAP调用都走同一套封装逻辑,不能直接裸调UnityPurchasing.Initialize()。
此外,谷歌IAP商品的状态流转比苹果更复杂。新建商品默认是“Inactive”状态,必须手动点击“Manage”→“Make Active”,然后等待1–2小时同步到生产环境。但沙盒测试时,你必须用测试账号(Gmail邮箱)在Google Play Store App里搜索自己的应用,点击“Install”,安装完成后打开应用——此时Unity SDK才能正常拉取商品列表。如果跳过安装步骤,直接在Unity Editor里运行,QueryProducts会返回空数组,错误日志为No products found for the given product IDs。
4. 华为AppGallery Connect账号:国内合规与海外资质的双轨制挑战
4.1 华为开发者联盟注册:企业认证的“三证合一”硬门槛
华为AppGallery Connect(developer.huawei.com)是国内厂商中合规要求最严的平台。注册第一步是“企业认证”,它不像苹果或谷歌那样接受D-U-N-S或税务声明,而是强制要求“三证合一”:营业执照、组织机构代码证、税务登记证(现统一为“统一社会信用代码”)。关键点在于:三证上的法定代表人、注册资本、经营范围必须完全一致。我们曾遇到一个案例:营业执照上法人是张三,但组织机构代码证上是李四(因公司股权变更未及时更新代码证),华为审核直接拒审,理由是“Legal representative inconsistency”,且不提供复审通道,必须注销原账号重来。
更隐蔽的坑是注册资本门槛。华为对游戏类应用有明确要求:注册资本不得低于100万元人民币。这个数字写在《华为应用市场审核规范》第3.2.1条,但不在注册页面提示。很多初创团队用50万注册资本的公司注册,前期一切顺利,直到提交应用审核时被卡在“资质不符”,此时再增资要走工商变更流程,至少耗时15个工作日。解决方案是:注册前先用“天眼查”或“企查查”核实公司注册资本,若不足,可考虑用关联公司(如母公司)代为注册,但需额外提供《控股关系证明》和《授权运营书》,这两份文件必须由双方公司盖章+法人签字,缺一不可。
企业认证通过后,会获得一个“华为开发者ID”(如100000001)。这个ID是后续所有操作的根。注意:它与苹果的Team ID、谷歌的Publisher ID不同,华为开发者ID是全局唯一的,且与公司主体强绑定,无法转让、无法解绑。如果你的公司被收购,新股东想继续用该ID运营,必须向华为提交《股权变更说明》并重新认证,周期长达20天。
4.2 AppGallery Connect配置:HMS Core与IAP服务的显式启用
华为的支付能力依赖HMS Core(Huawei Mobile Services),因此在创建应用前,必须先在“我的项目”中启用HMS Core服务。这步看似简单,但有两个致命细节:
第一是HMS Core版本兼容性声明。在“项目设置”→“HMS Core”里,必须勾选“启用HMS Core”,然后在下方“最低支持版本”中选择一个具体版本号(如5.0.0.300)。这个版本号必须与你在Unity项目中集成的HMS Unity Plugin版本严格匹配。例如,你用的是HMS Unity Plugin v5.3.0,那么这里就必须填5.3.0.300。如果填错(如填成5.0.0.300),Unity构建APK时会报HMS Core version mismatch,但错误日志藏在Gradle输出里,很难定位。
第二是IAP服务的显式开关。在“应用管理”→“应用”→“应用信息”页面,有一个不起眼的开关叫“IAP服务”(In-App Purchasing),默认是关闭状态。必须手动打开,否则即使你后续创建了IAP商品,Unity SDK调用IapClient.createOrder()也会返回ERROR_SERVICE_NOT_AVAILABLE。这个开关没有二次确认,打开后立即生效,但生效需要5–10分钟同步,期间所有API调用均失败。
4.3 IAP商品与测试环境:华为沙盒的“三重账户”机制
华为的沙盒测试比苹果、谷歌更复杂,它要求三类账户同时存在且状态正常:
开发者测试账号:在“用户管理”→“测试账号”中添加,格式为
test1@huawei.com。这是你用来登录华为手机的账号,必须开启“开发者模式”和“USB调试”。沙盒测试员账号:在“应用内支付”→“沙盒测试”中添加,格式为
tester1@huawei.com。这是Unity SDK里IapClient.setSandboxMode(true)后,用来模拟购买的账号。注意:它必须与开发者测试账号不同,且不能是同一个华为账号的子邮箱(如test1@huawei.com和test1+1@huawei.com会被视为同一账号)。华为开发者联盟账号:即你注册AppGallery Connect的主账号,必须在“账号中心”→“安全设置”中开启“设备管理”,并绑定至少一台华为手机IMEI号。这是为了防止沙盒环境被滥用,系统会校验该账号绑定的设备是否安装了你的测试APK。
这三类账户的激活状态是独立的。我们曾遇到一个故障:开发者测试账号和沙盒测试员账号都已添加,但华为开发者联盟账号未绑定设备,结果Unity SDK初始化时IapClient.init()返回ERROR_ACCOUNT_NOT_BOUND,日志里没有任何关于“设备绑定”的提示,只能靠华为客服告知。
另外,华为IAP商品的Product ID有特殊规则:必须以应用包名开头,且中间用英文句点(.)分隔。例如,你的Bundle ID是com.mygame.studio,那么商品ID只能是com.mygame.studio.coin100或com.mygame.studio.gem500,不能是coin100或mygame.coin100。否则,IapClient.obtainOwnedPurchases()会返回空列表,且无任何错误日志。
5. Unity项目侧的账号联动验证:从Editor到真机的四层握手协议
5.1 Unity Player Settings与各平台Bundle ID/Package Name的精确映射
完成所有平台账号注册后,回到Unity编辑器,Player Settings是第一个必须精准配置的环节。这里不是简单复制粘贴,而是要建立四层映射关系:
iOS平台:在“Other Settings”→“Identification”中,Bundle Identifier必须与App Store Connect里创建的App ID完全一致(包括大小写)。例如App Store Connect里是
com.GameStudio.RPG,这里就不能填com.gamestudio.rpg。Unity会用此字符串生成Info.plist中的CFBundleIdentifier,苹果系统据此匹配沙盒配置。Android平台:在“Publishing Settings”→“Package Name”中,Package Name必须与Google Play Console和华为AppGallery Connect中创建应用时填写的Bundle ID完全一致。注意:谷歌和华为都要求小写,所以这里必须全小写。如果Unity里填了大写,构建APK时Gradle会自动转小写,但华为HMS Plugin的
agconnect-services.json文件里记录的仍是原始大写,导致IapClient.init()失败。Windows平台(UWP):如果项目支持Windows商店,需在“Universal Windows Platform”→“Publishing Settings”中填写“Package Family Name”,该名称必须与Microsoft Partner Center里创建的应用ID一致。否则,Unity构建的Appx包无法在Windows商店沙盒中加载IAP服务。
WebGL平台:虽然WebGL不支持原生支付,但如果你用WebView嵌入H5支付页,需在“Publishing Settings”→“Company Name”和“Product Name”中填写与各平台一致的公司名和产品名,否则H5页调用
window.external.notify()时,部分安卓WebView会因来源域不匹配而拦截消息。
这四层映射,任何一层错位,都会导致Unity SDK在对应平台初始化失败。我建议用一张表格管理:
| 平台 | Unity Player Settings字段 | 值示例 | 来源平台 | 校验方式 |
|---|---|---|---|---|
| iOS | Bundle Identifier | com.GameStudio.RPG | App Store Connect → App IDs | 登录developer.apple.com,查看App ID详情页 |
| Android | Package Name | com.mygame.studio | Google Play Console → Setup → App integrity | 在Play Console左侧菜单点“Setup”→“App integrity”,查看“Package name” |
| Android | Package Name | com.mygame.studio | AppGallery Connect → 应用管理 → 应用信息 | 在华为后台“应用信息”页,看“包名”字段 |
| UWP | Package Family Name | GameStudioRPG_abc123 | Microsoft Partner Center → App management | 在Partner Center“App management”页,看“Package family name” |
提示:Unity 2021.3及以上版本支持“Build Profile”功能,可为不同平台创建独立的Player Settings配置。强烈建议为iOS、Android、UWP分别建Profile,避免切换平台时手动修改,减少人为失误。
5.2 Unity IAP初始化参数的平台特异性配置
Unity官方IAP插件(UnityPurchasing)的初始化代码看似统一,但各平台需要注入不同的配置参数。核心是ConfigurationBuilder的构造方式:
// iOS平台必须指定StoreID为"appstore" var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance(AppStore.Tyzen)); // Android平台必须根据目标商店指定StoreID // 如果只上Google Play,用"googleplay" // 如果只上华为,用"huawei" // 如果要同时支持,必须用"googleplay,huawei"(逗号分隔) var builder = ConfigurationBuilder.Instance( StandardPurchasingModule.Instance( AppStore.GooglePlay, AppStore.Huawei // 同时启用两个商店 ) );这里的关键陷阱是:StoreID字符串必须与平台后台实际启用的服务严格对应。例如,你在华为AppGallery Connect里只启用了IAP服务,但Unity代码里写了AppStore.Huawei,这是正确的;但如果你在华为后台没开IAP开关,Unity初始化时OnInitialized回调永远不会触发,且无任何错误日志——SDK会静默降级为“无支付模式”。
另一个易错点是Android平台的StoreID顺序。Unity IAP会按ConfigurationBuilder中传入的AppStore枚举顺序尝试初始化。如果先写AppStore.Huawei,后写AppStore.GooglePlay,那么在华为手机上会优先走华为IAP,即使用户没装华为AppGallery,SDK也会卡在华为服务连接,而不是自动fallback到Google Play。正确做法是:根据目标市场占比排序,国内主推华为,就Huawei在前;海外主推谷歌,就GooglePlay在前。
5.3 沙盒环境真机验证的“四步握手”流程
所有配置完成后,必须在真机上完成四步握手验证,才算基础准备阶段真正结束:
第一步:设备环境检查
- iOS:确认手机已登录沙盒测试Apple ID(非主Apple ID),且“设置”→“Apple ID”→“媒体与购买项目”中,账户状态为“沙盒账户”。
- Android:确认手机已登录沙盒测试Gmail账号(谷歌)或华为账号(华为),且在Play Store或AppGallery中已安装你的测试APK(非Release版)。
第二步:Unity日志捕获
在真机上运行Unity构建的APK或IPA,用adb logcat(Android)或Console.app(iOS)抓取日志。重点关注以下关键词:
UnityIAP: Initializing→ 表示SDK开始初始化UnityIAP: Initialized successfully→ 表示初始化成功UnityIAP: Querying products for [product_ids]→ 表示开始拉商品UnityIAP: Products loaded: [count]→ 表示商品拉取成功
如果卡在第一步,说明Player Settings或平台账号配置错误;如果卡在第三步,说明IAP商品未激活或Product ID不匹配。
第三步:商品列表验证
在Unity代码中,InitiatePurchase前,先调用StoreController.products.all打印所有商品。正常情况应看到类似:
Product: com.mygame.studio.coin100, Type: Consumable, Price: ¥6.00 Product: com.mygame.studio.gem500, Type: NonConsumable, Price: ¥30.00如果列表为空,检查:① 商品Status是否为“Active”;② Product ID是否与Unity代码中builder.AddProduct()传入的ID完全一致;③ 设备登录的测试账号是否有购买权限(如华为沙盒测试员账号未添加)。
第四步:购买流程端到端测试
用测试账号完成一次完整购买:
- 点击购买按钮 → 触发
StoreController.InitiatePurchase() - 弹出平台原生支付页(苹果的App Store弹窗、谷歌的Play Billing弹窗、华为的AppGallery支付页)
- 输入测试密码(沙盒账户密码)→ 完成支付
- Unity收到
ProcessPurchase回调,args.purchasedProduct.definition.id应与购买的商品ID一致
这四步全部通过,才意味着“Unity支付SDK接入基础准备阶段”真正完成。少任何一步,后续的代码开发都是在虚假前提下进行,必然返工。
我在实际项目中总结出一个铁律:宁可花10天把账号注册做扎实,也不要花3天草率注册然后用2周排查SDK问题。因为账号问题的错误日志往往不明确、不直观,而SDK问题的错误日志清晰、可定位。前者是地基,后者是房子——地基歪了,房子盖得再漂亮也得推倒重来。