Проблема с биллингом в приложении

Я разрабатываю модуль биллинга в приложении. Но все еще есть некоторые проблемы.

1) Я реализовал библиотеку проверки лицензий (LVL). Все сделано как образец приложения и успешно протестировано. Но я получил сообщение об ошибке: «Разрешение CHECK_LICENSE не разрешено для бесплатного приложения». при загрузке приложения в маркет. Я подумал, что мне нужно внедрить LVL, потому что это связано с проблемой безопасности биллинга в приложении. Но кажется, что LVL только для платного приложения. Мое приложение бесплатное и включает биллинг в модуль приложения. Когда это будет доступно для бесплатного приложения?

2) Я внедрил модуль выставления счетов в приложении, как показано ниже, когда платеж успешно обработан (будет вызывать метод PurchaseInApp()):

private class MyAppPurchaseObserver extends PurchaseObserver {

   public MyAppPurchaseObserver(Handler handler) {
        super(MyAppPurchaseObserver.this, handler);
    }

    @Override
    public void onBillingSupported(boolean supported) {
        //Doing something
    }

    @Override
    public void onPurchaseStateChange(PurchaseState purchaseState, String itemId,
            int quantity, long purchaseTime, String developerPayload) {

        if(purchaseState == PurchaseState.PURCHASED) {
            purchasedInApp();
        }
    }

    @Override
    public void onRequestPurchaseResponse(RequestPurchase request,
            ResponseCode responseCode) {

        if (responseCode == ResponseCode.RESULT_OK) {
           //OK
        } else if (responseCode == ResponseCode.RESULT_USER_CANCELED) {
           //Canceled
        } else if(responseCode == ResponseCode.RESULT_BILLING_UNAVAILABLE ||
            responseCode == ResponseCode.RESULT_ITEM_UNAVAILABLE ||
            responseCode == ResponseCode.RESULT_SERVICE_UNAVAILABLE ||
            responseCode == ResponseCode.RESULT_DEVELOPER_ERROR) {
            //Error
        } else {
            //Fail
        }
    }

    @Override
    public void onRestoreTransactionsResponse(RestoreTransactions request,
            ResponseCode responseCode) {
        if (responseCode == ResponseCode.RESULT_OK) {
            //OK
        } else {
            //Error
        }
    }
}

Выше реализованные методы вызываются в основном потоке? Или это отдельная нить?

Заранее спасибо.


person Ferdinand    schedule 18.05.2011    source источник


Ответы (1)


Насколько мне известно, LVL и биллинг в приложении не зависят друг от друга. Единственное, что они разделяют, это то, что они используют ваш открытый ключ для проверки. Для выставления счетов в приложении ваше приложение должно быть создано с разрешением com.android.vending.BILLING.

Запросы на выставление счетов отправляются асинхронно в другое приложение на телефоне (Android Market или MyApps, в зависимости от телефона). Я не считаю, что методы выдачи запроса блокируются, поэтому можно запускать их в потоке пользовательского интерфейса или в фоновом потоке. Я не знаю, есть ли ответные обратные вызовы в потоке пользовательского интерфейса, но я сомневаюсь в этом (поскольку они не для LVL).

person Ted Hopp    schedule 18.05.2011
comment
Спасибо за ваш ответ. Я установил разрешение com.android.vending.BILLING и получил квитанцию ​​​​о заказе с рынка Android. Но это не сработало, если (purchaseState == PurchaseState.PURCHASED). Не смог найти причину. Есть ли другой способ кэширования платежа? - person Ferdinand; 18.05.2011
comment
Я не уверен, что вы имеете в виду под оплатой кэшем. Ваше приложение должно координировать множество частей, включая код и манифест. Вы прочитали всю документацию? - person Ted Hopp; 18.05.2011
comment
ой, извини. Я имею в виду поймать. Да. Я сделал все части с этим направлением developer.android.com/guide/market /биллинг/index.html. - person Ferdinand; 18.05.2011
comment
Возможно, вы могли бы уточнить, что именно сработало, а что нет. Существует множество шагов для выставления счетов в приложении, и PurchaseObserver находится в конце цепочки. - person Ted Hopp; 18.05.2011
comment
Google Checkout Merchant работал до тех пор, пока я не получил квитанцию. Но не работал обратный вызов, например if(purchaseState == PurchaseState.PURCHASED). - person Ferdinand; 18.05.2011
comment
После того, как вы получили квитанцию, вы запустили отложенное намерение? (Эта последовательность описана в разделе Последовательность обмена сообщениями в документации. - person Ted Hopp; 18.05.2011
comment
да. Я реализовал класс BillingService. - person Ferdinand; 19.05.2011
comment
Вы нашли ответ, я столкнулся с той же проблемой. Пробовал после прочтения сообщений в StackOverflow копировать все в корень (я полагаю, что он плохо настроил свой манифест), пробовал разные устройства, но почему-то весь метод onpurchasestatechanged не вызывается. Моя карта списана и т.д. но ответа от маркета нет. - person Diego; 02.04.2012