Fetch Metadata In-Game from Multiple Sources
In this How-to, we will fetch all metadata matching a specific key on multiple items.
Prerequisites
A LootLocker account and a created game
Fetching Metadata from multiple sources
When fetching a several metadata, you need to provide 3 things:
A
ulid
: (can be retrieved through the web console or in the SDK's depending on the feature) of the item to fetch metadata forFor example:
01J96M0BX1GGTPP2QDRCBV3FW2
A key: of the desired metadata
For example:
icon
A source type
One of the following: Progression, leaderboard, catalog_item, currency
When fetching metadata by tags, a key will supersede the tag, so if you want to search by tags it’s best to avoid using keys and vice versa. When fetching metadata by tags you will get all metadata on that object with the same corresponding tag.
// Create an array of sources and keys that we want to fetch
LootLockerMetadataSourceAndKeys[] sourcesAndKeys = new LootLockerMetadataSourceAndKeys[]{
new LootLockerMetadataSourceAndKeys
{
source = LootLockerMetadataSources.currency,
id = "01J7S0CED5K0THCB1ENN9XKQWZ",
keys = new string[] { "icon" }
},
new LootLockerMetadataSourceAndKeys
{
source = LootLockerMetadataSources.catalog_item,
id = "01J9RE51T32WNXSQADNJ5RGQCX",
keys = new string[] { "icon", "featured" }
}
};
// Base64 can be set to content_type "application/x-redacted", use this to avoid accidentally fetching large data files
bool ignoreFiles = true;
LootLockerSDKManager.GetMultisourceMetadata(sourcesAndKeys, (response) =>
{
if (response.success)
{
// Handle the received metadata differently depending on the use cases
foreach (var entry in response.Metadata)
{
// Currency
if (entry.source == LootLockerMetadataSources.currency)
{
// Get the first entry as a base64 (file), this is an image so we convert it to a sprite to be displayed
LootLockerMetadataBase64Value base64String = null;
entry.entries[0].TryGetValueAsBase64(out base64String);
byte[] imageBytes = Convert.FromBase64String(base64String.content);
Texture2D tex = new Texture2D(291, 302);
tex.LoadImage(imageBytes);
tex.filterMode = FilterMode.Point;
Sprite sprite = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f);
// Add your own code here to display the sprite
}
// Catalog Item
if (entry.source == LootLockerMetadataSources.catalog_item)
{
// Multiple keys requested: loop through to find the correct one
foreach (var catalogItemMetadata in entry.entries)
{
// Handle the image
if (catalogItemMetadata.type == LootLockerMetadataTypes.Base64)
{
// Look above in how LootLockerMetadataSources.currency is handled to see how to handle an image
}
// Handle a bool
if (catalogItemMetadata.type == LootLockerMetadataTypes.Bool)
{
bool featured = catalogItemMetadata.TryGetValueAsBool(out featured);
// Add your own code here to make us of the returned bool value
}
}
}
}
}
else
{
// If it failed, output the error to the console
Debug.Log(response.errorData.message);
}
}, ignoreFiles);
Conclusion
In this How-to we’ve fetched multiple metadata entries that were created in the web console by using tags. Metadata also provides the possibility to fetch a single metadata in game or fetch metadata in game with tags.
Last updated