Пример кода для функции в приложении:
onPurchaseStateChange(PurchaseState purchaseState, String itemId,
int quantity, long purchaseTime, String developerPayload)
и он приводит информацию о сделанной в приложении покупке (id, сколько и т.д.).
и здесь я могу обновить свой код, но я не получаю никакого ответа в этом методе обратного вызова из службы биллинга. Что неправильно в примере приложения. может ли кто-нибудь помочь?
Спасибо в Advance.
Я не уверен, в чем проблема, и почему иногда @overrided onPurchaseStateChange
в запрашивающей активности не вызывается, но я могу проверить, что onPurchaseStateChange
в BillingReceiver и BillingService всегда вызываются.
По какой-то причине иногда обратный вызов просто не возвращается полностью к вызывающему Activity.
Кстати, эта проблема возникает, когда вы покупаете управляемый продукт или подписку. Если вы покупаете неуправляемый продукт, обратный вызов всегда будет прибывать.
Решение может быть (в запрашивающей операции "Закупка" - "Активность подземелий" в образце приложения):
@Override
public void onPurchaseStateChange(PurchaseState purchaseState, String itemId, int quantity, long purchaseTime, String developerPayload) {
if (purchaseState == PurchaseState.PURCHASED) {
onPurchaseStateChange = true;
// Do whatever you need to do after purchase here first.
}
}
@Override
public void onRequestPurchaseResponse(RequestPurchase request, ResponseCode responseCode) {
if (responseCode == ResponseCode.RESULT_OK) {
if (!onPurchaseStateChange) {
// If onPurchaseStateChange = false, the onPurchaseStateChange callback didn't arrive from the BillingService, so you can perform your after purchase actions here.
}
} else if (responseCode == ResponseCode.RESULT_USER_CANCELED) {
} else {
}
}
Решение №2 (кажется правильным решением): Код примера Google включает этот метод:
@Override
protected void onStop() {
super.onStop();
ResponseHandler.unregister(YOUR_PURCHASE_OBSERVER);
}
Это заставляет наблюдателя быть незарегистрированным вторым, когда вы открываете активность покупки в магазине Play. Когда вы вернетесь к своей деятельности (после покупки или кнопки возврата), вызывается onStart
и повторно запускает purchaseObserver
, но не всегда с информацией о покупке, что приводит к тому, что onPurchaseStateChange
никогда не будет вызываться.
Решение состоит в том, чтобы удалить unregister из onStop и переместить его в onDestroy. Другое решение - оставить его там, но запустить его с очередью, в которой хранятся ранее полученные данные. Смотрите здесь: Android-приложение-биллинг. Когда нужно отменить регистрацию ResponseHandler?