开发者控制台

IAP最佳实践 - 缩短应用启动时间

IAP最佳实践 - 缩短应用启动时间

在应用启动时调用应用内购买 (IAP) API可能会显著增加应用启动所需的时间,从而导致客户体验不佳。亚马逊应用商店建议的最佳实践是在后台进行这些服务器端调用,以避免应用加载时出现延迟。

避免阻止用户界面加载

将IAP API与应用集成中指示您在onResume() 方法中调用getUserData()getPurchaseUpdates() 来查询客户权利状态。这些API需要对亚马逊的后端服务器进行服务器端调用。首次调用不会被缓存,最多可能需要两秒钟才能执行,这可能会导致应用启动速度变慢。后续调用会被缓存,因此不会造成这种延迟。

为了防止启动延迟,在应用等待亚马逊服务器的响应时,不要阻止用户界面加载。相反,亚马逊应用商店建议使用缓存在后端服务器中的上一个权利状态。这可以从用户上次登录或访问应用开始,也可以从上次更新实时通知开始。

收到来自getUserData()getPurchaseUpdates() 的响应后,查询亚马逊的适用于Appstore SDK IAP的收据验证服务 (RVS) 以获取客户当前的权利状态。采取这一做法可避免同步问题。将接收的数据缓存在后端服务器上。然后,您可以异步更新应用的用户界面,以反映客户权利状态的任何变化。

架构示意图

借助这些示意图,您可以直观地了解在应用加载时进行IAP调用会发生什么。

典型流程: IAP调用会阻止用户界面加载

此图显示了当IAP调用阻止用户界面加载时,从应用启动到应用用户界面加载的步骤。

查看典型流程描述

典型流程描述

  1. 用户单击应用以将其启动。
  2. 加载应用用户界面时会显示黑屏。
  3. 应用开始启动。在onResume() 中,应用在用户界面线程上依次调用getUserData()getPurchaseUpdates()。加载会延迟大约两秒钟。在此期间,用户会继续看到黑屏。
  4. 应用调用RVS并使用返回的收据检查权利状态。
  5. 如果权利状态为有效,则应用向客户授予访问权限。
  6. 应用通过显示启动画面继续加载用户界面。

在这个典型流程中,当进行IAP调用时,客户会看到几秒钟的黑屏,因此觉得应用启动速度很慢。

此图显示了在后台进行IAP调用时,从应用启动到应用用户界面加载的步骤。

查看建议流程描述
  1. 将之前使用过的权利数据缓存或存储在后端至少30天。
  2. 用户单击应用以将其启动。
  3. 应用显示启动画面,并根据缓存数据加载用户界面。应用不会检查来自服务器的权利数据。
  4. 应用在后台进行getUserData()getPurchaseUpdates() 调用。不会阻止加载用户界面。
  5. getUserData()getPurchaseUpdates() 调用返回后,将收据传递给后端服务器,然后后端服务器会调用RVS来确认收据的有效性。
  6. 如果收据有效,则将缓存(或后端)与新数据同步。
  7. 如果需要,请更新或切换用户界面以阻止或取消阻止用户访问内容。

Last updated: 2023年2月2日