メインコンテンツまでスキップ

计费集成提交清单

本页涵盖从完成 AppCoins SDK 集成到应用在 Aptoide 上线所需的每一个步骤——包括集成的最终检查、Aptoide Connect 配置以及提交后的验证。


提交之前

在构建发布版二进制文件之前,请逐项检查以下内容。

集成清单

SDK 与 Xcode 配置:

  • 已通过 Swift Package Manager 添加 AppCoinsSDK(Swift),或已将插件导入 Assets(Unity)
  • 已添加 Keychain Sharing 能力,并将分组准确设置为 com.aptoide.appcoins-wallet
  • 已在 Info → URL Types 中添加 URL Scheme $(PRODUCT_BUNDLE_IDENTIFIER).iap,角色为 Editor
  • 已在 Info.plist 中将 MKSellsDigitalGoods 键设置为 YES

初始化(Swift):

  • 已在每一个应用入口点(SceneDelegate 和/或 AppDelegate)调用 AppcSDK.initialize()
  • 已在 scene(_:openURLContexts:) 及等效的 URL 处理方法中调用 AppcSDK.handle(redirectURL:)

初始化(Unity):

  • 已在 controller.Connect() 之前调用并等待 AppCoinsIAP.ConfigureStoreAsync

交易处理:

  • 已在 isAvailable() 检查之后,于每次应用启动时遍历 Transaction.unfinished(Swift)
  • 已在 Connect 完成后于 Start() 中调用 controller.FetchPurchases()(Unity)
  • 已在发放商品后调用 transaction.finish()(Swift)或 controller.ConfirmPurchase(order)(Unity)
  • 已处理所有 AppCoinsSDKError 情形(至少包括 notEntitledproductUnavailablenetworkError

测试:

  • 已在沙盒环境中完成端到端集成测试
⚠️

缺少 Keychain Sharing 或 URL scheme 将导致所有用户的购买失败。


Aptoide Connect 配置

  1. https://connect.aptoide.com 创建账户

  2. 创建应用条目:

    1. 点击 New App
    2. 填写应用的 bundle identifier、显示名称和类别。
    3. 保存该条目。
  3. 定义应用内商品:

    1. 打开应用条目,进入 Products → Add Product
    2. 设置 SKU——该值必须与您传入 Product.products(for:)(Swift)或 Unity ProductCatalog 的值完全一致。SKU 区分大小写。
    3. 设置商品名称和价格。
    4. 保存,并对每个商品重复上述步骤。
  4. 构建发布版二进制文件:

    • 独立构建策略: 从包含 AppCoinsSDK 依赖的 aptoide 分支构建。归档并导出 .ipa
    • 单一构建策略: 构建您的标准二进制文件。其中包含 AppCoinsSDK,但仅在通过 Aptoide 分发安装时才会在运行时启用。

    完整对比请参见集成策略

  5. 提交二进制文件:

    1. 在 Aptoide Connect 中打开您的应用条目,进入 Releases → New Release
    2. 上传 .ipa 文件。
    3. 填写发布说明并提交审核。

提交之后

  • Aptoide 会对您的应用进行审核,所需时间视情况而定。审核完成后您将收到通知。
  • 一经通过,您的应用内商品即可通过 Product.products(for:)(Swift)或 FetchProducts(Unity)查询。
  • 无论在通过审核之前还是之后,您都可以在沙盒环境中测试完整的购买流程——沙盒不要求应用条目已通过审核。
  • 请在 Catappult 控制面板中查看交易数据和收入报表。

沙盒测试

沙盒环境用于在应用上线前端到端地验证购买流程。沙盒会模拟真实购买,但不会向用户收费。

完整文档:沙盒

获取当前沙盒钱包地址(Swift):

if let walletAddress = await Sandbox.getTestingWalletAddress() {
print("Sandbox wallet: \(walletAddress)")
}