FRVR usually handles this for you
In a normal engagement, FRVR sets up your SDK config on the studio’s behalf — gameId, ad providers, IAP catalog, tracker keys, consent CMP, channel settings, etc. — and hands you a generated snippet for local testing. The production build pipeline injects the real config at packaging time.
This page documents the full shape so you know what’s in the generated block and where your own overrides slot in. You rarely need to hand‑write a config from scratch.
FRVR.config is a plain object you set before FRVR.init(). Only gameId is strictly required; every other key is module‑specific and optional.
FRVR . config = {
gameId : string, // REQUIRED. Your FRVR game identifier.
ads? : AdsConfiguration,
iap? : IAPProviderConfig,
auth? : AuthProviderConfig,
tracker? : TrackerConfig,
consent? : ConsentProviderConfig,
storage? : StorageConfiguration,
cloudStorage? : CloudStorageConfiguration,
social? : SocialConfig,
navigation? : NavigationConfig,
crossplay? : CrossplayConfiguration,
channels? : Record < string, unknown>, // per‑channel overrides
shield? : { xmlPath : string, cssPath : string }, // Facebook Instant only
};
Your game’s identifier on FRVR. It’s used by analytics, leaderboards, tournaments, shop, features, notifications — almost everything. Set it once at the top level; any module that wants its own override can set a gameId inside its own config.
FRVR . config . gameId = 'basketball' ;
See Analytics . Typical shape:
FRVR . config . tracker = {
appVersion : '1.2.3' ,
appBuild : '4567' ,
analyticsProviders : {
metapixel : { pixelId : 'PIXEL_ID' },
},
};
See Ads . Most channels auto‑configure providers; you rarely need more than:
FRVR . config . ads = {
autoInit : true ,
throttling : { [ FRVR . ads . AdType . INTERSTITIAL ] : { minInterval : 60 } },
};
See IAP . You always need a catalog:
FRVR . config . iap = {
catalog : {
COINS_100 : { label : '100 coins' , storeId : 'com.mygame.coins_100' },
COINS_500 : { label : '500 coins' , storeId : 'com.mygame.coins_500' },
},
};
See Auth . For most games an empty object is enough — the active channel picks the right provider:
See Consent . On web you typically pick a CMP:
FRVR . config . consent = {
providerName : 'tcfv2' , // or 'cookiepro'
config : {},
};
See Cloud storage :
FRVR . config . cloudStorage = {
playerStorage : { env : 'production' },
};
Some channels accept their own config nested under channels:
FRVR . config . channels = {
'facebook-instant' : { /* … */ },
'google-play' : { /* … */ },
};
See the channels reference for which keys are read.
Always between loading the SDK bundle and calling FRVR.init(). Use the dev channel locally; FRVR injects the production channel bundle for you per release :
< script src = "https://cdn.frvr.com/sdk/frvr-sdk.min.js" ></ script >
< script src = "https://cdn.frvr.com/sdk/frvr-channel-dev.min.js" ></ script >
< script >
FRVR . config = { gameId : 'my-game' , /* … */ };
FRVR . init ();
</ script >
Setting FRVR.config after init() has no effect.