符合 Apple 和 Google 的外部购买要求
了解您在 Apple 和 Google 上进行外部购买的合规性责任,以及 Unity 提供的 SDK 和网络钩子工具可帮助您履行这些责任。
阅读时间7 分钟最后更新于 8 天前
外部购买通过您自己的 Web 结帐(例如付款提供商)而不是 Apple 或 Google 的应用内计费来销售数字内容。Apple 和 Google 仅在特定地区允许这样做,并且仅在自己的计划规则(例如 External Purchase Program (Apple) 和 external offers Program (Google Play))下允许这样做。资格、费用、披露和交易报告因平台、地区和应用而异。在某些地区,您可能只需要很少或不需要这些购买要求。
为了帮助您构建自己的合规性流程,Unity 提供了 SDK 挂钩和 Webhook 数据。本页面将介绍职责分工、合规性步骤所依据的顺序模型以及您可以采取的具体行动。
本页面是集成直接到消费者 (D2C) 支付提供商工作流程的一部分。在添加此处描述的合规性处理之前,请设置您的支付提供商和购买流程。
职责分工
Unity 仅提供技术便利。您的支付提供商充当支付处理、税务和争议的记录商家,但不处理 Apple 或 Google 平台报告。平台合规性是您的责任,Unity 不会将您注册到任何平台计划中。Unity 的技术便利
当付款提供商进行购买时,Unity 会代表您打开结帐 URL。默认情况下,它会在设备的外部浏览器中打开。如果选择应用内演示 (CheckoutPresentationMode.WebView您的责任
Unity 仅提供技术便利。您负责以下任务:- 确定您的应用和地区是否符合每个平台的外部购买计划的条件。
- 在购买开始之前,使用 Apple 的 和 Google 的
ExternalPurchaseClient进行您自己的资格和披露检查。ExternalBillingProgramClient - 使用每个平台自己的 API 获取并报告 Apple 或 Google 所需的任何交易令牌。
Unity 如何创建和打开订单
付款提供商购买时,通常只需调用PurchaseProduct(catalogListingId)catalogListingId- 会创建订单并返回其签出 URL,而不会将其打开。
GenerateURL(catalogListingId, tokens) - 打开结帐。如果您已经为同一列表调用了
PurchaseProduct(catalogListingId),则会重用该顺序。如果没有,则会创建没有令牌的订单本身,然后将其打开。GenerateURL
GenerateURLPurchaseProduct确定合规性流程的需求
其余部分是独立的。使用下表查找适用于应用程序和平台的步骤:如果需要 | 执行此操作 | 部分 |
|---|---|---|
| 在应用内强制执行您自己的资格规则 | 注册在每次购买之前运行的合规性回调 | 通过合规性检查进行门购 |
| 在购买打开之前显示或公开结帐 URL | 调用 | 显示或渲染签出 URL |
| 向 Apple 或 Google 报告外部交易 | 使用 | 附加和报告交易令牌 |
通过合规性检查进行购买
此步骤是可选的。仅当在应用内强制执行自己的资格规则时,才添加此属性。 注册合规性回调以在购买进行之前应用您自己的资格规则。调用PurchaseProductPurchasePaymentProviderComplianceContextCartfalsePurchasingUnavailable-
定义一个函数,返回一个,指示玩家是否通过了合规性检查:
Task<bool>任务<bool> RunComplianceCheckAsync(PaymentProviderComplianceContext 上下文){ const bool allow = true; return Task.FromResult(allow);} -
在支付提供商购买服务上注册 函数,以便 Unity 在购买开始时调用 函数:
m_PurchasingService.PaymentProviders?.SetComplianceCheck(RunComplianceCheckAsync);
-
使用检查中的平台客户端可以调用每个平台所需的 API 以实现合规性:
- Apple:使用 访问 Apple 的外部购买 API。
ExternalPurchaseClient - Google:使用 访问 Google 的外部计费 API。
ExternalBillingProgramClient
- Apple:使用
显示或渲染签出 URL
平台可能要求您在玩家继续之前显示或公开外部购买 URL,或者您可能希望在自己的 Web 视图中渲染结帐。在这两种情况下,请调用GenerateURL然后,string url = await m_PurchasingService.PaymentProviders.GenerateURL(catalogListingId);// Display or disclose the URL, then call PurchaseProduct to open the checkout.
PurchaseProduct(catalogListingId)GenerateURL附加和报告交易令牌
Apple 或 Google 要求您报告外部交易时,需要执行此步骤(此步骤因程序和地区而异)。 Apple 和 Google 要求您通过其服务器 API 将每个外部交易报告给他们。您可以从平台获取不透明的交易令牌,将其附加到 Unity 订单,然后在订单 Webhook 中接收该令牌,以便您可以提交报告。您自己生成令牌:Apple 令牌来自ExternalPurchaseClientExternalBillingProgramClientPurchaseProductGenerateURL(catalogListingId, tokens)PurchaseProductUnity 将令牌与顺序一起存储而不检查或验证令牌,并按顺序将它们呈现在 Webhook 中。它们不会在顺序 API 响应中返回。await m_PurchasingService.PaymentProviders.GenerateURL(catalogListingId, tokenList);m_PurchasingService.PurchaseProduct(catalogListingId);
Webhook 有效负载中的令牌
顺序 Webhook 包含一个dataexternalTransactionTokens{ "eventType": "order.paid", "data": { "id": "...", "playerId": "...", "status": "paid", "externalTransactionTokens": [ { "store": "apple", "token": "opaque-apple-transaction-token", "type": "acquisition" }, { "store": "google", "token": "opaque-google-transaction-token" } ] }}
使用这些令牌可根据每个程序的要求通过 Apple 的外部购买服务器 API 或 Google 的
externalTransactions