Подтвердить что ты не робот

Android In-App Billing: Security.java говорит: "Подтверждение подписи завершено"

Я внедрил тестовое приложение с Android In-App Billing. Я заполнил свой открытый ключ в файле Security.java. Все работает, но когда я отправляю платеж, приложение падает. Я получаю сообщение об ошибке в LogCat, в котором говорится: "Ошибка подтверждения подписи", которая соответствует этому биту кода:

if (!sig.verify(Base64.decode(signature))) {
                Log.e(TAG, "Signature verification failed.");
                return false;
}

Если я изменил этот бит, чтобы вернуть true вместо return false, тогда все будет работать правильно - я могу отправить платеж и безопасно вернуться к приложению - но я предполагаю, что что-то еще не так, так как я, вероятно, должен изменить это, чтобы вернуться правда.

Любые идеи о том, что может быть причиной этого?

4b9b3361

Ответ 1

Эта ошибка проверки подписи может быть вызвана:

1.- Неверный открытый ключ. Возможно, вы забыли скопировать какого-то персонажа. Это происходит:)

2.- .apk должен быть подписан. Вы не можете использовать debug.keystore, если ваша строка подписи будет пустой.

И помните, для тестирования биллинга In-app:

  • Добавить открытый ключ для Android Market в Security.java(String base64EncodedPublicKey = "your public key here")

  • Создайте режим выпуска и подпишите его (если вы используете Eclipse, вы можете использовать Мастер экспорта).

  • Загрузите версию выпуска в Android Market, не публикуйте ее и не создайте список продуктов.

  • Установите приложение на свое устройство (adb -d install myapp.apk) и сделайте тестовую учетную запись первичной на своем устройстве.

Ответ 2

В моем случае была хорошо скрытая проблема.

Когда я впервые установил биллинг в приложении, я попробовал статические ответы и купил файл android.test.purchased. Когда я переключился на производственные элементы и попытался запросить инвентарь, этот поддельный продукт вызвал все мои проблемы.

Итак, в этом случае решение заключалось в том, чтобы удалить поддельный продукт из моего предмета.

Просто добавьте в файл IABHelper.java этот фрагмент:

                Purchase p = new Purchase(itemType, purchaseData, signature);
                try {
                    consume(p);
                } catch (IabException e) {
                    e.printStackTrace();
                }

в инструкции else метода, имеющего эту подпись:

int queryPurchases(Inventory inv, String itemType) throws JSONException, RemoteException

Как только вы очистите свои собственные предметы, вернитесь к исходному файлу вспомогательного java. Конечно, это только для фазы развития.

Ответ 3

В моем случае я вставил неправильный открытый ключ, который имеет тот же префикс и суффикс. Просто сделайте 100% уверенным, что это правильно.