我已经在Android手机市场上推出了一款具有应用内信用购买能力的应用程序,已有好几个月了。我们的第一个问题是成功完成非托管购买并收费的用户,但无论出于何种原因,我的客户端应用程序都没有将其记录到我们的服务器上。这种情况不会100%发生,大多数购买都会成功执行,如果由于连接问题或其他原因无法将成功购买的内容上传到服务器,我们会有非常激进的重试逻辑。
最近,我们目睹了一个应用程序内购买非托管项目的情况,但onRequestPurchaseResponse方法(在我们的代码所基于的示例代码PurchaseObserver.java中定义)实际上并没有被调用超过60秒。
我现在怀疑,在这些成功购买没有上传到我们服务器的情况下,onRequestPurchaseResponse要么从未被调用,要么用户在通知发生之前退出应用程序,因为它被推迟了。
我现在每次在用户从Android Marketplace应用程序返回后调用onResume时都会显示ProgressDialog,以防止用户过快导航,从而阻止我们记录购买。
有人可以告诉我,在成功购买后,是否有任何已知的错误涉及Android Marketplace应用中的延迟或缺失通知,如果有,您已部署了哪些变通方法?
答案 0 :(得分:2)
延迟不是错误。事务处理系统不是实时的,并且几乎所有具有公共API的系统都不能为处理交易或将成功购买报告给商家所花费的时间量提供可靠的保证。
但是,我不确定我是否看到了这个问题。您的应用应该在某个时间点收到回叫通知,只要用户最终再次运行它。当然,假设谷歌将其购买通知排队,直到它确信它们至少已经交付一次。我认为他们会这样做。
无论如何,我认为你有几个选择:
实施您的客户,始终假定购买成功,除非/直到听到否则。然后,不需要应用程序告知服务器何时发生购买,您只需要告诉服务器何时您认为发生的购买没有。这种方法与当前方法具有相同的延迟问题,但副作用对用户的影响较小。
只需等待最终的通知回调,然后发送。不要锁定整个应用程序以试图阻止用户离开,只需显示他们的购买状态为“待Google确认”,直到您收到回调(具体取决于用户的操作,可能会在几分钟内发生)实际购买后的,数小时或数天)。然后将信息发送到您的服务器,并在发送到服务器成功时在应用程序中更新购买状态。