Develop

Platform SDK test environment

Updated: Sep 5, 2026
The VR Platform SDK integration on Meta Spatial Simulator supports APIs that read and write local sample data, return fixed responses, show simulated dialogs, or require backend access. APIs that use local sample data can be called offline. APIs that require backend access return an error when access is unavailable. See Test with Platform SDK.

Default state

Spatial Simulator starts with a pre-populated data set, so you can exercise Platform SDK features without building one. The database can be reset to its default state using a CLI command:
adb shell "am broadcast -n horizon.platform.spatialsim/.CommandReceiver --es COMMAND \"common.reset_data\""
Note: You can reset the data to its default state, but not clear it entirely.

Users

Signed out, Users.getLoggedInUser returns no usable identity. Signed in, it resolves the account ID, alias, and profile picture for your Meta account. The local database remains keyed to the seeded test user Sir Lancelot, user ID 084275158957381. See Sign in to the simulator for account switching instructions.
User IDDisplay NameOculus IDFriendBlockedNotes
939717494984112
Lord Blackwood
blackwood
Yes
No
 
084275158957381
Sir Lancelot
lancelot
N/A
N/A
Local test-data user
123915701840108
Lady Alethea
alethea
Yes
No
 
87357015031456
Sir Gawain the Valiant
gawain
Yes
No
 
013850318958091
Sir Percival the Pure
percival
Yes
No
 
359783519751315
Lady Guinevere
guinevere
Yes
No
 
081357031758135
Mordecai the Enchanter
mordecai
Yes
No
 
47651909218124
Isolde of the Lake
isolde
No
No
 
78935613805
Rowena the Swift
rowena
No
No
 
77153185351035
Sir Galahad the Just
galahad
No
No
 
210975017290283
Thorne
thorne
No
Yes
 

In-App Purchases (IAP)

By default, the Spatial Simulator test environment is pre-populated with 9 products and 2 purchases. Use them to test Iap.getViewerPurchases and Iap.launchCheckoutFlow. Iap.getProductsBySku and Iap.consumePurchase call the Meta backend when you are signed in, so they ignore this local data.

Billing Compatibility SDK

The Meta Horizon Billing Compatibility SDK (version 2.0.0 and above) is supported in the Spatial Simulator. Use it to test your billing integration through the Google Play Billing-compatible API.
The Billing Compatibility SDK lets you test the following in the Spatial Simulator:
  • Purchases: querying purchases and launching checkout flows read the local data. No real transaction is made.
  • Fetching products: querying product details makes a backend request when you are signed in and returns an authentication error when you are signed out.

Products

NameSKUFormatted PriceType
Freshly Baked Bread Loaf
sku1
$5.00
Consumable
Herbal Remedy Kit for Common Ailments
sku2
$10.00
Consumable
Warm Woolen Cloak with Hood
sku3
$15.00
Durable
Royal Castle Access Subscription
sku4
$20.00
Subscription
Dragon’s Breath Potion
sku5
$8.99
Consumable
Knight’s Steel Sword
sku6
$19.99
Durable
Mystic’s Crystal Ball
sku7
$4.99
Consumable
Royal Suit of Armor
sku8
$29.99
Durable
Witch’s Brew
sku9
$6.99
Consumable

Purchases

By default, the local test-data user, Sir Lancelot, has already made the following purchases:
Product NamePurchase IDSKUType
Freshly Baked Bread Loaf
12409214701
sku1
Consumable
Warm Woolen Cloak with Hood
32507325022
sku3
Durable

Leaderboards

The default environment includes 1 leaderboard with pre-populated entries.

Leaderboard: gold_leaderboard

RankDisplay NameUser IDScore
1
Sir Lancelot
084275158957381
10,000 pts
2
Lord Blackwood
939717494984112
9,999 pts
3
Lady Alethea
123915701840108
8,888 pts
4
Sir Gawain the Valiant
87357015031456
7,000 pts
5
Sir Percival the Pure
013850318958091
6,889 pts
6
Lady Guinevere
359783519751315
5,000 pts
7
Mordecai the Enchanter
081357031758135
4,444 pts
8
Isolde of the Lake
47651909218124
3,333 pts
9
Rowena the Swift
78935613805
2,121 pts
10
Sir Galahad the Just
77153185351035
2,120 pts
11
Thorne
210975017290283
2,001 pts

Group Presence

Group presence is initially null for all users. Group presence can be set via Group Presence APIs such as GroupPresence.set and GroupPresence.setIsJoinable.

Application Data

Application Version

The Application.getVersion API returns fixed values:
PropertyValue
currentVersionCode
1
currentVersion
“1.0”
latestVersionCode
0
latestVersion
””
releaseDate
1
size
””

Launch Details

The ApplicationLifecycle.getLaunchDetails API returns:
PropertyValue
launchType
NORMAL

User Age Category

UserAgeCategory().get() is a suspend call returning a UserAccountAgeCategory. In the sandbox it resolves to the adult category:
PropertyValue
ageCategory
AD

Asset File

By default, the Spatial Simulator test environment is pre-populated with 7 assets including language packs and downloadable content.

Assets

Note: File names are relative to the app’s OBB directory, /storage/emulated/0/Android/obb/<package>/.
Asset IDAsset TypeDownload StatusFile nameIAP StatusNotes
asset_lang_spanish
language_pack
available
es.dat
free
Spanish language pack
asset_lang_french
language_pack
installed
fr.dat
free
French language pack
asset_lang_japanese
language_pack
available
ja.dat
free
Japanese language pack
asset_lang_german
language_pack
available
de.dat
free
German language pack
asset_terrain_castle
store
available
 
not-entitled
Store content, not entitled
asset_treasure_pack
default
installed
asset_treasure_pack.dat
entitled
Already installed
asset_weapon_models
store
available
 
entitled
Store content, entitled

Language packs

The following language packs are available with localized names:
Asset IDLanguage TagEnglish NameNative Name
asset_lang_spanish
es
Spanish
Español
asset_lang_french
fr
French
Français
asset_lang_japanese
ja
Japanese
日本語
asset_lang_german
de
German
Deutsch

Download simulation

When downloading assets via AssetFile.downloadById or AssetFile.downloadByName, the Spatial Simulator simulates progressive download progress:
  • Download progresses through 0% → 25% → 50% → 75% → 100%
  • Each progress step takes approximately 200ms
  • Download status transitions: available → downloading → installed
  • Progress updates are sent via AssetFile.downloadUpdate event listener

Language Pack

The Language Pack service works in conjunction with Asset File - language packs are filtered from the Asset File storage where assetType equals language_pack.

Current language state

By default, no current language is set. The current language can be set using LanguagePack.setCurrent, which will:
  1. Validate that the specified language pack exists
  2. Trigger a download if the language pack is not already installed
  3. Set the current language tag in local storage
PropertyDefault Value
currentLanguage
null (not set)
pendingDownload
null (no download in progress)

Language pack workflow

  1. Use LanguagePack.getCurrent to check the currently selected language
  2. Use AssetFile.getList to see available language packs (filter by assetType == "language_pack")
  3. Use LanguagePack.setCurrent with the language tag (for example, “es”, “fr”) to switch languages
  4. The system will automatically download the language pack if not already installed

Challenges

All Challenges APIs make real GraphAPI calls when authenticated. There is no local test data for Challenges in the Spatial Simulator - all data is fetched from the backend. This requires logging in to use Challenges functionality.

Modifying test data

You can modify the test environment data using CLI commands:
  • Create new users using users.create_user command.
  • Create new products using iap.create_product command.
  • Block/unblock users using users.block_user/users.unblock_user commands.

Data persistence

  • All changes made to the test environment are persisted across sessions of Meta Spatial Simulator.
  • Data persists until the emulator is reset or the database is cleared.
  • Use the common.reset_data CLI command to return to the original default state.