월드에 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()이 같은 일을 해요.
월드가 아직 목록에 없다면 먼저 등록해요. 공개되면 내 월드에서 앱 키를 만들 수 있어요.
내 월드 등록하기