게임 아이디어와 기능

다음에 추가할 기능

채팅 관리

메시지 보관, 명시적 구독 및 제한된 운영 관리.

SDK: develop 브랜치플레이어 세션 필요
Unity
채팅 관리 일러스트
확인할 수 있는 결과

기존 두 세션으로 프로젝트 채널 열기, 한 번 전송, 읽기 및 보관 메시지 신고. 직접 채팅은 친구, 그룹은 유효한 멤버십이 필요합니다.

동영상 준비 중

이 단계의 동영상은 아직 없습니다. 안내와 MCP 요청은 바로 사용할 수 있습니다.

채팅 관리

같은 프로젝트 준비

  1. 게임 설정과 같은 프로젝트를 대시보드에서 선택하세요.

    채팅 관리 →
  2. 첫 요청에는 추가 정의가 필요하지 않습니다. 일치하는 게임 데이터가 없으면 빈 결과도 정상입니다.

    기존 두 세션으로 프로젝트 채널 열기, 한 번 전송, 읽기 및 보관 메시지 신고. 직접 채팅은 친구, 그룹은 유효한 멤버십이 필요합니다.

    PHP simpleServer는 모든 Chat 경로에 501 NOT_SUPPORTED를 반환합니다.

이 기능 구현하기

가이드는 미리 볼 수 있습니다. 실행하려면 활성 프로젝트 키가 필요합니다. 프로젝트 준비

SDK 설치와 프로젝트 설정 가져오기가 완료되고 플레이어가 로그인해야 합니다.

이 SDK 예제는 develop을 사용합니다. 필요한 API가 설치된 SDK에 있는지 확인하세요.

빠른 시작으로 원하는 플레이어를 연결하세요. 명시적인 버튼이나 씬 동작에서 ReadChannelSnapshot(channelId)을 호출하세요. 파일을 여는 것만으로는 요청을 보내지 않습니다.

C#
Assets/Scripts/ChatDemo.cs
horizOn 호출
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4// Existing imported SDK and authenticated player session required.
5// Call these methods explicitly from a player action; nothing runs on startup.
6public sealed class ChatDemo : MonoBehaviour
7{
8 public async void ReadChannelSnapshot(string channelId)
9 {
10 var user = UserManager.Instance.CurrentUser;
11 if (user == null || !user.IsValid()) return;
12 var result = await ChatManager.Instance.SyncChannel(user.UserId, channelId);
13 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
14 Debug.Log("Snapshot epoch: " + result.Data.channel.epoch);
15 foreach (var message in result.Data.messages) Debug.Log(message.text);
16 // This is the small authorized server window, not the full device history.
17 // A raw snapshot does not authorize or populate a managed realtime feed.
18 // WatchChannel waits for confirmed subscription; revocation hides the feed.
19 }
20​
21 public void ReadDeviceHistory(string channelId, string before = null)
22 {
23 var user = UserManager.Instance.CurrentUser;
24 if (user == null || !user.IsValid()) return;
25 var page = ChatManager.Instance.ReadLocalHistory(channelId, before, 50);
26 if (!page.IsSuccess) { Debug.LogWarning(page.ErrorCode); return; }
27 foreach (var message in page.Data.messages) Debug.Log(message.text);
28 // Continue only on an explicit action using page.Data.nextCursor.
29 // Local delivered history can outlive the small current server window.
30 // For send/report, import the SDK ChatExample and preserve its original
31 // operationId, issuedAt, channel and text before one explicit send.
32 // An uncertain outcome never permits a fresh identity or implicit retry.
33 }
34}
전체 SDK 예제 열기 ↗

두 플레이어와 하나의 채널

기존 두 세션으로 프로젝트 채널 열기, 한 번 전송, 읽기 및 보관 메시지 신고. 직접 채팅은 친구, 그룹은 유효한 멤버십이 필요합니다.

관리 피드는 구독 확인 후 이벤트/resync, 하나의 Sync와 변경 표시를 사용합니다. 폴링이나 연결 끊김 대체는 없으며 권한 취소 시 텍스트를 숨깁니다.

보내기 전에 프로젝트/플레이어 원본을 저장하세요. 호스트/세션은 요청 경계일 뿐입니다. 불확실한 ID, 시간, 텍스트, 리비전을 바꾸지 마세요.

작업 404는 실패 증명이 아닙니다. timeout 또는 OPERATION_EXPIRED 뒤에도 원본을 보관하고 일치하는 영수증만 대조하세요.

원래 신고 ID와 사유를 재사용합니다. removed는 성공적인 재실행이며 REPORT_EXPIRED가 새 신고를 만들지 않습니다.

PHP simpleServer는 모든 Chat 경로에 501 NOT_SUPPORTED를 반환합니다.

새 기능을 테스트하세요.

기존 두 세션으로 프로젝트 채널 열기, 한 번 전송, 읽기 및 보관 메시지 신고. 직접 채팅은 친구, 그룹은 유효한 멤버십이 필요합니다.

게임 설정과 같은 프로젝트를 대시보드에서 선택하세요.

엔드포인트
  • GET/chat/limits
  • POST/chat/channels/open
  • POST/chat/channels/{channelId}/sync
  • POST/chat/channels/{channelId}/messages
  • GET/chat/operations/{operationId}
  • POST/chat/channels/{channelId}/messages/{messageId}/report
API 레퍼런스의 모든 엔드포인트
다음 단계에 대한 추천

모든 라운드에 최고 점수를 더하세요.

라운드가 끝나면 점수를 저장하고 선두를 보여주세요. 기존 연결과 플레이어 세션을 계속 사용하세요.