Подтвердить что ты не робот

Android In App Subscription всегда возвращает начальную квитанцию, я никогда не получаю обновление

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

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

Но вот здесь начинается моя проблема. Я всегда получаю оригинальную квитанцию ​​с оригинальными purchaseTime и purchaseToken. Всякий раз, когда приложение запускается, я звоню queryInventoryAsync, и я ожидаю получить последнюю квитанцию ​​о продлении. Но я всегда получаю ОРИГИНАЛЬНУЮ квитанцию.

Я не ошибаюсь? Разве я не должен получать обновленную квитанцию ​​с новым orderID? (как говорят google docs, я должен получить orderID как GPA.blabla..0|1|2. Я знаю, что есть некоторые механизмы кэширования, но я ждал три дня, и я все еще получаю первоначальный заказ, в то время как я должен получать последние один.

Я всегда использую кордову с пешеходным переходом, и я использую следующий плагин для покупок: https://github.com/j3k0/cordova-plugin-purchase. Я не знаю, имеет ли значение это, не должно, поскольку он использует тот же класс IABHelper, который используется каждым другим плагином, но, может быть, это что-то не так с их кодом?

Я записал точный ответ, полученный от вызова, на mService.getPurchases(3, mContext.getPackageName(), itemType, continueToken); и содержит неправильные данные (оригинальная квитанция). Зачем?: (

У кого-то еще была аналогичная проблема? Это из-за проверки подписки? Будет ли это работать при покупке? Я уже начал тестировать реальные деньги, но потребуется неделя, пока подписка не возобновится.

Большое вам спасибо.

Изменить. Очистка кеша из приложения Google Play Store не является вариантом. Я не могу попросить моих пользователей сделать это. Кроме того, я проверил это, и он не работает!

Изменить 2 Производственная подписка (реальные деньги, без тестирования) тоже не работает!. Все еще получаю оригинальную квитанцию!

Изменить 3 Я еще не решил эту проблему. Каким будет правильный способ обнаружения обновлений? Должен ли я запускать cronjob на бэкэнд и запрашивать каждую подписку на Google App Status API?

Изменить 4 Спасибо за ответы. Я уже использую API статуса покупки на сервере, чтобы определить, была ли продлена подписка или нет. Но это отвратительно, потому что, если я получу 100 000 подписчиков? script, который проходит через все из них и запрашивает API Google, займет очень много времени... и script должен работать ежедневно!

Но давайте разобраться.

Означает ли это, что официальная документация устарела?.

Восстановлены ли стили стилей GPA.blabla..0 GPA.blabla..1?

Изменить обновление 5 декабря 2016 года: Я работаю под подпиской на производстве уже пару месяцев, и я все еще НЕ получаю продления с помощью..0,..1. Я сделал настройку cronjob, которая работает ежедневно. Он проходит через мои активные подписки и запрашивает их у Google Purchase API. Если API возвращает другую дату истечения срока действия, чем тот, который был сохранен в моей базе данных, это означает, что подписка возобновилась.

Изменить обновление 6 июля 2017 года  Я все еще полагаюсь на свой ежедневный script, который анализирует все подписки и обновляет их статус, запрашивая Google с помощью API закупок https://developers.google.com/android-publisher/api-ref/purchases/subscriptions. До сих пор он отлично работал.

Быстрый совет: заказывайте подписки партиями! Я сделал несколько тестов, и я смог собрать до 1000 подписчиков в одном запросе. Предел определяется максимальным размером ответа API.

4b9b3361

Ответ 1

Оригинальная квитанция Google Play - это то, что вы используете для запроса API Google Play для получения информации о подписке. Apple IAP работает очень похоже. Для этих механизмов покупки в приложении вы используете подписку на подписку от квитанции для запроса API Google/Apple API для определения срока действия подписки.

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

Это API, который вас заинтересует:

GET  /{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}
      Checks whether a user subscription purchase is valid and returns its expiry time.

Общий поток для проверки покупки в приложении:

  • Подтвердить получение с помощью Google/Apple
  • Запрос данных о покупке из Google/Apple на основе идентификатора подписки

Вам не следует доверять данные, возвращенные в квитанции на устройстве, а также данные, возвращенные из удаленного API Apple/Google.

Еще одна дискуссия по StackOverflow по этой теме: Android: проверка подтверждения покупки вApp Google google

Ответ 2

Вы получите маркер покупки начального платежа. Из этого токена покупки вы должны запросить API Google Play за подписной токен, так как подписка на покупку приложения автоматически обновляется. Так что запрос API Google Play - единственный способ получить статус Подписка в приложении