У меня есть приложение macOS с автоматически обновляемой подпиской. Я читаю документы и не могу полностью понять концепцию. Согласно документам я должен добавить и наблюдателя в очередь платежей. Я должен предоставить функцию восстановления, чтобы восстановить покупку, если приложение было переустановлено. Мой наблюдатель прослушивает очередь и получает восстановленные транзакции, как только я вызываю метод SKPaymentQueue.default (). RestoreCompletedTransactions (). Тем не менее, я не могу видеть, истекла ли подписка или нет только с помощью наблюдателя. Объекты транзакций, которые я получаю в очереди платежей, имеют только некоторый абстрактный идентификатор транзакции.
Документы рекомендуют проверить квитанцию. Я отправляю квитанцию в кодировке base64 на свой сервер, который, в свою очередь, отправляет его конечной точке verifyReceipt Даже если я отправлю старую квитанцию, Apple ответит JSON, содержащим latest_receipt_info, где я могу увидеть текущий статус подписки и дату ее истечения. Я могу предположить, что подписка не активна, если дата истечения срока ранее текущей даты.
Вопрос в том, почему мне нужно вызвать метод SKPaymentQueue.default (). RestoreCompletedTransactions (), чтобы восстановить покупку, если я могу обновить sh квитанцию (если она отсутствует) и отправить ее на мой сервер и получить последнюю информацию? Мне кажется, что это избыточно. Поэтому я использую:
- Прослушивание очереди платежей
- Выполните проверку квитанции, как только я получу транзакцию с приобретенным состоянием, и разблокируйте платную функциональность, если я увижу транзакцию с указанным c productId и дата истечения срока позже текущей даты
- Выполните проверку квитанции, когда пользователь нажимает кнопку Восстановить, и разблокируйте платные функции, если я вижу транзакцию с указанным c productId и датой истечения срока позже текущей даты
- Выполнение проверки квитанции при каждом запуске приложения для проверки статуса подписки
- Выполнение проверки квитанции каждые 12 или 24 часа, чтобы отключить платные функции, если приложение не было закрыто, но срок действия подписки уже истек
Я ясно понял концепцию или я что-то здесь упускаю, потому что не вижу преимущества вызова метода SKPaymentQueue.default (). RestoreCompletedTransactions ()?