Інтеграція 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
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Інтеграція 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, ціни у віртуальних валютах, можливість стацування, й кастомні дані:

{
  "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 тижнів. Вартість розраховується індивідуально.