Восстановление покупки против подтверждения получения - PullRequest
0 голосов
/ 13 января 2020

У меня есть приложение macOS с автоматически обновляемой подпиской. Я читаю документы и не могу полностью понять концепцию. Согласно документам я должен добавить и наблюдателя в очередь платежей. Я должен предоставить функцию восстановления, чтобы восстановить покупку, если приложение было переустановлено. Мой наблюдатель прослушивает очередь и получает восстановленные транзакции, как только я вызываю метод SKPaymentQueue.default (). RestoreCompletedTransactions (). Тем не менее, я не могу видеть, истекла ли подписка или нет только с помощью наблюдателя. Объекты транзакций, которые я получаю в очереди платежей, имеют только некоторый абстрактный идентификатор транзакции.

Документы рекомендуют проверить квитанцию. Я отправляю квитанцию ​​в кодировке base64 на свой сервер, который, в свою очередь, отправляет его конечной точке verifyReceipt Даже если я отправлю старую квитанцию, Apple ответит JSON, содержащим latest_receipt_info, где я могу увидеть текущий статус подписки и дату ее истечения. Я могу предположить, что подписка не активна, если дата истечения срока ранее текущей даты.

Вопрос в том, почему мне нужно вызвать метод SKPaymentQueue.default (). RestoreCompletedTransactions (), чтобы восстановить покупку, если я могу обновить sh квитанцию ​​(если она отсутствует) и отправить ее на мой сервер и получить последнюю информацию? Мне кажется, что это избыточно. Поэтому я использую:

  • Прослушивание очереди платежей
  • Выполните проверку квитанции, как только я получу транзакцию с приобретенным состоянием, и разблокируйте платную функциональность, если я увижу транзакцию с указанным c productId и дата истечения срока позже текущей даты
  • Выполните проверку квитанции, когда пользователь нажимает кнопку Восстановить, и разблокируйте платные функции, если я вижу транзакцию с указанным c productId и датой истечения срока позже текущей даты
  • Выполнение проверки квитанции при каждом запуске приложения для проверки статуса подписки
  • Выполнение проверки квитанции каждые 12 или 24 часа, чтобы отключить платные функции, если приложение не было закрыто, но срок действия подписки уже истек

Я ясно понял концепцию или я что-то здесь упускаю, потому что не вижу преимущества вызова метода SKPaymentQueue.default (). RestoreCompletedTransactions ()?

1 Ответ

1 голос
/ 13 января 2020

Ваше понимание верно. Метод restoreCompletedTransactions() избавит вас от необходимости выполнять проверку квитанции при каждом запуске приложения, что может в конечном итоге стать дорогим, и делать это только в том случае, если пользователь явно запускает его. Также во время получения квитанции sh бывают случаи, когда пользователю может быть предложено ввести свой логин Apple, что может вызвать затруднения, если это инициируется программно.

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

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