플레이어 초대 프롬프트

이용자층을 늘리기 위한 일반적인 프로모션 방법 이외에도 크리에이터는 체험 내에서 직접 초대 프롬프트를 실행하여 플레이어가 친구를 초대하고 공동 체험 게임 플레이를 늘리도록 권유할 수 있습니다.

초대 프롬프트 시스템은 다음과 같은 기능을 갖고 있습니다.

  • 다이내믹한 초대 대상자 - 플레이어가 선택 목록에서 여러 친구를 초대하거나, 특정 친구 한 명만 초대하도록 합니다.
  • 시작 데이터 - 초대받은 친구가 참여했을 때 Player:GetJoinData()을(를) 통해 읽을 수 있는 시작 데이터(선택 사항)를 포함합니다. 예제 사용 사례로는 초대받은 친구를 좌표 위치로 라우팅하거나 초대받은 친구에 맞춰 참여 경험을 개인화하는 것 등이 있습니다.
  • 사용자 정의 가능한 텍스트 - 초대 프롬프트 메시지와 알림 메시지를 사용자 정의합니다. 예를 들어, 플레이어를 위한 초대 프롬프트는 '친구들에게 모험에 참여하도록 권해 보세요!'라고 할 수 있고, 초대받은 친구를 위한 알림 메시지는 '{displayName} 님이 {experienceName}에서 함께 모험을 즐기고 싶어해요!'라고 표현할 수 있습니다.
여러 명의 친구를 초대하는 프롬프트
특정 친구 한 명을 초대하는 프롬프트

초대 옵션 설정

기본적으로 플레이어를 위한 초대 프롬프트는 초대(Invite) 버튼과 함께 친구들이 나와 있는 메뉴를 보여줍니다. 프롬프트 메시지를 사용자 정의하거나, 특정 친구를 대상으로 지정하거나, 초대에 시작 데이터를 포함하려면 원하는 속성으로 ExperienceInviteOptions 개체를 설정해야 합니다.

속성유형설명
PromptMessage문자열초대를 보내는 플레이어를 위한 초대 프롬프트에 표시되는 사용자 정의 텍스트입니다. 예를 들어, '친구들에게 모험에 참여하도록 권해 보세요!'라는 텍스트를 여러 명의 친구를 초대하는 프롬프트에 사용하거나, '이 친구를 모험에 참여하도록 권해 보세요!'라는 텍스트를 특정 친구 한 명에게 보내는 초대 프롬프트에 사용할 수 있습니다. 단, 초대 프롬프트를 위한 사용자 정의 메시지가 너무 길어 UI 경계를 벗어나면 표시되지 않으니 주의하세요.
InviteUser숫자초대 대상인 특정 친구의 Roblox UserId입니다. 제공되지 않을 경우, 플레이어는 친구 목록에서 선택하라는 메시지를 받게 됩니다.
InviteMessageId문자열알림 애셋 유형에 매핑하는 애셋 ID입니다. 이 애셋은 친구들이 받는 초대 알림을 위한 사용자 정의 문자열을 저장/로컬라이즈하는 데 사용됩니다. 자세한 내용은 알림 옵션 설정에서 확인하실 수 있습니다.
LaunchData문자열초대 알림을 통해 친구가 참여할 때 Player:GetJoinData()에 매개변수를 설정하는 데 사용합니다. 최대 200자까지 입력할 수 있습니다. 시작 데이터 포함에서 사용 예제를 보실 수 있습니다.
LocalScript - Invite Multiple Friends

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 friends to join the adventure!"

알림 옵션 설정

친구들이 받는 초대 알림에는 기본적으로 보낸 사람의 DisplayName, 사용자 이름 및 체험 이름이 포함되어 있습니다. 이 메시지를 사용자 정의하려면 크리에이터 대시보드에서 알림 애셋을 만들고 해당 애셋 ID를 ExperienceInviteOptions의 매개변수로 포함하면 됩니다.

  1. 크리에이터 대시보드로 이동합니다.

  2. 배지와 비슷하게, 알림 문자열은 특정 체험에 연결되어 있습니다. 해당 체험의 섬네일을 찾아서 클릭합니다.

  3. 왼쪽 열에서 알림을 클릭합니다.

  4. 가운데 영역에서 '알림 문자열 만들기(Create a Notification String)' 버튼을 클릭합니다.

  5. 식별자 이름(크리에이터에게만 보임)과 사용자 정의 알림 텍스트를 입력합니다. 초대받은 친구에 대한 체험 이름을 식별할 수 있도록 **{experienceName}**을 자리 표시자로 포함해야 하며, 원하는 경우 {displayName} 자리 표시자를 통해 보낸 사람의 DisplayName을 포함할 수도 있습니다. 예를 들면 다음과 같습니다.

    • {displayName} 님이 **{experienceName}**에서 함께 모험을 즐기고 싶어해요!
    • {displayName} 님이 방금 **{experienceName}**에서 6단계를 완료하셨습니다. 도전하시겠어요?
  6. 준비되었으면 '알림 문자열 만들기(Create Notification String)' 버튼을 클릭합니다.

  7. 알림에 대한 버튼을 클릭하고

  8. 초대 프롬프트에 대한 ExperienceInviteOptions 개체에서 이 애셋 ID를 InviteMessageId 속성의 값으로 붙여 넣습니다.

    LocalScript - Invite Multiple Friends

    local SocialService = game:GetService("SocialService")
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    -- Construct invite options with friend's user ID
    local inviteOptions = Instance.new("ExperienceInviteOptions")
    inviteOptions.InviteMessageId = "ef0e0790-e2e8-4441-9a32-93f3a5783bf1"

초대 프롬프트 표시하기

플레이어에게 초대를 권유하려면 먼저 플레이어가 초대를 보낼 능력이 있는지 확인해야 합니다. 이 능력은 플랫폼이나 플레이어에 따라 다를 수 있기 때문입니다. 확인했으면 이제 플레이어에게 초대 프롬프트를 표시할 수 있습니다.

  1. pcall()에 둘러싸인 상태로 SocialService:CanSendGameInviteAsync()를 호출합니다. 비동기 네트워크 호출로서 가끔 실패할 수 있기 때문입니다.
  2. 초대 능력이 확인되었으면, 선택 사항인 초대 옵션 개체를 두 번째 인수로 지정하여 SocialService:PromptGameInvite()를 호출합니다.

프롬프트가 실행되면 플레이어는 초대 옵션 개체에 나와 있는 특정 친구나 여러 명의 친구를 초대하라는 프롬프트를 화면에서 보게 됩니다. 플레이어가 한 명 또는 여러 명의 친구에 대해 '초대(Invite)' 버튼을 클릭하면 해당 친구들은 초대를 보낸 플레이어의 DisplayName, 사용자 이름 및 체험 이름이 포함된 알림을 받게 됩니다. 알림은 알림 옵션 설정에 나와 있듯이 더 자세히 사용자 정의할 수 있습니다.

LocalScript - Invite Multiple Friends

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
local success, errorMessage = pcall(function()
SocialService:PromptGameInvite(player)
end)
end

시작 데이터 포함

체험에서 플레이어들 간에 더 잘 협동하도록 하거나 플레이어에게 초대를 보내도록 장려하려면 초대 프롬프트에 시작 데이터를 포함하는 것이 좋습니다. 이러한 시작 데이터는 초대받은 친구들을 좌표 위치로 라우팅하거나 초대받은 친구에 맞춰 참여 경험을 개인화하는 등의 시나리오에서 유용합니다.

  1. 초대 메시지를 표시할 때, 친구가 체험 참가 시 사용될 관련 데이터와 함께 ExperienceInviteOptions 개체를 포함하세요(예: 보낸 사람의 Player.UserId, 참가 시 친구에게 수여할 배지 ID 또는 친구를 스폰할 좌표 위치). 여러 데이터 조각을 컴파일해야 하는 경우 JSONEncode()를 사용하여 데이터를 인코딩합니다.
LocalScript - Invite Multiple Friends

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
local success, errorMessage = pcall(function()
SocialService:PromptGameInvite(player, inviteOptions)
end)
end
  1. 알림을 통해 참가하는 친구의 경우 Player:GetJoinData()를 통해 서버 측의 실행 데이터를 확인하세요. 여러 데이터 조각을 컴파일해야 하는 경우, JSONEncode()를 사용하여 데이터를 인코딩하세요.

    Script - Using Invite Launch Data

    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 i = 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)
  2. 시작 데이터가 존재하는 경우, 다음을 포함하는 다양한 설계 시나리오에 활용할 수 있습니다.

    • 시작 데이터를 통해 전달한 좌표 위치를 기반으로, 보낸 사람이 방금 완료한 장애물 도전 코스의 도입부에서 들어오는 친구를 스폰합니다.
    • 시작 데이터에 있는 Player.UserId를 기반으로 보낸 사람이 플레이스에 있는지 확인하고, 친구의 캐릭터를 보낸 사람의 캐릭터 가까이로 텔레포트합니다.