Биллинг в приложении не работает на G1

#android #in-app-purchase

#Android #покупка в приложении

Вопрос:

Я внедрил биллинг в приложении в моем приложении для Android. Он отлично работает на моем собственном устройстве с Android версии 2.2 и Market версии 2.3.4. Но он не работает на тестовом устройстве T-Mobile G1 с Android 1.6 и Market версии 1002211 (странная версия .. но у нее есть разрешение на выставление счетов в приложении). Выдается исключение:

 ERROR/Bundle(2079): readBundle: bad magic number
ERROR/Bundle(2079): readBundle: trace = java.lang.RuntimeException
        at android.os.Bundle.readFromParcelInner(Bundle.java:1473)
        at android.os.Bundle.<init>(Bundle.java:82)
        at android.os.Parcel.readBundle(Parcel.java:1344)
        at android.os.Parcel.readBundle(Parcel.java:1329)
        at android.os.Bundle$1.createFromParcel(Bundle.java:1410)
        at android.os.Bundle$1.createFromParcel(Bundle.java:1413)
        at com.android.vending.billing.IMarketBillingService$Stub$Proxy.sendBillingRequest(IMarketBillingService.java:102)
        at MyAppPackages.BillingService$RestoreTransactions.run(BillingService.java:310)
        at MyAppPackages.BillingService$BillingRequest.runIfConnected(BillingService.java:118)
        at MyAppPackages.BillingService$BillingRequest.runRequest(BillingService.java:97)
        at MyAppPackages.BillingService.restoreTransactions(BillingService.java:428)
        at MyAppPackages.BillingActivity.restoreDatabase(BillingActivity.java:193)
        at MyAppPackages.BillingActivity.access$000(BillingActivity.java:45)
        at MyAppPackages.BillingActivity$PurchaseObserver.onBillingSupported(BillingActivity.java:107)
        at MyAppPackages.ResponseHandler.checkBillingSupportedResponse(ResponseHandler.java:83)
        at MyAppPackages.BillingService$CheckBillingSupported.run(BillingService.java:188)
        at MyAppPackages.BillingService$BillingRequest.runIfConnected(BillingService.java:118)
        at MyAppPackages.BillingService.runPendingRequests(BillingService.java:521)
        at MyAppPackages.BillingService.onServiceConnected(BillingService.java:554)
        at android.app.ActivityThread$PackageInfo$ServiceDispatcher.doConnected(ActivityThread.java:1053)
        at android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection.run(ActivityThread.java:1070)
        at android.os.Handler.handleCallback(Handler.java:587)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:123)
        at android.app.ActivityThread.main(ActivityThread.java:4203)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:521)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
        at dalvik.system.NativeStart.main(Native Method)
  

Пожалуйста, помогите мне понять, что происходит.

Ответ №1:

Я столкнулся с такой же проблемой на своем LG P500 с устаревшим рынком сбыта… Проблема заключается в методе run() поддерживаемого CHECKBILLING подкласса Billing-Service.

Он вернет «true», хотя market не поддерживает выставление счетов …

Код ответа выдаст 0, поскольку дополнительное поле BILLING_RESPONSE_RESPONSE_CODE фактически не задано, а вместо этого по умолчанию возвращается к 0; Кстати, RESULT_OK также равен 0.

 int responseCode = response.getInt(Consts.BILLING_RESPONSE_RESPONSE_CODE);
  

Чтобы исправить это, замените вызов на:

 int responseCode = response.getInt(Consts.BILLING_RESPONSE_RESPONSE_CODE, -123);
  

Это устранило мою проблему.