Я занимаюсь разработкой игры на C ++ с использованием игрового движка Cocos2dx 3.x в студии android. Чтобы создать нужные функции в моей игре, я интегрировал пакеты Cocos2dx
, sdkbox
и google play services C++ sdk
в один проект, и он в значительной степени основан на android NDK
. Сервисы Google Play управляют моей ячеистой сетью и одноранговыми сообщениями между устройствами, но для обработки пользовательских данных (особенно больших данных, таких как изображения) я почувствовал необходимость использовать бэкэнд-сервис, который может подключаться к какой-либо системе баз данных (Возможно MySQL). Так что в конечном итоге я мог отправлять и получать данные для своих игроков через запросы сокетов и / или http. Сервисы Google Play предоставляют механизм моментальных снимков для сохраненных игр, но он ограничен 3 МБ, как они указывают в своем руководстве по API (https://developers.google.com/games/services/android/savedgames).. Это не только недостаточно для обработки данных моего игрока, но и объяснил в этой ссылке, я хотел бы не иметь административных полномочий над сохраненными играми (как было бы возможно, если бы они хранились в MySQL).
Поэтому я подумал об аутентификации моего веб-приложения с помощью сервисов Google Play (это казалось разумным, поскольку было бы невозможно попросить пользователей создать учетные данные для входа в мое веб-приложение после того, как они уже вошли в мою игру, используя свой аккаунт Google. ). Другими словами, как только пользователь войдет в систему со своей учетной записью Google, каким-то образом используйте токен или секрет, сгенерированный Google, для аутентификации запросов, отправленных в мое собственное веб-приложение и из него . В поисках этого я наткнулся на эту ссылку:
https://developers.google.com/games/services/android/offline-access
В этом руководстве упоминается использование класса GoogleSignInOptions
, в котором API предоставляется на Java, и я не смог найти его эквивалент в C ++ API для сервисов Google Play.
Моя игра успешно входит в сервисы Google Play через объект класса gpg::GameServices
, и, вызывая метод gpg::GameServices::Builder().SetOnAuthActionFinished
для этого объекта, я назначаю обратный вызов всякий раз, когда пользователь вызывает метод gameServicesObj->StartAuthorizationUI()
. Как только логин возвращается с успешными объектами gpg::AuthOperation
и gpg::AuthStatus
, пользовательские данные выбираются путем вызова gameServicesObj->Players().FetchSelf
и т. Д. Нигде в этом процессе я не мог найти метод, подобный GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestServerAuthCode.(webClientId).build()
, как упомянуто в приведенной выше ссылке. Я относительно новичок в концепции веб-приложений и процессов аутентификации / авторизации, и мои вопросы сводятся к следующему:
- Как я могу использовать сервисы Google Play C ++ SDK для аутентификации моего веб-приложения на клиентском устройстве проигрывателя, когда они входят в систему со своими аккаунтами Google? (возможно ли это, я не уверен в этом)
- Если вы порекомендуете использовать
Firebase
для всего процесса, смогу ли я иметь административный доступ к базе данных пользователей напрямую (т.е. изменять пользовательские данные напрямую, не имея ограниченного доступа)?
- Если ваша рекомендация заключается в использовании настраиваемого сокетного или http-соединения с моей внешней базой данных и веб-приложением, как мне реализовать аутентификацию / авторизацию (возможно, с использованием информации об идентификаторе игрока и т. Д.) Поверх входа в сервисы Google Play (не заново изобрести колесо и воспользоваться уже предоставленной безопасностью)?
- Наконец, какой бы метод вы ни рекомендовали мне, я был бы очень признателен. В таком случае, не могли бы вы также указать мне правильное направление для обеспечения надлежащей безопасности? (т. е. https через http, и / или пользовательская авторизация, возможно, с использованием
oauth
, если возможно?)
Я очень давно изучаю этот вопрос, и любая помощь очень ценится. Заранее спасибо.