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, тогда все будет работать правильно - я могу отправить платеж и безопасно вернуться к приложению - но я предполагаю, что что-то еще не так, так как я, вероятно, должен изменить это, чтобы вернуться правда.
Любые идеи о том, что может быть причиной этого?
Ответы
Ответ 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% уверенным, что это правильно.