跳到主要内容

Unity GameCenter SDK — работа с игровым профилем

GameCenter SDK даёт доступ к игровому профилю пользователя: можно получать текущие данные профиля и синхронизировать их с новыми данными.

На текущем этапе SDK работает только если на устройстве установлен RuStore и пользователь авторизован в RuStore. Если RuStore не установлен или пользователь не авторизован, методы вернут ошибку.

Подключение в проект

Для подключения скачайте со страницы upm_tgz пакеты:

  • ru.rustore.core-x.y.z.tgz
  • ru.rustore.pay-x.y.z.tgz

Импортируйте пакеты в проект через Package Manager (Window → Package Manager → + → Add package from tarball...).

Зависимости подключаются автоматически с помощью External Dependency Manager.

  1. Откройте окно менеджера пакетов (Window → Package Manager → + → Add package from git URL...).
  2. Используйте ссылку https://github.com/googlesamples/unity-jar-resolver.git?path=/upm для подключения пакета External Dependency Manager.
  3. Для устранения ошибки Google.IOSResolver.dll will not be loaded установите модуль сборки iOS для вашей версии Unity (UnityHub → Installs → Ваша версия Unity → Add modules → iOS Build Support).
Ошибка Google.IOSResolver.dll
Assembly 'Packages/com.google.external-dependency-manager/ExternalDependencyManager/Editor/1.2.182/Google.IOSResolver.dll' will not be loaded due to errors:
Unable to resolve reference 'UnityEditor.iOS.Extensions.Xcode'. Is the assembly missing or incompatible with the current platform?
Reference validation can be disabled in the Plugin Inspector.
提示

Если вы используете операционную систему macOS, измените настройки утилиты архивации. В настройках Archive Utility снимите флажок Keep expanding if possible. В противном случае архив проекта будет скачан некорректно.

Для корректной обработки зависимостей SDK выполните следующие настройки.

  1. Откройте настройки проекта: Edit → Project Settings → Player → Android Settings.

  2. В pазделе Publishing Settings включите следующие настройки.

    • Custom Main Manifest.
    • Custom Main Gradle Template.
    • Custom Gradle Properties Template.
  3. В разделе Other Settings настройте:

    • package name.
    • Minimum API Level = 24.
    • Target API Level = 34.

Работа с игровым профилем

Получение игрового профиля

Используйте метод GetGameProfile для асинхронного получения текущего профиля пользователя.

GameCenterClient.Instance.GetGameProfile(
onFailure: (error) => {
// Process error
},
onSuccess: (result) => {
// Process success
}
);

Синхронизация игрового профиля

Используйте метод SyncGameProfile для синхронизации профиля с новыми данными.

Рекомендуем экранировать JSON, передаваемый в параметр data, чтобы вложенный JSON корректно передавался как строка (во избежание ошибок сериализации/десериализации).

var data = "{}";

GameCenterClient.Instance.SyncGameProfile(
data,
onFailure: (error) => {
// Process error
},
onSuccess: (result) => {
// Process success
}
);

Модель данных

GameProfile

Игровой профиль пользователя.

public class GameProfile {

public string data { get; }
}
  • data — строка с данными игрового профиля (формат определяете вы, обычно JSON).

Обработка ошибок

GameCenter SDK выбрасывает исключения — подклассы RuStoreGameCenterException. Обрабатывайте их, чтобы показать пользователю корректные сообщения и предпринять действия.

GameCenterClient.Instance.GetGameProfile()
onFailure: (error) => {
switch (error) {
case RuStoreGameCenterException.RuStoreGameCenterUserUnauthorizedException:
// Пользователь не авторизован в RuStore
break;
case RuStoreGameCenterException.RuStoreGameCenterNetworkException:
// Сетевая ошибка
break;
case RuStoreGameCenterException.RuStoreGameCenterCommonException:
// Общая ошибка GameCenter (ошибка при извлечении данных из приложения RuStore)
break;
case RuStoreGameCenterException.RuStoreGameCenterClientAlreadyExist:
// Повторное создание клиента (экземпляр уже существует)
break;
case RuStoreGameCenterException.RuStoreGameCenterClientNotCreated:
// Доступ к клиенту до его создания
break;
default:
// Другая ошибка
},
onSuccess: (result) => {
// Process success
}
};

Доступные исключения:

  • RuStoreGameCenterException.RuStoreGameCenterUserUnauthorizedException — пользователь не авторизован в RuStore.
  • RuStoreGameCenterException.RuStoreGameCenterNetworkException — сетевая ошибка.
  • RuStoreGameCenterException.RuStoreGameCenterCommonException — общая ошибка GameCenter (не удалось получить данные из приложения RuStore).
  • RuStoreGameCenterException.RuStoreGameCenterClientAlreadyExist — попытка создать несколько экземпляров GameCenterClient.
  • RuStoreGameCenterException.RuStoreGameCenterClientNotCreated — обращение к клиенту до его инициализации.

Требования и рекомендации

  • Устройство пользователя: Android с установленным RuStore.

  • Пользователь должен быть вошедшим в RuStore.

  • Рекомендуем:

    • Проверять авторизацию пользователя в RuStore перед вызовом методов SDK.
    • Логировать ошибки RuStoreGameCenterException для диагностики.
    • Хранить критичные данные прогресса и на стороне сервера, а GameCenter использовать как удобный слой синхронизации.