Android 谷歌播放的应用内付费广播顺序不正确?(静态测试)

Android 谷歌播放的应用内付费广播顺序不正确?(静态测试),android,in-app-billing,Android,In App Billing,应用内计费的Android文档似乎在以下问题上非常清楚。在REQUEST\u PURCHASE之后,您显示带有待定意图的签出(很好,没有问题),然后用户与签出交互并点击购买按钮(在本例中,我使用的是静态产品idandroid.test.purchased) 现在,我的广播接收器应该会收到响应\u code和,然后在应用程序中收到。但事实并非如此。有时我会先得到回复,但通常是在收到通知后才得到回复 下面引用的Android文档部分的第二个重点部分是为什么这是一个问题。如果我在收到采购请求的异步响应

应用内计费的Android文档似乎在以下问题上非常清楚。在
REQUEST\u PURCHASE
之后,您显示带有待定意图的签出(很好,没有问题),然后用户与签出交互并点击购买按钮(在本例中,我使用的是静态产品id
android.test.purchased

现在,我的广播接收器应该会收到
响应\u code
,然后在应用程序中收到
。但事实并非如此。有时我会先得到回复,但通常是在收到通知后才得到回复

下面引用的Android文档部分的第二个重点部分是为什么这是一个问题。如果我在收到采购请求的异步响应时将应用程序中的状态更新为挂起(文档似乎表明我应该这样做),那么如果该响应在通知之后出现,我的应用程序将陷入挂起状态。它是否应该说“当您收到来自即时syncronus响应的结果\u ok”

这是Goole Play的bug吗(我手机上的GooglePlay版本是3.5.15,Android操作系统版本是2.2)?我是不是误解了医生?这些文件完全错了吗?这是静态测试产品的问题吗?还有什么事情可能出了问题吗?请注意,在我这方面,所有内容都在UI线程中运行,因此这不是线程问题

典型非工作运行的日志输出显示在底部

Android文档的相关部分(重点):

处理广播意图

请求\u购买请求也会触发两个异步响应 (广播意图)首先,Google Play应用程序发送 响应\u编码广播意图,提供有关 请求。如果请求未生成错误,则 响应\u代码广播意图返回结果\u OK,表示 请求已成功发送。(明确地说,是一个结果\u OK响应 并不表示请求的购买已成功;而是 表示请求已成功发送到Google Play。)

接下来,当请求的事务更改状态时(例如 购买成功记入信用卡或用户取消 购买后,Google Play应用程序会发送一个IN_APP_NOTIFY 广播意图。此消息包含一个通知ID,您可以 可用于检索购买请求的交易详细信息 请求

注意:Google Play应用程序还发送一个IN_应用程序通知 退款。有关更多信息,请参阅应用程序通知消息中的处理

因为购买过程不是即时的,可能需要几个小时 秒(或更长),您必须假定采购请求处于挂起状态 从您收到结果确认信息到您收到 在应用程序中通知交易的消息。而交易是 挂起,Google Play签出UI显示“授权” 购买……”通知;然而,该通知被驳回 60秒后,您不应将此通知视为您的 向用户传达交易状态的主要方式。相反,我们 建议您执行以下操作:

从我的日志中可以看出,事情没有按预期顺序进行:

MAKING REQUEST: PurchaseRequest
EXECUTING REQUEST: PurchaseRequest
IMEDIATE RESPONSE IN: PurchaseRequest, IS RESULT_OK
REQUEST ID: 1814990809059790249, PurchaseRequest
Receiver: Notify
Notify String in IN_APP_NOTIFY intent: android.test.purchased
PROCESSING NOTIFICATION
MAKING REQUEST: PurchaseInformationRequest
EXECUTING REQUEST: PurchaseInformationRequest
IMEDIATE RESPONSE IN: PurchaseInformationRequest, IS RESULT_OK
REQUEST ID: 602248989635492868, PurchaseInformationRequest
Receiver: purchase state changed
PROCESSING PURCHASE_STATE_CHANGE
newestMarketPurchaseState = PURCHASED
SetState on product 'Enterprise'. Message: PURCHASED
MAKING REQUEST: ConfirmNotificationsRequest
EXECUTING REQUEST: ConfirmNotificationsRequest
IMEDIATE RESPONSE IN: ConfirmNotificationsRequest, IS RESULT_OK
REQUEST ID: 693394902887436727, ConfirmNotificationsRequest
Receiver: Response Code = RESULT_OK
Receiver: Response Code requestId = 602248989635492868
PROCESSING RESPONSE
ASYNCH RESPONSE IN: PurchaseInformationRequest, IS RESULT_OK
Receiver: Response Code = RESULT_OK
Receiver: Response Code requestId = 1814990809059790249
PROCESSING RESPONSE
ASYNCH RESPONSE IN: PurchaseRequest, IS RESULT_OK
SetState on product 'Enterprise'. Message: PURCHASE PENDING
Receiver: Response Code = RESULT_OK
Receiver: Response Code requestId = 693394902887436727
PROCESSING RESPONSE
ASYNCH RESPONSE IN: ConfirmNotificationsRequest, IS RESULT_OK
Confirm Notifications Request returned asynch OK

我也遇到过同样的问题。根据问题中的答案,没有绝对保证意向会按发送顺序接收。通常是这样,但不一定。所以即使Google Play的订单正确,他们仍然可以以其他顺序到达


在我看来,唯一的解决办法是不要假设响应代码到达的时间。在这方面,Android文档在我看来确实是错的。响应代码应该通过回调实现,而不是作为广播实现。我不得不承认,谷歌有时会变得相当粗心。

erg。考虑到账单文件中其他错误的数量,这就是我所想的。很高兴我不是唯一一个发现这样问题的人。