PC SDK는 부가서비스를 게임에 통합할 수 있도록 API를 제공합니다.

PC SDK가 지원하는 부가서비스로는 사용자정의 이벤트 로그, PC SDK 버전 조회, 과몰입방지 알림, 셧다운 알림, 추적 단서 조회가 있습니다.

게임은 게임내 사용자정의 이벤트(게임 로그)를 스토브 플랫폼으로 전송할 수 있습니다. 또한 게임은 현재 사용중인 PC SDK의 유의적 버전을 조회할 수 있습니다.

PC SDK의 유의적 버전 조회는 콜백이 아닌 리턴값으로 획득이 가능합니다.

과몰입방지 알림은 매시간 게임 과몰입에 대한 경고 문구를 콜백을 통해 전달합니다.

셧다운 알림은 만 18세 미만의 청소년이 부모에 의해 요일별 특정시간에 게임을 이용 할 수 없도록 제한을 하는 시스템으로써 요건이 충족되면 최대 4회에 걸쳐 알림을 콜백을 통해 전달합니다.

1. Callback 설정

부가서비스 API를 사용하여 PC SDK와 커뮤니케이션 하기 위하여, 게임에서는 아래 StovePCCallback 구조체의 콜백 포인터에 연결할 델리게이트 함수를 정의해야 합니다.

public class StovePCCallback
{
    public StovePCErrorDelegate OnError;
    public StovePCInitializationCompleteDelegate OnInitializationComplete;
    public StovePCTokenDelegate OnToken;
    public StovePCUserDelegate OnUser;
    public StovePCOwnershipDelegate OnOwnership;
    // FetchTermsAgreement 처리가 완료됐을 때 호출되는 콜백
    public StovePCFetchTermsAgreementDelegate OnFetchTermsAgreement;

    public StovePCStatDelegate OnStat;
    public StovePCSetStatDelegate OnSetStat;
    public StovePCAchievementDelegate OnAchievement;
    public StovePCAllAchievementDelegate OnAllAchievement;
    public StovePCRankDelegate OnRank;

    // StashCustomEvent 처리가 완료됐을 때 호출되는 콜백
    public StovePCStashCustomEventDelegate OnStashCustomEvent;

    // ADD 2.6.0 Start
    // 과몰입방지를 위해 매시간 호출되는 콜백
    public StovePCOverImmersionDelegate OnOverImmersion;

    // 셧다운 제한시 호출되는 콜백
    public StovePCShutdownDelegate OnShutdown;
    // 2.6.0 End
}

PC SDK 연동하기 2. Config, Callback 설정에서와 같이 StovePCCallback 클래스의 콜백에 델리게이트를 연결합니다.

// StovePCCallback 클래스 instance 생성
this.callback = new StovePCCallback
{
    OnError = new StovePCErrorDelegate(this.OnError),
    OnInitializationComplete = new StovePCInitializationCompleteDelegate(this.OnInitializationComplete),
    OnToken = new StovePCTokenDelegate(this.OnToken),
    OnUser = new StovePCUserDelegate(this.OnUser),
    OnOwnership = new StovePCOwnershipDelegate(this.OnOwnership),

    // 게임지원서비스
    OnStat = new StovePCStatDelegate(this.OnStat),
    OnSetStat = new StovePCSetStatDelegate(this.OnSetStat),
    OnAchievement = new StovePCAchievementDelegate(this.OnAchievement),
    OnAllAchievement = new StovePCAllAchievementDelegate(this.OnAllAchievement),
    OnRank = new StovePCRankDelegate(this.OnRank),

    //부가서비스
    OnStashCustomEvent = new StovePCStashCustomEventDelegate(this.OnStashCustomEvent)
    // ADD 2.6.0 Start
    OnOverImmersion = new StovePCOverImmersionDelegate(this.OnOverImmersion);
    OnShutdown = new StovePCShutdownDelegate(this.OnShutdown);
    // 2.6.0 End
};

OnStashCustomEvent 콜백을 반드시 구현할 필요는 없습니다. 게임에서 사용자정의 이벤트 로그 기능을 사용할 경우만 연결하면 됩니다.

<aside> 💡 경고

OnOverImmersion 콜백은 법률에 의거 게임과몰입/중독 예방조치가 필요한 경우 반드시 구현하여야 합니다. OnShutdown 콜백은 법률에 의거 선택적 셧다운이 필요한 경우 반드시 구현하여야 합니다.

</aside>

2. 사용자정의 이벤트 로깅

StovePC.StashCustomEvent 함수로 사용자정의 이벤트(게임 로그)를 로깅합니다.

// 입력 파라미터
// string name: 이벤트명
// string category1 : 1차 카테고리명
// string category2 : 2차 카테고리명
// float simpleValue : 간단한 값
// StovePCCustomEventParameter[] parameters : 세부적인 파라미터 정보
StovePCResult result = StovePC.StashCusomEvent("EVENT_NAME", "CATEGORY1", "CATEGORY2", 1.0f, parameters);
if(result == StovePCResult.NoError)
{
    // 성공 처리
}

StovePC.StashCustomEvent 함수가 정상적으로 처리되면 OnStashCustomEvent 콜백이 호출됩니다.

콜백에 전달되는 StovePCCustomEvent 구조체에는 API 호출시 전달한 이벤트명, 1차 카테고리명, 2차 카테고리명, 간단한 값이 포함되어 있습니다.

콜백에 전달되는 StovePCCustomEventParameter 구조체에는 API 호출시 전달한 파라미터 정보가 포함되어 있습니다.

void OnStashCustomEvent(StovePCCustomEvent customEvent, StovePCCustomEventParameter[] parameters)
{
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("OnStashCustomEvent");
    sb.AppendFormat(" - customEvent.Name : {0}" + Environment.NewLine, customEvent.Name);
    sb.AppendFormat(" - customEvent.Category1 : {0}" + Environment.NewLine, customEvent.Category1);
    sb.AppendFormat(" - customEvent.Category2 : {0}" + Environment.NewLine, customEvent.Category2);
    sb.AppendFormat(" - customEvent.SimpleValue : {0}" + Environment.NewLine, customEvent.SimpleValue.ToString());

    sb.AppendFormat(" - parameters.Length : {0}" + Environment.NewLine, parameters.Length);

    for (int i = 0; i < parameters.Length; i++)
    {
        sb.AppendFormat(" - parameters[{0}].Name : {1}" + Environment.NewLine, i, parameters[i].Name);
        sb.AppendFormat(" - parameters[{0}].Value : {1}", i, parameters[i].Value);

        if (i < parameters.Length - 1)
            sb.AppendFormat(Environment.NewLine);
    }

    Debug.Log(sb.ToString());
}