我正在为一些名为 GEMS 的消耗品产品实施应用程序购买。我的应用程序有自己的服务器,可以跟踪用户信息,包括宝石数量。
我担心以下情况:
用户A登录应用程序并购买了一些宝石。应用程序向 App Store 发送交易。应用程序接收交易状态为“已购买”。该应用程序向服务器发送请求以更新数据库中的宝石计数。此时服务器调用失败,用户 A 将不会获得任何宝石,因此无法将交易设置为“已完成”。
此时用户 A 退出,用户 B 登录。由于之前的交易未完成,应用程序在重新启动时将收到此交易,并再次尝试向服务器发送请求以奖励用户购买的宝石。但是现在宝石将通过我的服务器调用错误地授予用户 B 而不是 A。
现在,我如何区分所述交易是用户 A 而不是 B?我必须在应用程序端本地处理吗?即针对用户ID存储唯一的交易标识符?在这种情况下,我将如何区分以前的待处理交易和新交易。
服务器端收据验证是一种解决方案吗?即使这样,收据也不会包含有关提出请求的实际用户应用程序帐户的自定义信息。