Интеграция PlayFab для серверной части мобильной игры

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Интеграция PlayFab для серверной части мобильной игры
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    864
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Интеграция PlayFab для серверной части мобильной игры

PlayFab — BaaS (Backend as a Service) от Microsoft, заточенный под игры. Предоставляет игровой бэкенд «из коробки»: аутентификация, инвентарь, валюта, магазин, лидерборды, матчмейкинг, Push-уведомления, серверная логика через Cloud Script. Для мобильных игр без собственного backend-разработчика PlayFab закрывает 80% потребностей.

Главный риск при интеграции — не технический. PlayFab предоставляет инструменты, но если архитектура данных спроектирована неправильно (название Title Data, структура Player Data, схема Catalog), потом это переделывается болезненно. На старте стоит потратить время на проектирование.

Инициализация SDK

using PlayFab;
using PlayFab.ClientModels;

public class PlayFabManager : MonoBehaviour
{
    public static PlayFabManager Instance { get; private set; }
    public string PlayFabId { get; private set; }

    void Awake()
    {
        PlayFabSettings.staticSettings.TitleId = "YOUR_TITLE_ID";
    }

    // Анонимная авторизация через Device ID
    public void LoginAnonymous(Action onSuccess, Action<string> onError)
    {
#if UNITY_IOS
        PlayFabClientAPI.LoginWithIOSDeviceID(new LoginWithIOSDeviceIDRequest
        {
            DeviceId = SystemInfo.deviceUniqueIdentifier,
            CreateAccount = true,
            InfoRequestParameters = new GetPlayerCombinedInfoRequestParams
            {
                GetPlayerProfile = true,
                GetUserInventory = true,
                GetUserVirtualCurrency = true
            }
        }, result => {
            PlayFabId = result.PlayFabId;
            ApplyPlayerData(result.InfoResultPayload);
            onSuccess?.Invoke();
        }, error => onError?.Invoke(error.GenerateErrorReport()));
#elif UNITY_ANDROID
        PlayFabClientAPI.LoginWithAndroidDeviceID(new LoginWithAndroidDeviceIDRequest
        {
            AndroidDeviceId = SystemInfo.deviceUniqueIdentifier,
            CreateAccount = true,
            InfoRequestParameters = new GetPlayerCombinedInfoRequestParams
            {
                GetPlayerProfile = true,
                GetUserInventory = true,
                GetUserVirtualCurrency = true
            }
        }, result => {
            PlayFabId = result.PlayFabId;
            ApplyPlayerData(result.InfoResultPayload);
            onSuccess?.Invoke();
        }, error => onError?.Invoke(error.GenerateErrorReport()));
#endif
    }
}

InfoRequestParameters при логине — важная оптимизация: получаем инвентарь и валюту одним запросом вместо трёх отдельных вызовов после авторизации.

Инвентарь и Catalog

PlayFab Catalog определяет все предметы в игре. Каждый предмет (CatalogItem) имеет ID, цены в виртуальных валютах, стек (stackable/non-stackable), и кастомные данные (CustomData):

{
  "ItemId": "sword_legendary",
  "DisplayName": "Легендарный меч",
  "VirtualCurrencyPrices": { "GO": 500 },
  "Consumable": { "UsageCount": null },
  "CustomData": "{\"damage\": 150, \"speed\": 0.8, \"rarity\": \"legendary\"}"
}

Покупка предмета из магазина:

PlayFabClientAPI.PurchaseItem(new PurchaseItemRequest
{
    ItemId = "sword_legendary",
    VirtualCurrency = "GO",  // Gold
    Price = 500,
    CatalogVersion = "v1"
}, result => {
    // result.Items — добавленные предметы
    InventoryManager.Instance.RefreshFromPlayFab(result.Items);
}, error => Debug.LogError(error.GenerateErrorReport()));

PlayFab автоматически списывает валюту и добавляет предмет в инвентарь игрока — транзакция атомарна на стороне сервера.

Виртуальные валюты

PlayFab поддерживает до 10 валют на Title. Настраиваем в Game Manager: GO (Gold), GE (Gems), EN (Energy). Пополнение:

// Через Cloud Script — только сервер может начислять валюту
// Клиент вызывает функцию:
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{
    FunctionName = "AddDailyReward",
    FunctionParameter = new { rewardType = "daily_login" }
}, result => {
    var newBalance = JsonUtility.FromJson<CurrencyResult>(result.FunctionResult.ToString());
    CurrencyManager.Instance.UpdateBalance(newBalance);
}, error => { });

Прямое начисление валюты через клиентский API (AddUserVirtualCurrency) возможно, но для production отключают — иначе любой сможет добавить себе золото через перехват запроса.

Player Data и Title Data

Player Data — данные конкретного игрока (прогресс, настройки, сохранения):

// Сохранение прогресса
PlayFabClientAPI.UpdateUserData(new UpdateUserDataRequest
{
    Data = new Dictionary<string, string>
    {
        { "current_level", currentLevel.ToString() },
        { "inventory_preset", JsonUtility.ToJson(inventoryPreset) }
    },
    Permission = UserDataPermission.Public  // видно другим игрокам (для профиля)
}, null, null);

Title Data — глобальные данные игры, одинаковые для всех (баланс-таблицы, конфигурация событий, строки локализации). Кэшируются на клиенте:

PlayFabClientAPI.GetTitleData(new GetTitleDataRequest
{
    Keys = new List<string> { "balance_config", "event_schedule" }
}, result => {
    var balanceJson = result.Data["balance_config"];
    BalanceManager.Instance.ApplyConfig(balanceJson);
}, null);

Cloud Script: серверная логика

PlayFab Cloud Script — серверные JavaScript-функции. Критические операции (выдача наград, обработка крафтинга, верификация покупок) должны идти через Cloud Script:

// Handlers.js на PlayFab
handlers.CompleteDailyQuest = function(args, context) {
    var questId = args.questId;
    var playerId = context.playerId;

    // Проверяем, что квест реально выполнен
    var playerData = server.GetUserData({ PlayFabId: playerId, Keys: ["daily_quests"] });
    var quests = JSON.parse(playerData.Data["daily_quests"].Value);
    var quest = quests.find(q => q.id === questId);

    if (!quest || !quest.isCompleted || quest.rewardClaimed) {
        return { success: false, error: "invalid_quest_state" };
    }

    // Выдаём награду
    server.AddUserVirtualCurrency({
        PlayFabId: playerId,
        VirtualCurrency: "GO",
        Amount: quest.reward
    });

    // Помечаем как выданную
    quest.rewardClaimed = true;
    server.UpdateUserData({
        PlayFabId: playerId,
        Data: { "daily_quests": JSON.stringify(quests) }
    });

    return { success: true, reward: quest.reward };
};

Матчмейкинг

PlayFab Matchmaking (Multiplayer Servers) позволяет создавать тикеты поиска с правилами:

PlayFabMultiplayerAPI.CreateMatchmakingTicket(new CreateMatchmakingTicketRequest
{
    Creator = new MatchmakingPlayer
    {
        Entity = new EntityKey { Id = entityId, Type = "title_player_account" },
        Attributes = new MatchmakingPlayerAttributes
        {
            DataObject = new { rating = playerRating, region = playerRegion }
        }
    },
    GiveUpAfterSeconds = 30,
    QueueName = "ranked_1v1"
}, result => {
    StartPollingTicket(result.TicketId);
}, error => { });

Правила матчмейкинга (skill range, region preference, latency) настраиваются в Game Manager без изменений кода.

Что входит в работу

  • Настройка PlayFab Title: валюты, Catalog, Title Data
  • Интеграция SDK (Unity / iOS / Android)
  • Аутентификация: Device ID, Email, платформенные аккаунты (Google Play / Game Center)
  • Player Data: сохранение и загрузка прогресса
  • Инвентарь и магазин с виртуальными валютами
  • Cloud Script для критических операций (награды, крафт, квесты)
  • Лидерборды и статистика
  • Push-уведомления через PlayFab

Сроки

Базовая интеграция (авторизация + инвентарь + лидерборды): 5–7 дней. Полный игровой бэкенд (квесты, крафт, магазин, матчмейкинг): 3–6 недель. Стоимость рассчитывается индивидуально.