2013-03-14 2 views
15

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

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

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

Подтверждение подписи не выполнено для продукт (ответ: -1003: Покупка проверка подписи не удалось)

Товар фактически куплен (он появляется на Google Checkout и на 2-ой покупки atempt он говорит: «Пункт уже владеет»). Также я использовал только код примера TriviaDrive от Google.

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

+4

Похоже, ваш base64EncodedPublicKey не так? Triple check it – Rawkode

+3

Сообщение означает, что Google подписал информацию о покупке с ключом, который каким-то образом отличается от ключа, который вы используете в своем приложении. Я бы дважды проверил, что ключ правильный, исправлен и правильно введен в подтверждение подписи. Поскольку все остальное идет хорошо, это, по-видимому, единственно возможная причина проблемы. –

+5

Я не думаю, что любой из этих комментариев затрагивает проблему. Я получаю точно такую ​​же ошибку, и я уверен, что включаю в себя правильный открытый ключ в своей кодовой базе. Кроме того, я не думаю, что это может быть ключевой проблемой, потому что setupBilling и начальная часть работы по закупке (для этого нужно хороший ключ). Единственное, что я могу придумать, - это что-то общее с тестовой средой. Однако бетон не ведет. –

ответ

0

1> Проверка подписи Сбой продукта (ответ: -1003: Покупка проверка подписи не удалось)

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

2> «Товар уже принадлежит» Когда мы получим ответ OK от Google для покупки в приложении, нам необходимо использовать продукт in-app , чтобы уведомить его о покупке и доставке. Но если так или иначе, если ваши сбои или вы забыли его использовать, Google не разрешит его покупать до тех пор, пока вы его не испортите. В приложении сценария кинул проверка подписи не удалась ошибка ..thats причину второго выпуска

Надежда, что это поможет

4

В документации Billing В App есть раздел под названием Initiate your connection to Google Play.

Сообщается, что для создания вашего IabHelper вам понадобится открытый ключ с кодировкой base64. Вы можете получить этот код из консоли разработчика 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); 
} 

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

Рекомендация

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

2

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

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

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

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

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

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

0

Убедитесь, что для кодирования в UTF8 файл с ключом

1

Я имел эту проблему с моими подписками, потому что я не установить «ItemType»

mHelper.launchPurchaseFlow(this, 
      SKU_INFINITE_GAS, IabHelper.ITEM_TYPE_SUBS, 
      RC_REQUEST, mPurchaseFinishedListener, payload); 
Смежные вопросы