Ошибка проверки подписи - покупка Android-приложений

Я реализовал в приложении биллинг в приложении для Android и, хотя он работает нормально с константами тестирования, он ломается на реальных продуктах.

Я загрузил приложение в качестве проекта в Google Play, создал и опубликовал продукты, установил то же самое приложение на устройстве (включая правый base64EncodedPublicKey) и использовал правильную тестовую учетную запись (основная учетная запись на устройстве и одна я установил свою учетную запись разработчика)

Поток - это то, что я попадаю в Google Play Activity, где я могу видеть продукт и его детали, я нажимаю на покупку, вводя пароль учетной записи теста, он выходит из операции, получает поздравительное сообщение и

Ошибка проверки подписи для продукта (ответ: -1003: покупка проверка подписи не удалась)

Товар фактически куплен (он отображается в Google Checkout и на втором покуривании, он говорит: "Товар уже принадлежит" ). Также я использовал только код примера TriviaDrive от Google.

Любые предложения очень полезны. Спасибо!

Ответы

Ответ 1

В документации по биллингам приложений есть раздел Инициировать подключение к Google Play.

Он сообщает вам, что вам понадобится открытый ключ с кодировкой base64 для создания экземпляра вашего IabHelper. Вы можете получить этот код из консоли разработчика Google Play. Войдите в консоль, щелкните приложения и перейдите на вкладку "Службы и API".

IabHelper mHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
   // ...
   String base64EncodedPublicKey;

   // compute your public key and store it in base64EncodedPublicKey
   mHelper = new IabHelper(this, base64EncodedPublicKey);
}

Пожалуйста, ознакомьтесь с рекомендациями по безопасности, приведенными в документации:

Рекомендация по безопасности. Настоятельно рекомендуется, чтобы вы не hard-code точное значение строки ключа публичного лицензионного ключа, как указано в Гугл игры. Вместо этого вы можете создать весь открытый лицензионный ключ строку во время выполнения из подстрок или получить ее из зашифрованного прежде чем передать его конструктору. Этот подход делает это более трудным для злонамеренных третьих сторон изменять общественность лицензионную ключевую строку в вашем файле APK.

Ответ 2

Другая причина, по которой эта ошибка может появиться в v3 IAB, заключается в том, что вы покупаете продукт (скажем, подписку) на одном устройстве, а информация о покупке не делает его полностью в кеше приложения Play Store на другом устройстве.

У меня был страшный период, когда после покупки подписки на телефоне Kitkat другой телефон (пряничный) получал эту ошибку -1003. Я проследил его до того, что метод getpurchases() возвращал ТОЛЬКО INAPP_PURCHASE_ITEM_LIST с (правильными) списками покупок. INAPP_PURCHASE_DATA_LIST и INAPP_DATA_SIGNATURE_LIST были возвращены как null. (Это было несмотря на то, что я мог видеть подписку в приложении Play.)

Подпись была нулевой, поэтому, конечно, она получила ошибку проверки подписи. После того, как он сильно поцарапал голову, и почему он не работал, он внезапно работал без меня. Я предполагаю, что приложение Google Services/Play, наконец, сбросило кеш и обновило его.

Учитывая это, я думаю, что решение может состоять в том, чтобы просто отключить эту ошибку до тех пор, пока полная информация о покупке не распространится на Play Services.... w/iabhelper это было что-то вроде:

if (result.getResponse() != IabHelper.IABHELPER_VERIFICATION_FAILED)
                    complain("Failed to query inventory: " + result);
Log.d(TAG, "Query inventory was NOT successful.");

Это кажется довольно большой ошибкой - Play Store должен подождать, пока он не узнает все о покупке, прежде чем передавать ее в приложение, я думаю. Я не знаю, проявляется ли эта проблема в других областях потока покупок, но там вы идете.

Ответ 3

У меня была эта проблема с моими подписками, потому что я не задал "itemType"

 mHelper.launchPurchaseFlow(this,
            SKU_INFINITE_GAS, IabHelper.ITEM_TYPE_SUBS,
            RC_REQUEST, mPurchaseFinishedListener, payload);

Ответ 4

1 > Ошибка проверки подписи для продукта (ответ: -1003: Ошибка подтверждения подписи подписки)

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

2 > "Предмет, уже принадлежащий" Когда мы получим ответ OK от Google для покупки в приложении, нам нужно использовать продукт in-app уведомить его о покупке и доставке. Но если каким-то образом, если ваши сбои или вы забыли его использовать, Google не позволит покупать его снова, пока вы его не уничтожаете. В вашем сценарии приложение сбросило ошибку проверки подписи.. это причина второй проблемы

Надеемся на эту помощь

Ответ 5

Обязательно закрепите в UTF8 файл ключом