Я успешно выполнил проверку подписки для Google Play, но я изо всех сил пытаюсь понять процесс проверки для iOS автоматически возобновляемых подписок и хотел бы попросить вас о помощи. Вот как выглядит логика высокого уровня c для Google Play:
Новая проверка подписки
- Пользователь покупает подписку в приложении.
- A SubscriptionRequest создается в моей базе данных Firestore, которая включает UserID и токен транзакции.
- Облачная функция обнаруживает, что SubscriptionRequest и запрашивает соответствующий API Google с помощью токена , чтобы получить сведения о подписке. Это делается с помощью googleapis Node.js libary.
- Последние данные о подписке сохраняются в Firestore как Подписка , включая токен (как connectedPurchaseToken) ) и UserID .
- Дата истечения срока подписки оценивается, и, если она не истекла, Пользователь в Firebase обновляется и соответственно установлен флаг hasActiveSubscription (включая идентификатор подписки Google Play, например, month_sub или year_sub и платформу, в данном случае android).
Уведомления Google Play Developer
- Уведомление получено с помощью облачной функции Pub / Sub.
- Соответствующая информация о подписке будет быть извлечены с использованием соответствующего API Google и токена из уведомления.
- Если Подписка с этим токеном (как connectedPurchaseToken ) не существует в база данных, ш мы попытаемся найти существующую подписку в нашей базе данных, используя connectedPurchaseToken из сведений о подписке, которые были получены в (2).
- Если все еще нет Подписка может быть найдена в базе данных, что, очевидно, означает, что это новая подписка, которая будет обрабатываться исключительно через процесс проверки Новая подписка , описанный выше. Причина этого заключается в том, что в противном случае я не могу связать свой идентификатор пользователя и подписку.
- Если найдена подписка , она обновляется с последними сведениями.
- Оценивается дата истечения срока подписки, и, если она не истекла, Пользователь в Firebase обновляется, и соответственно устанавливается флаг hasActiveSubscription . [...]
Это работало исключительно хорошо и надежно в течение достаточно долгого времени.
Насколько я вижу, developerPayload , который мог использоваться для передачи, например, UserID , чтобы определить, кому принадлежит подписка, не рекомендуется. ( Источник )
Как вы думаете, есть более простой способ сделать это, возможно только с помощью уведомлений Google Play Developer?
Я получаю уведомление на каждом этапе, когда меняется подписка, и я просто обновляю свои Подписка и hasActiveSubscription , основываясь на дате истечения срока действия. Это работает хорошо, потому что я получаю уведомление в момент истечения срока подписки (тип уведомления SUBSCRIPTION_EXPIRED
) и в любой момент, например, продление подписки. ( Источник )
Чего-то не хватает в этой логике проверки c или какого-либо потенциального риска?
Эти два вопроса пока только чтобы я не пропустил что-то важное. Опять же, по моему опыту, это работает довольно хорошо.
Все, что осталось для моего приложения (кстати, на основе Flutter), которое должно быть выпущено на iOS, - это реализация логики проверки c для iOS.
Одна вещь, которая сделала логику проверки Google c довольно простой, это то, что есть библиотека googleapis , которая, по сути, дает мне классы моделей для всех ответов, такие как уведомления или детали подписки. Мне не удалось найти что-то похожее для Apple, и я не уверен, что есть.
Есть ли какая-либо (официальная) библиотека, которая предоставляет мне функции, подобные googleapis для Node.js?
Для новых подписок в настоящее время я запрашиваю конечную точку verifyReceipt , которая, кажется, работает хорошо. Однако Apple, похоже, нигде не говорит, какие поля должны быть проверены точно, чтобы предоставить пользователям доступ к приложению. Я следую тому же логу c, что означает: если я получаю действительную квитанцию от конечной точки, и срок ее действия не истек, я даю доступ.
Достаточно ли этого логика c для новые подписки или я что-то упустил?
Для Google до сих пор я просто сохранял информацию о подписке, полученную при запросе API, включая UserID и токен . Это делается в основном из-за лени и потому, что полученная структура документа довольно проста. Ответы Apple намного сложнее, поэтому я совершенно не уверен, что хранить (и плохо документирован, если вы спросите меня), поэтому мне интересно:
Какие детали я на самом деле нужно, как для Google, так и для Apple, особенно если я полагаюсь на уведомления об обновлении подписки?
Что касается обновлений подписок, мне интересно, как работать с уведомлениями между серверами от Apple.
Когда именно они отправляются, и могу ли я реализовать тот же лог c, как описано выше для Android?
Как я не могу Кажется, вы найдете хорошую документацию или учебное пособие для этой части:
Возможно, вы знаете какие-нибудь хорошие учебники для этих уведомлений?
Большое спасибо за вашу поддержку, Матиас