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

Как обнаружить и проверить обновление для автоматической возобновляемой подписки?

Итак, у меня есть установка автоматической подписки на обновление для моего приложения с периодом 1 месяц, что равно 5 минут или около того в песочнице. В клиентском приложении я подписываюсь, отправляю квитанцию ​​на свой сервер, он проверяется, и я помещаю запись в свою базу данных, что у этого пользователя есть подписка.

Мой вопрос: как проверить, обновлена ​​ли эта подписка? Я прочитал документы и не могу понять, что мне делать.

Вот где я до сих пор:

  • Исходная квитанция, отправленная на мой сервер, проверяется со статусом 0, отлично. Я также получаю latest_receipt, который я заменяю в своей базе данных самой старой квитанцией.
  • Через 6 минут, когда я пытаюсь проверить latest_receipt, я получаю статус 21006 (expired receipt) и это:
   { receipt: 
       { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
         unique_identifier: '------------',
         original_transaction_id: '----------',
         expires_date: '1376129825000',
         transaction_id: '------------',
         quantity: '1',
         product_id: 'subscription',
         item_id: '--------',
         bid: 'com.--------',
         unique_vendor_identifier: '---------',
         web_order_line_item_id: '---------',
         bvrs: '2.0',
         expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
         purchase_date: '2013-08-10 10:12:05 Etc/GMT',
         purchase_date_ms: '1376129525000',
         expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
         purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
         original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
         original_purchase_date_ms: '1375815484000' },
      latest_expired_receipt_info: 
       { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
         unique_identifier: '-------',
         original_transaction_id: '-',
         expires_date: '1376129825000',
         transaction_id: '-',
         quantity: '1',
         product_id: 'subscription',
         item_id: '-',
         bid: 'com.-',
         unique_vendor_identifier: '--',
         web_order_line_item_id: '-',
         bvrs: '2.0',
         expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
         purchase_date: '2013-08-10 10:12:05 Etc/GMT',
         purchase_date_ms: '1376129525000',
         expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
         purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
         original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
         original_purchase_date_ms: '1375815484000' },
      status: 21006 }

Второй элемент в массиве использовался latest_receipt_info, но теперь он latest_EXPIRED_receipt_info. Вот что говорят документы:

В дополнение к полю receipt_data ответ может также включать два новых поля. Если подписка пользователей активна и обновлено транзакцией, произошедшей после получения вашего сервер, отправленный в App Store, поле latest_receipt содержит base-64 для последнего обновления для этой подписки. Декодированные данные для этой новой квитанции также представлены в latest_EXPIRED_receipt_info поле. Ваш сервер может использовать этот новый квитанция для ведения записи о последнем обновлении.

Итак, если Sub был обновлен с момента последнего проверки моего сервера, декодированный квитанция для обновления должна быть в latest_EXPIRED_receipt_info. В этом объекте expires_date совпадает с исходной квитанцией expires_date.

Что, черт возьми? Я просто хочу проверить, активен ли sub. Может ли кто-нибудь объяснить простыми словами, как мне это сделать?

Спасибо!

4b9b3361

Ответ 1

Мой опыт. Предположим, мы всегда отправляем первоначальную рассылку на сервер Apple.

В любом случае вы получите JSON как минимум с двумя полями: status (без комментариев) и receipt (информация о получении, которую вы отправили).

Кроме того:

1) Если подписка по-прежнему активна, вы также получите latest_receipt (строка с кодировкой base64) и latest_receipt_info (информация об этой квитанции).

2) Если подписка уже истекла, вы также получите latest_expired_receipt_info (информация о последнем обновлении квитанции). Да, вы получаете только информацию об этом, без base64-кодированной строки.

И да, AFAIK, что нигде не задокументировано. Надеюсь, что это поможет.