当前位置: 首页 > news >正文

Unity支付接入前必过账号关:苹果谷歌华为开发者注册全解析

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无法连接沙盒服务器。我整理了一份上线前必须人工核验的七项清单,按执行顺序排列:

  1. App Information → Primary Language:必须设置为项目实际支持的语言(如中文简体),否则沙盒测试账户创建时会默认用英语,导致Unity IAP初始化失败(错误日志显示No localized product info found)。

  2. App Information → Privacy Policy URL:必须填写一个真实可访问的网页链接。不能是本地文件路径(file://)、不能是空字符串、不能是占位符(如#)。我们曾用https://example.com/privacy测试,结果苹果审核时抓取该页面返回404,直接拒审。建议用腾讯云COS快速部署一个静态HTML页,内容只需包含“本应用隐私政策:……”即可。

  3. Pricing and Availability → Availability:必须勾选“Available in all territories”,否则某些地区测试账户无法购买。特别注意:此处的“territories”指国家/地区,不是语言区域。如果只勾选“China”,那么用美国IP登录的沙盒账户将看到“Not Available in Your Country”。

  4. Features → In-App Purchases:必须点击“+”号创建至少一个IAP商品,并确保其Status为“Ready to Submit”。关键细节:Product ID必须全小写、无空格、无特殊字符(如com.gamestudio.coinpack100),且长度不超过255字符。Unity SDK内部会用此ID做哈希校验,若含大写字母(如CoinPack100),在iOS真机上会静默失败。

  5. Users and Access → Sandbox Testers:必须创建至少一个沙盒测试账户(格式为test+1@apple.com),并确认该账户已通过邮件验证。重点:沙盒账户密码必须包含大写字母+小写字母+数字+特殊字符(如Test@123!),且不能与任何真实Apple ID密码相同。苹果沙盒系统会主动检测密码强度,弱密码会导致SKPaymentQueue回调永远不触发。

  6. 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

  7. 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.comtest1+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.coin100com.mygame.studio.gem500,不能是coin100mygame.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字段值示例来源平台校验方式
iOSBundle Identifiercom.GameStudio.RPGApp Store Connect → App IDs登录developer.apple.com,查看App ID详情页
AndroidPackage Namecom.mygame.studioGoogle Play Console → Setup → App integrity在Play Console左侧菜单点“Setup”→“App integrity”,查看“Package name”
AndroidPackage Namecom.mygame.studioAppGallery Connect → 应用管理 → 应用信息在华为后台“应用信息”页,看“包名”字段
UWPPackage Family NameGameStudioRPG_abc123Microsoft 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问题的错误日志清晰、可定位。前者是地基,后者是房子——地基歪了,房子盖得再漂亮也得推倒重来。

http://www.jsqmd.com/news/861654/

相关文章:

  • 大数据协作框架-Sqoop
  • Angular Signal Forms:以状态为先,革新表单验证、UI 更新与状态管理
  • 解锁洛可可美学密码:用Midjourney V6实现蓬巴杜夫人级繁复纹样、柔光质感与粉金配色的5步精准控制法
  • 2026西南不锈钢风管厂家推荐榜:通风管道生产厂家、不锈钢排烟风管、地下室通风管道、复合风管、成都不锈钢风管、排烟通风管道选择指南 - 优质品牌商家
  • 2026年深圳名酒回收商家排行:深圳香梅酒业联系电话、作品一号回收、名庄红酒回收、名庄酒勃艮第回收、后花园回收选择指南 - 优质品牌商家
  • 2026成都本地奢侈品回收标杆名录:成都回收/成都回收金银/成都珠宝回收/成都离我最近的黄金回收/成都金店回收/选择指南 - 优质品牌商家
  • 【硬核DIY】纸杯+热熔胶?手搓一套光度立体视觉采集装置
  • 大电流如何检测?PCB安装还是穿孔式传感器
  • Unity游戏配置管线实战:Luban Schema与Data分离设计
  • 2026年第二季度宁波防腐工程优质服务商深度解析 - 2026年企业推荐榜
  • Python实现轻量级SIP服务器:Digest鉴权与sip.js对接实战
  • BurpSuiteCN-Release:面向实战的中文渗透工作流重构
  • 填补 .NET 生态空白:面向工业视觉的高性能 3D 点云/网格处理库
  • 2026Q2机械密封销售厂家选择:强制循环泵、手动补液泵、机械密封供应厂家、机械密封品牌、机械密封工厂、机械密封生产厂家选择指南 - 优质品牌商家
  • PyCharm 2022.3 运行 Python 脚本提示解释器找不到怎么办?
  • 2026年比较好的涂料墨水直喷印染印花助剂/印染印花助剂皂洗剂厂家推荐与选型指南 - 行业平台推荐
  • 题解:洛谷 P3398 仓鼠找 sugar
  • Open MCT性能测试实战:JMeter多协议分层压测方法
  • Chrome多进程沙箱机制原理解析与安全加固实践
  • pytest Code Review skill.md
  • Burp Suite混合加密流量解密实战:JS+Native加解密链路还原
  • AI漫剧创作教程:体验更流畅的创作流程,更好的效果
  • SpaceX启动纳斯达克IPO,1.75万亿美元市值目标能否实现?
  • TensorFlow模型API安全扫描与漏洞修复实战指南
  • edu 域名注册之旅
  • 听劝和辨劝
  • 2026成都租客车:成都租旅游大巴车、成都租旅游车、四川大巴包车、四川大巴租赁、四川大巴车租赁、四川客车租赁、四川旅游大巴车租赁选择指南 - 优质品牌商家
  • 2026年现阶段福州文化墙制作公司深度解析与核心厂商推荐 - 2026年企业推荐榜
  • Midjourney玻璃表现TOP3失败案例(含错误参数截图+修复前后PSD对比),工程师私藏调试日志首次公开
  • 2026年5月兰州装修设计质量排行:兰州装饰公司、兰州本地装修公司、兰州装修公司、兰州装修工作室、兰州装修设计公司选择指南 - 优质品牌商家