我无法弄清楚当应用程序未运行时,应用程序内的结算过程应如何适用于广播事件。我有一个托管产品设置,据我所知,运行良好。使用测试帐户,我可以购买我发布的组件,我的测试应用程序会处理它,保留其状态。然后我通过我的商家帐户取消此订单,然后应用程序再次接收该事件并删除该项目。
当应用程序处于活动状态时,而不是取消订单时会出现问题。我退出它(不是在家里,有多个后退按钮)。如果我现在取消该项目,我的'设备'会收到通知'购买失败',但是当我启动我的应用程序时似乎没有发生任何事情,因此仍然购买该项目的状态。
我不确定结算服务是否仍在运行。鉴于documentation说我的应用程序必须发回一个CONFIRM_NOTIFICATIONS或它继续发送它我只能假设它。但是,如果应用程序处于活动状态,为什么它无法与我的数据库进行交互并删除正确的项目?
我希望这一点很清楚,如果之前已经讨论过,我会道歉,我在搜索中找不到任何内容。
答案 0 :(得分:1)
对于回答我自己的问题表示歉意,但希望我的调查结果可以帮助那些像我一样感到困惑的其他人。
我的问题是认为示例中提供的Dungeons.java类具有修改所需的所有代码。示例设计将其数据库实现嵌套在用户与商店交互时处于活动状态的观察者类中。在我的问题中概述了它为我创建的问题,如果在未注册此观察者或应用程序未运行的事实之后取消事务会发生什么。
从试验和错误中我的解决方案是将数据库交互从观察者中取出并放入
private void purchaseStateChanged(int startId, String signedData, String signature) {
BillingService类的。
放置在这里,当我的广播接收器触发时,我会取消并相应地更新我的数据库,无论我的应用程序是否已经启动,而不是我的观察者注册。