Google Play Billing – проверка подписи не удалось для sku android.test.purchased

EDIT: поскольку некоторые люди все еще проверяют этот поток, я хочу упомянуть, что это очень устарело, потому что речь идет о v2 при покупке приложения, который теперь устарел. Пожалуйста, ознакомьтесь с последней (в настоящее время v3) документацией, это довольно просто

В этом вопросе много проблем, и я думаю, что я понимаю проблему, однако, на данный момент я не могу протестировать реальные покупки, так как в настоящее время у меня нет действующей кредитной карты, которую Google принимает, только маэстро, которая Не принимается. Вот почему я прошу о помощи (не проверяйте покупку, но проверяя, что мой мыслительный процесс хорош).

Во-первых, проблема возникает из нового метода verifyPurchase . Новый метод проверяет наличие подписи, что должно быть хорошо. Однако Google не предоставляет никакой подписи для тестовых идентификаторов, таких как android.test.purchased . Это приводит к тому, что метод ниже всегда терпит неудачу, и он всегда возвращает false при проверке, даже если поддельная покупка была завершена, и у меня был диалог подтверждения, что покупка действительно успешна. Метод:

 public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) { //if(BuildConfig.DEBUG) return true; if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) || TextUtils.isEmpty(signature)) { Log.e(TAG, "Purchase verification failed: missing data."); return false; } PublicKey key = Security.generatePublicKey(base64PublicKey); return Security.verify(key, signedData, signature); } 

Проблема возникает из TextUtils.isEmpty() , так как подпись будет пустой, код вернет false. Мое временное, тестовое обходное решение находится в коде, прокомментировано. Если я добавлю if(BuildConfig.DEBUG) return true; В начале метода тестирования все работает нормально, пользователь получает премиальные функции и работает, поэтому проблема действительно связана с подписями.

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

Мои два вопроса:

Если я удалю if(BuildConfig.DEBUG) return true; Line from verifyPurchase , и замените id android.test.purchased на реальный идентификатор реального SKU, который я предлагаю, могу ли я быть уверенным, что все будет правильно работать в моем случае? Повторяю, с добавленной функциональностью отладки все работает нормально. Если вам нужно больше увидеть код, дайте мне знать!

Приведенный ниже метод проверяет, приобрел ли пользователь премиум-функцию, если он / она имеет, то он устанавливает соответствующие настройки, иначе, если что-то идет на юг, оно оставляет все как есть. Правильно ли этот метод? Я делаю это в классе Application , при каждом запуске приложения, чтобы предотвратить возиться.

 private void checkPremium() { //get the helper up and running final IabHelper helper=new IabHelper(INSTANCE, getBase64Key()); helper.startSetup(new IabHelper.OnIabSetupFinishedListener() { @Override public void onIabSetupFinished(IabResult result) { //if the helper is in a correct state, check the inventory if(result.isSuccess()) { helper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() { @Override public void onQueryInventoryFinished(IabResult result, Inventory inv) { //if the inventory is reachable, check if we got the premium if(result.isSuccess()) { setPremium(inv.hasPurchase(ActWidgetSearch.SKU)); } } }); } } }); } 

Заранее спасибо!

Я столкнулся с тем же вопросом, что и вы несколько дней назад. Для тех, кто загружает ваше прямое приложение из Google Play, если тестовый идентификатор («android.test.purchased») работает, как вы сказали, они смогут покупать покупки в приложении. Google play рассматривает его так же, как «реальная покупка», и он проходит через тот же канал, что и ваши личные SKU. Смотри ниже:

Тестирование покупок (песочница для биллинга в приложении)

После авторизации с доступом к тестированию эти пользователи могут загружать ваше приложение и тестировать полный объем мерчандайзинга, покупки и исполнения для ваших продуктов. Тестовые покупки – это настоящие заказы, и Google Play обрабатывает их так же, как и другие заказы. Когда покупки завершены, Google Play не позволяет заказам перейти на финансовую обработку, гарантируя, что фактические сборы с пользователей не будут взиматься, и автоматически отменяет завершенные заказы через 14 дней.

http://developer.android.com/google/play/billing/billing_testing.html#test-purchases

Я только что проверил свои собственные SKU, и могу сказать, что они работают! (Я видел заказ в своей учетной записи Google Merchant). Так что выходите туда и зарабатывайте деньги 🙂

С другой стороны, разработчик для разработчиков … можете ли вы показать мне какие-либо примеры или ссылки на учебные пособия о том, как запустить проверку покупки в классе Application? Я думаю, что это идея, которую я определенно хочу украсть у вас. Ура!

Убедитесь, что вы вошли в систему с нужным пользователем на своем телефоне или, например, добавили учетную запись google своего телефона в качестве тестового пользователя в консоли разработчика.

http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-static :

В некоторых случаях зарезервированные элементы могут возвращать подписанные статические ответы, что позволяет протестировать проверку подписи в вашем приложении. Зарезервированные элементы возвращают только подписанные ответы, если у пользователя, запускающего приложение, есть разработчик или тестовая учетная запись.