/ shared/Discord Activities


title: "Discord Activities" tags: "Discord Activities, AddressRewriter, .Net, DotNet"

Discord Activities를 사용하면 WebAssembly 게임을 Discord에 직접 통합할 수 있습니다. 이 환경에서 멀티플레이어 게임은 아래에 설명된 추가 요구 사항을 충족해야 합니다. 그 외 모든 사항은 Discord 개발 가이드를 참조하세요.

Photon 관점에서 가장 중요한 부분은: Photon의 주소에 대한 URL 매핑을 설정해야 하며, 클라이언트는 그에 따라 서버 URL을 재작성해야 한다는 점입니다.

이는 Photon Realtime .Net SDK 및 유니티 SDK v4.1.8.11 이상, v5.1.1 이상에서 지원됩니다.

요구 사항 및 설정

"Discord Activity"로 실행되는 애플리케이션은 보안 페이지(https)에 호스트 되므로 임의의 서버 주소와 통신할 수 없습니다. 모든 통신은 discordsays.com을 통해 이루어져야 합니다.

Discord는 "URL Mapping"을 통해 애플리케이션이 필요로 하는 임의의 주소에 대해 discordsays.com 상의 경로를 설정할 수 있도록 합니다.

Discord Activity에 대한 URL 매핑 예시(일부 생략):

Discord URL Mapping
Discord URL Mapping

Photon 서버는 exitgames.comphotonengine.io 도메인에서 실행됩니다. Industries Circle 회원은 *.photonindustries.io 도메인만 사용할 수 있습니다.

각 머신은 고유의 서브도메인을 가지며(예: 네임서버용 ns.photonengine.io), 경우에 따라 경로(일반적으로 "Master" 또는 "Game")를 사용합니다. 이 경로도 그대로 유지해야 합니다.

Photon Cloud의 가변 주소 범위를 처리하려면 매핑에서 "Parameter Matching"을 사용하세요:

/photonengine/{subdomain} -> {subdomain}.photonengine.io

Address Rewriter

Photon용 URL 매핑을 설정하면 discordsays.com 경로를 통해 접근할 수 있지만, 클라이언트는 여전히 원래 Photon 서버 URL을 사용하려고 시도합니다. 따라서 클라이언트 측에서 주소 재작성을 코드로 수행해야 합니다.

Photon 클라이언트에서 서버 주소를 수정하려면 client.AddressRewriter 함수를 사용합니다. 이 함수를 등록하면, 연결을 시도하기 전마다 Func<string, ServerConnection, string> 델리게이트가 호출되어 주소를 변환할 수 있습니다.

Discord Activities용 주소 재작성 예시:

C#

string clientId = "12345678"; // your app's discord client id

private string AddressRewriterDiscord(string address, ServerConnection serverType)
{
    bool isUri = Uri.TryCreate(address, UriKind.Absolute, out Uri uri);
    if (isUri)
    {
        string host = uri.Host;
        string[] hostSplit = host.Split('.');
        if (hostSplit.Length != 3)
        {
            Debug.LogError($"Host address could not be split into 3 parts (subdomain, domain and tld).");
            return address;
        }

        string subdomain = hostSplit[0];
        string domain = hostSplit[1];

        string discordAddress = $"{uri.Scheme}://{clientId}.discordsays.com/.proxy/{domain}/{subdomain}{uri.path}";
        //Debug.Log($"discordAddress: {discordAddress}");
        return discordAddress;
    }

    return address;
}

주소 재작성을 적용하려면 클라이언트 연결 전에 메서드를 등록하세요:

C#

client.AddressRewriter = AddressRewriterDiscord;

{% if PUN_v2 %}
PUN에서는 다음을 설정하세요:

C#

PhotonNetwork.NetworkingClient.AddressRewriter = AddressRewriterDiscord;

{% endif %}

이 코드는 Discord Activity 전용 빌드에서만 사용하세요.

관련 주제

Discord Activity로 앱을 성공적으로 실행하려면, 유니티에서 생성된 HTML의 데이터 경로도 ".proxy" 주소를 사용하도록 조정해야 합니다.

Discord Data Paths
Discord Data Paths
Back to top