Как я могу проверить IAP в Android? - PullRequest
0 голосов
/ 26 июня 2019

Мне трудно найти полную документацию онлайн.Итак, у меня есть БД Cloud Firestore.Один Не Расходуемый, который открывает премиум-версию.Краткое руководство , которое я нашел, рекомендует:

Чтобы проверить информацию о покупке на доверенном сервере, выполните следующие действия:

  • Убедитесь, что устройство-сервер рукопожатия безопасен.

  • Проверьте сигнатуру возвращенных данных и orderId и убедитесь, что orderId является уникальным значением, которое вы ранее не обрабатывали.

  • Убедитесь, что ключ вашего приложения подписал INAPP_PURCHASE_DATA, который вы обрабатываете.
  • Проверьте ответы на покупки, используя ресурс ProductPurchase (для продуктов в приложении) или ресурс SubscriptionPurchase (для подписок) из API разработчика Google Play.Этот шаг особенно полезен, поскольку злоумышленники не могут создавать ложные ответы на ваши запросы на покупку в Play Store.

Какой сервер я использую?Достаточно ли облачного хранилища для завершения этой проверки?

Как мне Проверить, что ключ вашего приложения подписал INAPP_PURCHASE_DATA, который вы обрабатываете

Нужно ли мне читать каждый идентификатор заказа каждый раз, когда пользователь совершает покупку?Разве это не может очень быстро привести к тысячам операций чтения в БД?

Вот кодовый блок onPurchasesUpdated, в котором я собираюсь реализовать проверку:

 @Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
    if (billingResult.getResponseCode() == BillingResponseCode.OK
            && purchases != null) {
        int index = 0;
        for (Purchase purchase : purchases) {
            if(purchase.getSignature().equals( /*Somehow check igned the INAPP_PURCHASE_DATA HERE?*/) || purchase.getOrderId().equals(purchases.get(index).getOrderId())) {
                //Invalid
                getMessage("Invalid. Order cancelled");
                return;
            } else {

                handlePurchase(purchase);
            }

        }
    } else if (billingResult.getResponseCode() == BillingResponseCode.USER_CANCELED) {
        getMessage("Payment Cancelled");
    } else {
        getMessage("Error. Try Again");
    }
}

Какие шаги мне следует предпринять?Что вы делаете для проверки IAP?Почему столовая очень плоха в этом.

Стоит ли даже усилий?Я не ожидаю, что это приложение будет скачано миллионы раз.Должен ли я просто пропустить это?

1 Ответ

0 голосов
/ 27 июня 2019

Вы можете использовать облачную функцию Firebase для подтверждения получения.Вы бы настроили функцию , запускаемую по протоколу HTTP , чтобы передать токен покупки и вернуть его, если токен действителен или нет.

Вам не нужно для хранения чего-либо в вашей базе данных (хотя вы можете захотеть).Проверка квитанции может быть выполнена в функции - и есть несколько хорошо документированных примеров с открытым исходным кодом этого онлайн.

Стоит ли усилий?Это зависит от того, сколько времени вы хотите инвестировать, и считаете ли вы, что стоимость пользователей с «фальшивыми» токенами покупки перевешивает эти инвестиции.

Другой альтернативой является использование размещенного решения для сервера покупок в приложении.например, RevenueCat (Отказ от ответственности: я там работаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...