В приложении Биллинг: элемент не найден
Я выполнил шаги для In App billing:
- установлена демо-приложение
- опубликовано в приложении
- не опубликовано само приложение
Хотя Я CAN купить товар, есть любопытное предупреждение "товар не найден", что я должен уволить, прежде чем я могу перейти к экрану покупки.
и эта ошибка журнала:
E/Volley(1384): [157] BasicNetwork.performRequest: Unexpected response code 500 for https://android.clients.google.com/fdfe/details?doc=subs:com.testorooney.testo:sword_001
5 ответов
это не ошибка на стороне сервера. Ошибка находится в onClick для кнопки покупки в классе подземелий образца приложения.
предоставленный метод имеет ошибку в инструкции if {} else if {}, где он вызывает mBillingService.requestPurchase вызывается дважды, если выбранный элемент не является элементом подписки (mManagedType != Управляемый.ПОДПИСКА.) Таким образом, один и тот же элемент будет запрошен дважды, один раз с типом элемента "inapp" (который является действительным запросом) и сразу после этого с типом элемента "subs" (что неверно и показывает "элемент не найден").
вот код багги:
if (mManagedType != Managed.SUBSCRIPTION &&
!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
} else if (!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) {
// Note: mManagedType == Managed.SUBSCRIPTION
showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
}
чтобы исправить это, добавьте mManagedType == Managed.Подписка на else, если выше.
вот как должна выглядеть функция:
@Override
public void onClick(View v) {
if (v == mBuyButton) {
if (Consts.DEBUG) {
Log.d(TAG, "buying: " + mItemName + " sku: " + mSku);
}
if (mManagedType != Managed.SUBSCRIPTION &&
!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
} else if (mManagedType == Managed.SUBSCRIPTION && !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) {
// Note: mManagedType == Managed.SUBSCRIPTION
showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
}
} else if (v == mEditPayloadButton) {
showPayloadEditDialog();
} else if (v == mEditSubscriptionsButton) {
editSubscriptions();
}
}
У меня такая же ошибка при установке примера dungeons, а также при применении образца кода к моему проекту. Я заметил, что если я пойду в makerequestbundle и изменю API_VERSION на 1, то я могу делать управляемые покупки inapp без этой ошибки.
еще я заметил, что подписки выполняются без этой ошибки, если они оставлены на API_VERSION 2.
им интересно, если это ошибка сервера, как я посмотрел на код и не могу найти проблему. Мой IDs продукта все соответствуя etc.
элемент не найден ошибка возникает, когда ваш идентификатор продукта (в файле apk) не соответствует идентификатору продукта (записанному в списке продуктов в учетной записи market).
и если вы используете " android.тест.купленный " тогда вам не нужно загружать свой apk.
и 1 вещь, которая наиболее важна, вы должны добавить свой "открытый ключ" в свой код. Этот шаг должен использовать ваш пример Android или ваш собственный код приложения.
смотрите эту ссылку для общественности key:
http://developer.android.com/guide/market/billing/billing_integrate.html
я испытал то же самое поведение. Многие посты, которые я прочитал, говорилось, что это просто ошибка на стороне сервера и вы ничего не можете с этим поделать.
тем не менее, я решил получить более старую копию InApp Billing sample code
от моего друга, и теперь я больше не испытываю item not found error
перед отображением экрана покупки.
Это заставляет меня полагать, что что-то не так с тем, как собирается запрос сервера в более последней копии InApp Billing sample code
.
у меня не было возможности проанализировать различия между старым образцом кода и новым образцом кода.
но все, что я могу сказать вам, это то, что если вы можете получить более старую копию образца кода, то вы больше не будете испытывать проблемы у вас есть.
к сожалению, похоже, что если вы измените API на 1, подписки будут отключены. Таким образом, это фактически избавляет от ошибки "элемент не найден", но делает подписки нефункциональными (они должны быть доступны только в API 2).
Итак, вернемся к чертежной доске. Я собираюсь выполнить рефакторинг кода, чтобы вернуться к API 1, для некурящих, подписка на запросы и API 2 для всех остальных. Кажется, несколько элегантное решение.