Это был мой подход к тем же проблемам.Это может не соответствовать вашему сценарию.Надеюсь, это поможет.
Стоит ли читать идентификатор продукта с сервера, а не жестко прописывать его в apk?
Вы должны хранить идентификаторы продукта в кодетак как они будут использоваться для предоставления функций, закодированных в приложении.
Как часто мне / мне нужно читать идентификатор устройства?
Вы не должны полагаться наидентификатор устройства, поскольку вы выразили обеспокоенность по поводу смены телефона пользователем.Вы хотели бы внедрить систему входа в систему и сделать вход пользователя в приложение перед покупкой продукта.Это сделает ваше устройство подписки независимым.
Процесс должен быть следующим:
- Пользователь пытается использовать заблокированную функцию.
- Приложение запрашивает вход в систему.Зарегистрируйте пользователя и войдите в систему.
- Пользователь снова нажимает кнопку покупки и завершает покупку.
- Ваш сервер сохраняет информацию для входа в систему пользователя вместе с информацией о покупке.
- Пользовательизменяет устройство.
- Пользователь пытается использовать заблокированную функцию.
- Приложение запрашивает вход в систему.Пользователь входит в систему.
- Сервер возвращает данные о покупке с информацией о пользователе.
- Приложение разблокирует функцию.
Как часто я должен проверять информацию о покупкес сервера?
Вы должны периодически проверять детали покупки.
Почему? Пользователь может запросить возврат через некоторое время или платежный шлюз будетпо какой-то причине аннулируйте покупку.
IMO, должно быть два типа методов синхронизации: тихий и принудительный.В моем подходе тихая синхронизация будет проверять интернет каждые 9 дней.Если интернет недоступен, он ничего не сделает.В то время как принудительная синхронизация будет проверять интернет каждые 25 дней с момента последней синхронизации.Если Интернет недоступен, он попросит пользователя включить его, в противном случае пользователь не сможет использовать приложение.
Я использовал период подписки один месяц, но у вас нет-потребляемый продукт вы можете себе позволить 2-4 месяца периода принудительной синхронизации.
Должен ли я хранить флаг успешной покупки в общих настройках или что-то, чтобы я не постоянно читал БД и пользователь мог использовать устройство в автономном режиме?
Процесс синхронизациии вход в систему решит эту проблему.
Я думаю, вы, возможно, неохотно внедрите систему входа в систему для такой мелочи и думаете, что это заставит меньше пользователей покупать ваш продукт.Но с помощью аутентификации Google это будет быстро, и пользователи будут меньше разочарованы этим.
Реализация этого подхода требует много логики на стороне сервера.