다음을 통해 공유


CloudScript 조치 사용과 PlayStream

PlayStream 조치에서 CloudScript 핸들러가 출범하면 그 핸들러는 왜 그것이 실행되고 있는지(해당 컨텍스트)에 대한 추가적인 데이터에 액세스할 수 있어서 귀하는 그것을 이용해 서버측 논리를 추진할 수 있습니다.

이 자습서는 해당 상황에서 사용할 수 있는 모든 항목과 CloudScript 핸들러에서 사용하는 방법을 보여줍니다.

CloudScript 기본 사항

CloudScript를 최대한 활용하기 위한 관건은 사용할 수 있는 입력, 즉, 핸들러를 위한 인수와 상황으로 작업하는 방법을 아는 것입니다.

예컨대, 여기에 스타터 CloudScript에서, 새로 생성돤 모든 타이틀에 개정 1로 로드된 helloWorld 예가 있습니(또한 아래에 표시된 GitHub에서도 입수 가능).

// This is a CloudScript function.
// "args" is set to the value of the "FunctionParameter" parameter of the ExecuteCloudScript API.
// "context" contains additional information when the CloudScript function is called from a PlayStream action.
handlers.helloWorld = function (args, context) {

    // The pre-defined "currentPlayerId" variable is initialized to the PlayFab ID of the player logged-in on the game client.
    // CloudScript handles authenticating the player automatically.
    var message = "Hello " + currentPlayerId + "!";

    // You can use the "log" object to write out debugging statements. It has
    // three functions corresponding to logging level: debug, info, and error. These functions
    // take a message string and an optional object.
    log.info(message);
    var inputValue = null;
    if (args != null && args != undefined)
    {
        inputValue = args.inputValue;
    }
    log.debug("helloWorld:", { input: inputValue });

    // The value you return from a CloudScript function is passed back
    // to the game client in the ExecuteCloudScript API response, along with any log statements
    // and additional diagnostic information, such as any errors returned by API calls or external HTTP
    // requests. They are also included in the optional player_executed_cloudscript PlayStream event
    // generated by the function execution.
    return { messageValue: message };
}

이 예는 클라이언트에서 ExecuteCloudScript를 통해 CloudScript를 호출하는 일반적인 사용 사례를 보여줍니다. 그것은 inputValue 키를 사용해 전달된 인수를 확인하고, 그 키 값을 집행을 위해 디버그 로그 정보에 반환된 텍스트의 일부로 사용합니다.

상황에 맞는 입력 파라미터

그러나, 규칙(자동화->규칙), 세그먼트 출/입 조치(플레이어->세그먼트), 또는 작업 서비스(자동화->작업)를 통해 PlayStream에서 이벤트의 결과로 CloudScript를 호출하는 것도 가능합니다.

이렇게 하면 함수에 전달된 컨텍스트가 적절한 조치를 취하기 위해 필요한 모든 정보를 제공합니다.

PlayStream 이벤트가 어떻게 기능하는지에 대한 기본 사항을 알아보려면 우리 블로그 PlayStream 소개를 읽고, PlayStream 이벤트 타입 및 그 속성의 목록은 우리의 PlayFab API 참조를 참조하십시오.

이 조치를 보려면 동일한 샘플 CloudScript에서 handlePlayStreamEventAndProfile 핸들러를 참조하십시오.

// This is a simple example of a function that is called from a
handlers.handlePlayStreamEventAndProfile = function (args, context) {

    // The event that triggered the action.
    // For a list of event types, see our PlayFab API documentation.
    var psEvent = context.playStreamEvent;

    // The profile data of the player associated with the event
    var profile = context.playerProfile;

    // Post data about the event to an external API
    var content = JSON.stringify({user: profile.PlayerId, event: psEvent.EventName});
    var response = http.request('https://httpbin.org/status/200', 'post', content, 'application/json', null, true);

    return { externalAPIResponse: response };
}

PlayStream 촉발 CloudScript 호출의 경우에, 컨텍스트에 포함된 3 요소를 사용해 서버 권한 핸들러 논리를 추진할 수 있습니다.

  1. 위의 코드 예에서 playStreamEvent를 확인할 수 있습니다. playStreamEvent는 JSON 개체로서의 핸들러를 촉발한 완전한 이벤트를 PlayStream 이벤트 설명서에 설명된 모든 파라미터와 함께 포함합니다. 그러므로 예컨대, player_logged_in event에서 귀하의 타이틀에 handlePlayStreamEventAndProfile라는 규칙을 설정하면 playStreamEvent.EventNameplayer_logged_in 등이 될 것입니다(여기에 해당 이벤트를 위한 온전한 파라미터 세트가 있습니다).

  2. 다음의 playerProfile은 이전 예에서도 나타납니다. 이것은 이벤트를 촉발한 플레이어에 대한 정보를 포함합니다. 여기서 프로필 파라미터의 모든 세부 사항을 찾을 수 있지만 무엇보다도 그것은 귀하의 타이틀에 있는 플레이어에 대한 온전한 통계 세트뿐만 아니라 귀하가 해당 플레이어에게 지정한 맞춤 태그도 포함하므로 귀하는 매우 풍부한 의사 결정을 위해 그 데이터를 사용할 수 있습니다.

  3. 컨텍스트의 마지막 요소는 triggeredByTask입니다. 규칙 및 세그먼트 출/입 트리거를 사용할 때 설정되는 첫 둘과 달리, triggeredByTask는 핸들러가 수동이든 타이머에서든 작업의 결과로 실행될 때만 해당됩니다. 다음 두 파라미터만 포함됩니다:

  • 명칭 – 작업 생성시 부여한 고유 명칭.

  • ID – 작업을 위해 PlayFab이 자동으로 생성한 고유 식별자.

사용자 세그먼트에 대해 실행되는 작업의 경우, 귀하는 playerProfile도 갖지만 playStreamEvent는 갖지 않을 것입니다.

그리고 단순히 귀하의 게임에 대해 실행되지만 세그먼트가 없는 작업의 경우, 그 의도는 어떤 이벤트를 위한 약간의 타이틀 데이터 설정 같은 더욱 일반적인 것을 실행하는 것이기 때문에 playerProfile은 없을 것입니다.

그러므로 명칭은 귀하가 취할 적절한 조치를 결정하기 위해 핸들러의 코드 흐름에서 사용할 요소입니다.

PlayStream 및 CloudScript

여러 가지 면에서 PlayStream 조치에 의해 촉발된 CloudScript 핸들러는 컨텍스트를 통해 제공되는 풍부한 데이터 세트가 있기 때문에 ExecuteCloudScript 호출을 통해 직접 촉발된 것보다 훨씬 더 많은 잠재적 기능을 갖습니다.

따라서 귀하가 원래 예상하지 않았던 이벤트 또는 플레이어 프로필 요소를 사용하는 추가적 논리로 출범후 핸들러를 업데이트할 수 있기 때문에 클라이언트 코드를 어떤 식으로든 업데이트할 필요가 없습니다.

그뿐만 아니라 우리는 PlayFab 서비스의 향후 업데이트에서 플레이어 프로필을 계속 추가함으로써 서버측 논리를 위해 더욱 많은 옵션을 제공할 것입니다.