2012-01-05 51 views
1

我已经在Android Marketplace上有一个应用程序,可以在几个月内购买应用程序内功能。我们的第一个问题是成功完成非托管购买并被收费的用户,但无论出于何种原因,我的客户端应用程序未将其记录到我们的服务器中。这不会在100%的时间内发生,大多数购买都会成功执行,并且如果由于连接问题或其他原因无法将成功购买的服务器上传到服务器,我们的重试逻辑非常积极。应用程序内购买非托管项目,购买状态更改通知之间的实质性延迟

最近我们目睹了一个应用程序内购买非托管项目的情况,但onRequestPurchaseResponse方法(在示例代码PurchaseObserver.java中定义,我们的代码基于该方法)实际上并没有被调用超过60秒。

我现在怀疑的是,在成功购买没有上传到我们的服务器的情况下,onRequestPurchaseResponse要么永远不会被调用,要么在通知发生之前用户退出应用程序,因为它太延迟了。

我现在每次在用户从Android Marketplace应用程序返回后调用onResume时都会显示一个ProgressDialog,以防止用户导航过快,从而阻止我们记录购买。

任何人都可以告诉我,成功购买后是否有任何已知的错误涉及Android Marketplace应用程序的延迟或丢失通知,如果有,您已部署了哪些解决方法?

+1

我和你有同样的问题,只是来到这篇文章:http://thenextweb.com/mobile/2012/01/05/notable-developer-koush-warns-users-and-devs-反对-androids-in-app-purchases/ – Emiam 2012-01-10 16:23:35

+0

谢谢!那篇文章明确描述了我们所看到的 – esilver 2012-01-10 16:35:20

+1

嗨,我是那篇文章中引用的开发人员。对于它的价值,我认为非托管购买比管理购买(我使用的)更可靠。我怀疑你的问题可能只是你的一个错误的实现。根据google的说,这些bug在12月22日也是固定的。自那以后,我还没有经历过任何新的事件。 – koush 2012-01-10 16:38:15

回答

2

延迟不是一个错误。交易处理系统不是实时的,实际上没有公开API的交易处理系统为处理交易或将成功购买报告给商家所花费的时间量提供了坚实的保证。

但是,我不知道我看到了这个问题。只要用户最终再次运行该应用程序,您的应用程序应该在某个时间点收到回叫通知。当然,假设Google排队购买通知,直到它确信它们已经交付至少一次。我会认为他们会。

在任何情况下,我认为你有两个选择:

  1. 实现你的客户始终假定收购成功,除非/直到听到,否则。然后,不需要应用程序告诉服务器什么时候发生购买,您只需要它告诉服务器什么时候您认为发生的购买没有。这种方法与目前的方法有相同的延迟问题,但副作用不会对用户造成不利影响。

  2. 只是等待最终的通知回调,然后发送它。除了锁定整个应用程序以避免用户导航外,只需显示他们的购买状态为“等待来自Google的确认”,直到获得回叫(取决于用户的操作,可能会发生几分钟,实际购买后几小时或几天)。然后将信息发送到您的服务器,并在发送到服务器成功时更新应用程序中的购买状态。

+0

同意延迟不是一个错误;那就是说,延迟应该出现在Android Marketplace应用程序本身中,而不是在Android Marketplace应用程序和我的客户端应用程序之间进行通信。不幸的是,我的应用程序不能假定交易成功,因为服务器验证了交易的签名。从根本上说,体系结构有缺陷 - 事务应该发生在服务器端,而不是客户端,服务器端,客户端和服务器端,但这正是Android Marketplace强制应用程序进入的地方。 – esilver 2012-01-06 01:36:34