Сохранение токенов в Keychain

Описание механизма работы с токенами через Keychain (Apple) для случаев, когда приложение кошелька еще не установлено.

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

Для таких случаев следует использовать сохранение токена доступа в специальное хранилище Keychain. Тогда, после перенаправления игрока в Apple Store и установки приложения кошелька, приложение кошелька сможет получить данный токен из хранилища и осуществить запрос на авторизацию игры.

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

Ограничения при работе с Keychain

Основных ограничения два: данный механизм работает только в экосистеме Apple и данный механизм работает только в случае, когда у приложений один общий аккаунт в Apple Store. Таким образом, данную интеграцию можно будет реализовать только после переноса игры на аккаунт Galactica Games.

Для Android-версии подобного решения пока нет, но возможно будет в ближайшее время.

Пример реализации

Для работы с Keychain в Unity можно использовать плагин iOS Keychain Plugin, но не обязательно, возможно есть лучшие решения.

В игре Solitaire Coin в момент нажатия на кнопку "Sign In with LinQ" перед перенаправлением пользователя в LinQ (если установлен) или в AppStore (если не установлен), полученный от API user_token сохраняется в хранилище.

API.GetLinqUserToken(response =>
{
  #if UNITY_IOS
    Keychain.SetValue("walletUserToken", response.token);
  #endif
}, error =>
{
  // handle error
}

Далее следует реализовать обработку ситуации, когда пользователь вернулся в игру и сделать запрос на подтверждение связки аккаунтов.

Проверка токена LinQ Wallet

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

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

#if UNITY_IOS

  var token = Keychain.GetValue(TOKEN_MAP_KEY);

  API.AuthSignIn(token, OnSingInSuccess, OnSingInError);

#endif

Last updated