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







