월드에 Meta GTD를 붙여요

로그인 한 번으로 사용자를 알아보고, 접속 상태와 점수, 활동을 올리면 친구 목록과 레더보드, 프로필에 그대로 보여요. 앱 키는 내 월드에서 만들어요.

1. 로그인 연동 (OAuth 2.0, PKCE)

사용자를 https://meta.goldtreedev.com/oauth/authorize로 보내고, 돌아온 code를 토큰으로 바꿔요. 브라우저만 있는 월드는 PKCE로, 서버가 있으면 client_secret으로 교환해요.

GET /oauth/authorize

client_id, redirect_uri, scope, state, 선택으로 code_challenge(S256). 사용자가 허용하면 redirect_uri?code=…&state=…로 돌아가요.

POST /api/oauth/token

POST https://meta.goldtreedev.com/api/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=...&client_id=...&redirect_uri=...
&code_verifier=...            # PKCE를 쓰면 (브라우저)
# 또는 &client_secret=...      # 서버에서 교환할 때

→ { "access_token": "gtd_at_...", "token_type": "Bearer", "expires_in": 2592000, "scope": "profile presence", "public_id": "..." }

GET /api/oauth/userinfo

Authorization: Bearer 토큰으로 사용자 정보를 받아요. friends 권한이 있으면 친구 공개 ID 배열도 함께 와요.

권한(scope)

profile
닉네임, 프로필 사진, 공개 ID. 항상 포함돼요.
presence
사용자가 월드에 있는 동안 접속 상태를 올릴 수 있어요.
scores
레더보드에 점수를 올릴 수 있어요.
activities
이용 기록(활동)을 남길 수 있어요.
friends
사용자의 친구 공개 ID 목록을 읽을 수 있어요.

2. JS SDK로 빠르게

스크립트 한 줄이면 로그인, 접속 상태, 점수, 활동, 유입 확인까지 끝나요.

<script src="https://meta.goldtreedev.com/sdk/meta-gtd.js"></script>
<script>
  const gtd = new MetaGTD({
    clientId: "YOUR_CLIENT_ID",
    redirectUri: location.origin + "/",          // 앱 키에 등록한 주소
    scope: "profile presence scores activities",
  });

  // 로그인 뒤 돌아왔을 때 토큰으로 바꿔요
  gtd.handleRedirect().then(async (token) => {
    if (!token) return;
    const me = await gtd.me();                   // { public_id, username, avatar_url, ... }
    gtd.startPresence("로비");                    // 45초마다 접속 상태를 보내요
  });

  document.querySelector("#login").onclick = () => gtd.login();

  // 플레이 중
  gtd.setActivity("보스전 2층");
  gtd.submitScore(12800, { board: "weekly", mode: "max" });
  gtd.logActivity("quest", "첫 번째 퀘스트를 끝냈어요");

  // 우리 사이트를 거쳐 왔는지
  gtd.verifyReferral().then((r) => { if (r && r.valid) console.log("Meta GTD에서 왔어요", r.visitor); });
</script>

3. 파트너 API

모두 Authorization: Bearer(사용자 토큰) 또는 X-Client-Id + X-Client-Secret + public_id(서버)로 불러요. CORS가 열려 있어요.

POST /api/partner/presence

{ "activity": "로비" }를 30~60초마다 보내면 친구에게 “○○ 월드에 있어요”로 보여요. { "online": false }면 바로 나간 것으로 처리해요. 사용자가 설정에서 숨기면 보이지 않아요.

POST /api/partner/scores

score(정수), 선택으로 board(기본 default), mode(max, replace, add), meta. 응답에 현재 순위가 와요. 읽기는 GET /api/partner/scores?client_id=…&board=…로 인증 없이 돼요.

POST /api/partner/activities

type(영문 키), title(사람이 읽는 문장), 선택 payload. 사용자 프로필의 이용 기록에 쌓이고 탐험가 순위에 반영돼요.

# 서버에서 사용자를 대신해 기록하기 (client_secret은 서버에만 두세요)
curl -X POST https://meta.goldtreedev.com/api/partner/scores \
  -H "X-Client-Id: YOUR_CLIENT_ID" \
  -H "X-Client-Secret: YOUR_CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"public_id":"USER_PUBLIC_ID","board":"default","score":9400,"mode":"max"}'

4. 우리 사이트에서 온 방문 알아보기

입장하기를 누르면 utm_source=meta.goldtreedev.com, utm_medium=referral, utm_campaign=meta-gtd, 그리고 24시간짜리 서명 토큰 gtd_ref을 붙여 넘겨요.

GET /api/referrals/verify?token=…

valid, expired, world(slug, name, url), visitor(로그인한 방문자면 publicId), firstVerification을 돌려줘요. SDK의 verifyReferral()이 같은 일을 해요.

월드가 아직 목록에 없다면 먼저 등록해요. 공개되면 내 월드에서 앱 키를 만들 수 있어요.

내 월드 등록하기

로그인

GoldTreeDev 통합 계정으로 들어가요

계정이 아직 없다면