Configuration¶
On this page
One master ScriptableObject — PlayFabHubSettings (in a Resources/ folder) —
holds everything. Edit it from the Hub window's Client tab (a page per feature) or
the Inspector; both write to the same asset.
Environments¶
environments[] lets you keep dev / staging / production Title IDs side by side;
activeEnvironmentIndex picks the live one. An empty Title ID falls back to the
SDK's shared PlayFabSettings.TitleId.
Cross-cutting policy¶
- Network — reads and explicitly idempotent writes retry with exponential backoff + jitter for transient
errors only (HTTP 429 / 5xx / connection); honors
Retry-After. Deterministic errors (wrong price, name taken, profanity) are surfaced immediately for clean UI messages.verboseLoggingtraces every call. - Entity token — the v2 auth artifact is captured at login and refreshed
before expiry (
refreshLeadTimeSeconds), on demand and by a 30-second timer when auto refresh is enabled.
Title-side prerequisites¶
Use the per-feature setup guide alongside these settings. Unity feature switches do not change your title permissions or deploy content.
Feature roster + per-feature blocks¶
features.* toggles which managers exist at runtime (a disabled feature's
accessor is null). Each feature's knobs live in its own block (auth,
economy, leaderboards, …) — see each Hub page's tooltips for every field.
Key blocks:
- EconomyConfig.version — V2 (default, recommended) or V1 (legacy
catalog). Shop samples demonstrate v2; legacy v1 APIs are available to game code. Receipt helpers use legacy v1 endpoints.
- LeaderboardConfig.writeAuthority — CloudScript (default, recommended):
competitive scores must be written server-side; ClientDirect is for
prototyping only and requires the title setting "Allow client to post player
statistics" (AllowClientToPostPlayerStatistics) under Game Manager > Settings > API Features > Enable API features; save the change. This is unnecessary for reads/server writes. The default CloudScript mode refuses SubmitScore; call your own validated handler explicitly, as explained in feature setup.
- CloudScriptConfig.backend — LegacyCloudScript (default, PlayFab-hosted) or
AzureFunctions (opt-in; requires your Azure subscription and incurs cost).
- CloudScriptConfig.errorField / okField — the result-envelope field names
ExecuteChecked<T> inspects (default error / ok). Clear them to opt out;
rename them to match a handler contract you already ship.
- LeaderboardConfig.versionResetFunctionKey — empty by default. Statistic
versions (seasons) roll server-side; name a CloudScript/Azure handler here
to let IncrementStatisticVersion trigger one. See
Seasons, Group Data, Scheduled Events & Matchmaking Polling.
- LiveOpsConfig.eventsTitleDataKey / eventWindowGraceSeconds — which Title
Data key holds your scheduled-event document (default LiveEvents) and how
much clock-skew grace to apply to each window (default 0 = exact UTC).
- SocialConfig.groupEntityType / defaultGroupDataObject — the entity type
used for group entities (group) and the default document name for
Get/UpdateGroupData.
- MultiplayerConfig.ticketPollIntervalSeconds / cancelTicketOnStop — the
matchmaking poll cadence (clamped to PlayFab's 10-polls-per-minute ticket
limit) and whether an abandoned search cancels its ticket server-side.
Secrets — what ships where¶
- Hub runtime configuration stores the public Title ID, never the developer key. Keep developer keys out of the SDK settings resource and any other assets included in player builds. Runtime authentication tokens are sensitive session credentials.
- The admin tooling (editor-only) needs the developer secret key for
Health-Check probes / catalog pushes. It is resolved from the
PLAYFAB_DEV_SECRETenvironment variable or a git-ignored.secretfile — never stored in an asset. The package auto-adds the.gitignorerule and raises a security error if.secretis ever tracked by git.