There is no documented title callback that reports when the local user sends an invite directly through the Xbox shell or identifies the recipients; if the title must know the recipients, it must own the send flow and retain their XUIDs.
Shell and title-callable Xbox UI
Xbox supports invites initiated through the shell or directly by the title.^1^
For the Multiplayer Activity title-callable UI:
- Set the title’s current multiplayer activity.
- Call
XGameUiShowMultiplayerActivityGameInviteAsync.
- Handle completion with
XGameUiShowMultiplayerActivityGameInviteResult.
The result is only an HRESULT; its documented signature has no output containing selected recipient XUIDs.^2^ Consequently, completion can tell the title that the UI operation completed or failed, but it does not disclose who the player selected. The UI API receives only the requesting local user.^3^
auto async = std::make_unique<XAsyncBlock>();
async->queue = queue;
async->callback = [](XAsyncBlock* block)
{
std::unique_ptr<XAsyncBlock> cleanup{block};
HRESULT hr = XGameUiShowMultiplayerActivityGameInviteResult(block);
// hr reports operation success/failure; no recipient XUIDs are returned.
};
HRESULT hr = XGameUiShowMultiplayerActivityGameInviteAsync(
async.get(), requestingUser);
if (SUCCEEDED(hr))
async.release();
A successful result should therefore not be treated as an enumerable “invite sent to these users” event.
When recipient identity is required
Implement the selection in the title and send to known XUIDs. Depending on the multiplayer stack:
- Multiplayer Activity (MPA): call
XblMultiplayerActivitySendInvitesAsync with the XUID array after setting the current activity.
- Multiplayer Manager: call
XblMultiplayerManagerLobbySessionInviteUsers.
- REST Multiplayer Activity API: send
POST /titles/{titleId}/invites with invitedUsers; a successful operation returns 204 No Content.^4^
For example, with Multiplayer Manager, the title already owns the recipient list:
uint64_t recipients[] =
{
selectedPlayerXuid
};
HRESULT hr = XblMultiplayerManagerLobbySessionInviteUsers(
xblUserHandle,
recipients,
std::size(recipients),
nullptr, // ContextStringId
nullptr); // CustomActivationContext
The custom-UI flow explicitly accepts the selected players’ Xbox Live User IDs, allowing the title to record both the local sender and intended recipients when initiating the operation.^5^
Do not confuse this with invite acceptance
XGameInviteRegisterForEvent is a recipient-side acceptance notification, not a sender-side “invite sent” callback. It fires when an invited player accepts; its URI can contain the invited user, sender, and connection string.^6^
Therefore:
- Invite sent from the console shell: no documented in-title send event or recipient list.
- Invite picker launched by the title: asynchronous completion is available, but no selected-recipient result.
- Invite sent through title-controlled APIs: the title knows the recipients because it supplies their XUIDs.
- Invite accepted by a recipient: an acceptance callback is available and contains sender/recipient information.
References
- Invites overview
- XGameUiShowMultiplayerActivityGameInviteResult
- XGameUiShowMultiplayerActivityGameInviteAsync
- Send Invite
- Sends game invites using the Xbox platform invite title-callable UI (TCUI) by calling XblMultiplayerManagerLobbySessionInviteFriends with a custom activation co...
- Registers a callback to handle accepted multiplayer invites, parsing the invite URI to extract invited user, sender, and connection string information, and unre...