Как сделать автоматические возобновляемые подписки привязаны к внутреннему пользователю, а не идентификатору Apple?

Кажется, я столкнулся с кирпичной стеной, но по существу у меня в моем приложении есть страница входа для пользователя и страница создания учетной записи. Когда пользователь открывает мое приложение и создает новую учетную запись, их информация хранится на сервере Firebase (BaSS).

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

Однако, когда они выходят из системы и создают другую учетную запись, потому что, поскольку она стоит прямо сейчас, подписки привязаны к идентификаторам Apple пользователя, другой учетной записи или любой учетной записи в этом случае будет иметь полный доступ к приложению. Не только тот, который был куплен.

Поэтому я предполагаю, что мой вопрос заключается в том, как я буду делать это так, чтобы каждая подписка/покупка привязывалась к моим собственным пользователям, а не к идентификатору Apple, зарегистрированному на устройстве. (По существу, как pandora или spotify, где ваш доступ к приложению зависит от вашей учетной записи с ними, а не от вашего идентификатора apple)

Согласно документации на яблоко:

Сохранение с использованием собственного сервера. Отправьте копию квитанции на ваш сервер вместе с некоторыми учетными данными или идентификатором, чтобы вы могли отслеживать, какие квитанции принадлежат определенному пользователю. Например, позвольте пользователям идентифицировать себя с вашим сервером с именем электронной почты или именем пользователя, а также с паролем. Не используйте свойство identifierForVendor UIDevice - вы не можете использовать его для идентификации и восстановления покупок, сделанных одним и тем же пользователем на другом устройстве, поскольку разные устройства имеют разные значения для этого свойства.

Как я могу сделать что-то подобное с помощью Firebase?

Ответ 1

Когда транзакция завершится в iTunes, вы получите квитанцию о транзакции для этой покупки. Эта квитанция содержит различную информацию о покупке. Вы можете сохранить эту квитанцию в своей БД. В этом квитанции есть также поле с именем "original_transaciton_identifier (OTI)", этот идентификатор обозначает уникальный идентификатор покупки, сделанный с этого идентификатора Apple. Сохраните этот уникальный идентификатор в своей БД против идентификатора пользователя, который отправляет его первым.

Итак, если пользовательский идентификатор A отправляет вам OTI 11, храните его в вашей БД против пользователя A. Когда пользователь B регистрируется и пытается восстановить покупку, отправьте обновленную квитанцию на ваш сервер, вытащите OTI из этой квитанции, сравните он с OTI, хранящимся в вашей БД, если вы ничего не найдете, то это означает его новую покупку, иначе вы знаете, кому принадлежит эта покупка, и вы можете передать то же самое пользователю B, что это связано с каким-то другим пользователем, попробуйте сделать покупку с новой учетной записью itunes.