1

当应用程序未运行时,我无法弄清楚应用内计费流程应该如何处理广播事件。我有一个托管产品设置,据我所知,运行良好。使用测试帐户,我可以购买我发布的组件,我的测试应用程序会处理它,并保留它的状态。然后我通过我的商家帐户取消此订单,应用程序再次收到该事件并删除该项目。

当应用程序处于活动状态而不是取消订单时,就会出现问题。我退出了它(不是用家,有多个后退按钮)。如果我现在取消该项目,我的“设备”会收到“购买失败”通知,但是当我启动我的应用程序时,似乎什么都没有发生,因此该项目的状态仍然是购买的。

我不确定计费服务是否仍在运行。鉴于文档说我的应用程序必须发回一个 CONFIRM_NOTIFICATIONS 或者它继续发送它,我只能假设它是。但是,如果应用程序处于活动状态,为什么它无法与我的数据库交互并像正确那样删除项目?

我希望 tihs 很清楚,如果之前已经讨论过,我很抱歉,我在搜索中找不到任何东西。

4

1 回答 1

1

很抱歉回答我自己的问题,但希望我的发现能帮助那些像我一样困惑的人。

我的问题是认为示例中提供的 Dungeons.java 类具有修改所需的所有代码。示例设计将其数据库实现嵌套在观察者类中,该类在用户与商店交互时处于活动状态。它在我的问题中概述了它为我创建的问题,如果在此观察者未注册或应用程序未运行之后取消事务会发生什么。

通过反复试验,我的解决方案是将数据库交互从观察者中取出并将其放入

private void purchaseStateChanged(int startId, String signedData, String signature) {

BillingService 类的。

放在这里,当我的广播接收器触发时,我会执行取消操作并相应地更新我的数据库,无论我的应用程序是否启动,更不用说我的观察者注册了。

于 2012-12-08T06:24:49.863 回答