Как обезопасить покупки в приложении, не требующие затрат, при входе пользователя в систему

#android #ios #google-cloud-firestore #in-app-purchase

#Android #iOS #google-облако-firestore #покупка в приложении

Вопрос:

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

Теперь возникает проблема — когда пользователь входит в систему, я передам информацию об их покупке на наш сервер. Однако, что произойдет, если пользователь выйдет из нашего приложения, а затем войдет его друг? Устройство по-прежнему подключено к App Store с использованием оригинального Apple ID, и пользователь может восстановить покупку, которая теперь будет связана с учетной записью его друга.

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

Я уверен, что это распространенная проблема, так как же ее обычно решают? Нам нужно обезопасить покупки, производимые с iOS и Android.

P.S. Синхронизация выполняется через Firestore.

Ответ №1:

Ни в одном из магазинов приложений нет «официальных» рекомендаций по этому поводу. Что мы делаем в RevenueCat, так это сохраняем файл квитанции с идентификатором пользователя, а затем при каждой новой покупке (или восстановлении) проверяем, сохранен ли файл квитанции с другим идентификатором пользователя. Затем мы можем вернуть сообщение об ошибке, что эта квитанция уже используется другой учетной записью.

Если вы посмотрите на некоторые приложения с большими подписками (Netflix, Spotify, HBO и т.д.), Вы заметите, что в них даже нет кнопки «Восстановить покупки». Вам это сойдет с рук, если вам потребуется войти в учетную запись, поскольку покупки можно восстановить, войдя в свою учетную запись. Однако, если у вас нет инженерных служб и службы поддержки клиентов, таких как Netflix, кнопка «Восстановить покупки», как правило, является хорошей идеей, поскольку она может спасти вас от крайних случаев — просто проверьте, есть ли уже квитанция в файле для другой учетной записи, прежде чем «разблокировать» доступ.

Комментарии:

1. Вы сохраняете весь файл или только originalTransactionID? Я думал, что идентификатора будет достаточно.

2. Для этого варианта использования достаточно идентификатора originalTransactionID. Вероятно, стоит сохранить весь файл квитанции, он может понадобиться вам для чего-то другого в будущем.