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

App Store沙箱环境中服务器通知始终发送TEST类型的问题求助

问题描述

我们正在将一款Mac应用迁移至App Store,当前在Sandbox环境中测试App Store服务器通知功能:

  • 已在App Store Connect配置好对应URL,使用https://api.storekit-sandbox.itunes.apple.com/inApps/v1/notifications/test测试时,服务器可正常接收notificationType为TEST的通知。
  • 但通过应用完成Sandbox测试购买后,服务器仅能收到TEST类型的通知,预期的SUBSCRIBED、EXPIRED等实际类型通知始终未收到。

补充信息:

  • 应用基于Objective-C开发(暂无法重构为Swift),使用原生StoreKit。
  • 已配置App Store Connect发送V2版本通知(V1已废弃)。
  • 应用端流程正常:Sandbox测试账号登录到完成购买,应用可成功接收SKPaymentTransaction。
  • 将Sandbox用户的月度订阅设置为每5分钟续订一次,共收到12次通知,但全部为TEST类型。

请问是否遗漏了Sandbox测试配置,以获取SUBSCRIBED、EXPIRED等实际类型的通知(data-environment仍为Sandbox)?


排查与解决方案

以下是针对Sandbox环境下无法接收实际类型服务器通知的核心排查点:

1. 检查App Store Connect的通知订阅配置

  • 进入App Store Connect的「App信息」→「App Store服务器通知」页面:
    • 确认已勾选所有需要的通知类型(如订阅续订、过期、状态变更等),不要仅保留TEST类型。
    • 再次验证V2通知的版本选择正确,且URL地址与测试服务器完全匹配(注意Sandbox与生产环境的配置是独立的,确保当前配置对应Sandbox测试)。

2. 确保应用端正确完成交易流程

Objective-C中,必须在收到SKPaymentTransaction后调用完成方法,否则App Store会认为交易未闭环,不发送后续状态通知:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

检查应用代码中是否在处理完交易(如验证收据、更新用户权限)后,及时调用了上述代码。

3. 验证Sandbox测试账号与产品类型

  • 确认使用的是App Store Connect后台创建的沙盒测试员账号,而非个人Apple ID临时登录的测试账号。
  • 确认测试的产品是自动续订型订阅,只有该类型产品才会触发续订、过期等状态通知;消耗型或非续订型订阅不会发送此类通知。

4. 检查服务器端的V2通知解析逻辑

V2通知结构与V1差异极大,若服务器未适配V2格式,可能会误判或漏读通知类型:

  • 确认服务器接收的通知包含payload核心字段,而非V1的receipt字段。
  • 确保正确读取payload.notificationType字段来判断通知类型,而非旧的notification_type字段。

5. 手动触发Sandbox订阅状态变更

Sandbox环境中部分通知不会自动触发,需手动操作:

  • EXPIRED通知:需在App Store Connect的「用户和访问」→「沙盒测试员」中,找到对应测试账号的订阅记录,手动设置为「过期」状态。
  • SUBSCRIBED通知:首次购买成功后应立即触发,若未收到,需检查应用是否完成了收据验证流程(即使应用端能收到交易回调,未验证收据也可能影响通知发送)。

6. 排查服务器网络限制

  • 确保测试服务器的防火墙未拦截Apple Sandbox服务器的请求,需将Apple官方的Sandbox IP段加入白名单。
  • 确认服务器的HTTPS证书有效,App Store要求通知URL必须使用受信任的SSL证书,不能使用自签名证书。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:00:25