#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. Вероятно, стоит сохранить весь файл квитанции, он может понадобиться вам для чего-то другого в будущем.