Asynchronous errors
Handle asynchronous exceptions in the Instant Games SDK.
API endpoints that return WebTask or WebTask<T> and use the suffix Async in their names might throw asynchronous exceptions when awaited. The Instant Games SDK for Unity uses type Meta.InstantGames.APIError to represent these exceptions.
For details about async endpoints, refer to Call asynchronous methods.
Try/catch in asynchronous functions
If you're using async functions, enclose the await expression in a try block to catch and handle asynchronous errors:
var task = Meta.InstantGames.FBInstant.CreateShortcutAsync();
try
{
    await task;
}
catch (APIError e)
{
    // respond to the failure
}
Asynchronous error handling using coroutines
When using coroutines for asynchronous operations, asynchronous errors don't throw automatically. Check the completed task manually via the property IsFaulted to discover any errors:
IEnumerator GetPlayersCoroutine()
{
    var task = FBInstant.Player.GetConnectedPlayersAsync();
    yield return task.WaitForCompletion();
    if (task.IsFaulted)
    {
        // respond to the error
    }
    else
    {
        var players = task.Result;
        // do something with the result
    }
}
Handling different types of APIError
APIError has a property Code, of type Meta.InstantGames.ErrorCode, that provides more detail on the reason for the failure. You can use this property to respond differently to different types of failures:
catch (APIError e)
{
    switch (e.Code)
    {
        case ErrorCode.USER_INPUT:
            // respond to user input error
            break;
        case ErrorCode.PENDING_REQUEST:
            // respond to pending request error
            break;
        // ...
    }
}