Nano Banana Pro
Agent skill for nano-banana-pro
Invite prompts are prompts sent to the player of an experience to invite their connections to join them.
Sign in to like and favorite skills
In addition to common promotion methods for increasing your player base, you can implement invite prompts directly inside your experience, encouraging players to invite their connections and increase co-experience gameplay.
The invite prompt system features the following:
Class.Player:GetJoinData() when the invited connection joins. Example use cases include routing invited connections to a coordinate location or personalizing the joining experience for the invitee.You can also track and reward inviters and invitees using the Connection Invite Reward System.
By default, an invite prompt for the player shows a menu of their connections with Invite buttons. To customize the prompt message, target a specific connection, or include launch data in the invite, you'll need to set up an
Class.ExperienceInviteOptions object with the desired properties.
| Property | Type | Description |
|---|---|---|
| `Class.ExperienceInviteOptions.PromptMessage|PromptMessage` | string | Custom text shown on the invite prompt for the sending player, for example "Ask your connections to join the adventure!" for a multi-connection invite prompt, or "Invite this connection to join the adventure!" for a specific connection invite prompt. Note that if your custom invite prompt message is long enough to overflow the bounds of the UI, it will not be shown. |
| `Class.ExperienceInviteOptions.InviteUser|InviteUser` | number | Roblox `Class.Player.UserId|UserId` of the specific connection to invite; if not provided, the player will be prompted to pick from a list of connections. |
| `Class.ExperienceInviteOptions.InviteMessageId|InviteMessageId` | string | Asset ID that maps to a **Notification** asset type. This asset is used to store/localize a custom string for the invite notification that connections receive. See [Setting Notification Options](#set-notification-options) for details. |
| `Class.ExperienceInviteOptions.LaunchData|LaunchData` | string | Used to set a parameter in `Class.Player:GetJoinData()` when a connection joins from the invite notification. Maximum of 200 characters. See [Include launch data](#include-launch-data) for a usage example. |
local SocialService = game:GetService("SocialService") local Players = game:GetService("Players") local player = Players.LocalPlayer -- Construct invite options with a custom prompt message local inviteOptions = Instance.new("ExperienceInviteOptions") inviteOptions.PromptMessage = "Ask your connections to join the adventure!"
local SocialService = game:GetService("SocialService") local Players = game:GetService("Players") local player = Players.LocalPlayer local receiverUserID = 505306092 -- Construct invite options with connection's user ID and a custom prompt message local inviteOptions = Instance.new("ExperienceInviteOptions") inviteOptions.InviteUser = receiverUserID inviteOptions.PromptMessage = "Invite this connection to join the adventure!"
By default, the invite notification that connections receive contains the sender's
Class.Player.DisplayName|DisplayName, username, and the experience name. To customize the message, you can create a Notification asset on the Creator Dashboard and include its asset ID as a parameter of Class.ExperienceInviteOptions.
Navigate to the Creator Dashboard.
Similar to badges, notification strings are tied to a specific experience. Locate that experience's thumbnail and click on it.
In the left column, under Engagement, click Notifications.
In the center region, click the Create a Notification String button.
Fill in an identifier name (only visible to you) and the custom notification text. Note that you must include {experienceName} as a placeholder to identify the experience's name for invited connections, and you can optionally include the sender's
Class.Player.DisplayName|DisplayName through the {displayName} placeholder.
Example notification strings:
When ready, click the Create Notification String button.
On the notifications page, in the table of notifications, click the ⋯ button in the Actions column and select Copy Asset ID.
In the
Class.ExperienceInviteOptions object for the invite prompt, paste the asset ID as the value of the Class.ExperienceInviteOptions.InviteMessageId|InviteMessageId property.
local SocialService = game:GetService("SocialService") local Players = game:GetService("Players") local player = Players.LocalPlayer -- Construct invite options with connection's user ID local inviteOptions = Instance.new("ExperienceInviteOptions") inviteOptions.InviteMessageId = "ef0e0790-e2e8-4441-9a32-93f3a5783bf1"
To prompt an invite, you should first determine whether the player can send an invite, as the ability may vary depending on the platform or player. Once confirmed, you can display the invitation prompt to the player.
Class.SocialService:CanSendGameInviteAsync(), wrapped in a Global.LuaGlobals.pcall() since it's an asynchronous network call that may occasionally fail.Class.SocialService:PromptGameInvite() with the optional invite options object as the second argument.Once prompted, the player will see an on-screen prompt to invite multiple connections, or the specific connection defined in the invite options object. When the player then clicks the Invite button for one or more connections, those connections will receive a notification containing the sender's
Class.Player.DisplayName|DisplayName, username, and the experience name. Notifications may be further customized as outlined in Set notification options.
local SocialService = game:GetService("SocialService") local Players = game:GetService("Players") local player = Players.LocalPlayer -- Function to check whether the player can send an invite local function canSendGameInvite(sendingPlayer) local success, canSend = pcall(function() return SocialService:CanSendGameInviteAsync(sendingPlayer) end) return success and canSend end local canInvite = canSendGameInvite(player) if canInvite then SocialService:PromptGameInvite(player) end
local SocialService = game:GetService("SocialService") local Players = game:GetService("Players") local player = Players.LocalPlayer local receiverUserID = 505306092 -- Construct invite options with connection's user ID local inviteOptions = Instance.new("ExperienceInviteOptions") inviteOptions.InviteUser = receiverUserID -- Function to check whether the player can send an invite local function canSendGameInvite(sendingPlayer) local success, canSend = pcall(function() return SocialService:CanSendGameInviteAsync(sendingPlayer, receiverUserID) end) return success and canSend end local canInvite = canSendGameInvite(player) if canInvite then SocialService:PromptGameInvite(player, inviteOptions) end
To further improve in-experience cooperation or to incentivize player invites, you can include launch data in an invite prompt, useful for scenarios such as routing invited connections to a coordinate location or personalizing the joining experience for the invitee.
When prompting an invite, include an
Class.ExperienceInviteOptions object with relevant data that will be used when the connection joins the experience, for example the sender's Class.Player.UserId, the ID of a badge to award to the connection upon joining, or a coordinate location to spawn the connection at. If you need to compile multiple pieces of data, encode the data using Class.HttpService:JSONEncode()|JSONEncode().
local HttpService = game:GetService("HttpService") local SocialService = game:GetService("SocialService") local Players = game:GetService("Players") local player = Players.LocalPlayer local data = { senderUserID = player.UserId, spawnLocation = {12, 48, 205.5} } local launchData = HttpService:JSONEncode(data) -- Construct invite options with launch data local inviteOptions = Instance.new("ExperienceInviteOptions") inviteOptions.LaunchData = launchData -- Function to check whether the player can send an invite local function canSendGameInvite(sendingPlayer) local success, canSend = pcall(function() return SocialService:CanSendGameInviteAsync(sendingPlayer) end) return success and canSend end local canInvite = canSendGameInvite(player) if canInvite then SocialService:PromptGameInvite(player, inviteOptions) end
local HttpService = game:GetService("HttpService") local SocialService = game:GetService("SocialService") local Players = game:GetService("Players") local player = Players.LocalPlayer local receiverUserID = 505306092 local data = { senderUserID = player.UserId, spawnLocation = {12, 48, 205.5} } local launchData = HttpService:JSONEncode(data) -- Construct invite options with connection's user ID and launch data local inviteOptions = Instance.new("ExperienceInviteOptions") inviteOptions.InviteUser = receiverUserID inviteOptions.LaunchData = launchData -- Function to check whether the player can send an invite local function canSendGameInvite(sendingPlayer) local success, canSend = pcall(function() return SocialService:CanSendGameInviteAsync(sendingPlayer, receiverUserID) end) return success and canSend end local canInvite = canSendGameInvite(player) if canInvite then SocialService:PromptGameInvite(player, inviteOptions) end
For incoming connections who join via the notification, check for launch data on the server side through
Class.Player:GetJoinData(). If you encode multiple pieces of data into JSON for the invite prompt, remember to decode it with Class.HttpService:JSONDecode()|JSONDecode().
local HttpService = game:GetService("HttpService") local Players = game:GetService("Players") local ATTEMPT_LIMIT = 10 local RETRY_DELAY = 1 local function onPlayerAdded(player) local launchData for _ = 1, ATTEMPT_LIMIT do task.wait(RETRY_DELAY) local joinData = player:GetJoinData() if joinData.LaunchData ~= "" then launchData = joinData.LaunchData break end end if launchData then local data = HttpService:JSONDecode(launchData) print(data.senderUserID) print(data.spawnLocation) else warn("No launch data received!") end end Players.PlayerAdded:Connect(onPlayerAdded)
If the launch data exists, you can use it for a wide variety of design scenarios, including:
Class.Player.UserId in the launch data, and teleport the connection's character near their character.