푸시 알림 빠른 시작

PlayFab에서 푸시 알림은 세 가지 주요 시스템의 연결로 활성화됩니다.

  1. 플레이어의 장치 OS (Android, iOS 등)
  2. 공급 업체별 채널 (Google, Apple 등)
  3. 교차 플랫폼 메시지 라우팅 (Amazon Simple Notification Service [SNS]를 통한 PlayFab)

참고 항목

이러한 시스템 중 하나가 연결 해제되면 클라이언트는 알림 수신을 중단합니다.. 우연히 세 시스템 중 하나를 변경하고 링크를 깨는 것은 상당히 간단합니다. 또한 모든 시스템이 올바르게 구성되어 있으면 플로우의 개별 지점에서 알기가 어렵습니다.

PlayFab 푸시 라우팅 시스템

모든 PlayFab 타이틀은 주어진 시간에 하나의 Google (GCM) 및 하나의 Apple Push (APNS, APNS_SANDBOX) 알림 채널을 활성화할 수 있습니다. 다음 두 가지 방법 중 하나로 구성할 수 있습니다.

  1. 설정에서 게임 관리자 UI 사용 - 푸시 알림>.
  2. PlayFab 관리 API사용하기 - SetupPushNotification.

자세한 설치 정보는 다음 튜토리얼을 읽어보세요.

게임 내에서의 푸시 메시지

푸시 메시지는 개발 엔진/플랫폼에 따라 다릅니다. 그러나 푸시 알림을 수신하는 가장 쉬운 방법은 SDK에 Unity 프로젝트를 사용하고 Android 용 FCM (Firebase 클라우드 메시징) 플러그인을 사용하거나 iOS 용 Unity를 사용하는 것입니다.

  • Android에서 푸시 받기 - 여기에는 플러그인이 필요합니다. 지원이 제일 잘되는 플러그인은 기본 FCM 플러그인입니다.
  • iOS에서 푸시 받기 - 기본 푸시 메시지에 플러그인을 요구하지 않습니다..

FCM Unity 플러그인을 설치하는 방법에 대한 지침은 FCM 문서를 참조하거나 Android 스튜디오를 푸시하세요.

설정 테스트

제목과 클라이언트를 구성한 후 PlayFab 서버 API를 사용하여 구성을 테스트 할 수 있습니다. - SendPushNotification. 이 API를 사용하면 추가 비용없이 필요한 만큼 푸시 알림을 보낼 수 있습니다.

PlayFab CloudScript 서비스를 빠르고 안전한 서버 API 환경으로 사용할 수 있습니다. 거기에서 필요에 따라 푸시 알림을 보낼 수 있습니다.

이 방법을 사용하여 구성을 테스트하려면 다음 예제의 코드를 타이틀의 CloudScript에 업로드하거나 추가하세요.

예제

다음과 같은 시나리오를 생각해보세요.

  • 타이틀에 있는 플레이어는 순위 통계에 따라 순위표에 액세스할 수 있습니다.

  • 각 플레이어는 1 CH 통화를 지불하고 현재 플레이어에서 최대 5 포지션 떨어진 다른 플레이어에게 도전할 수 있습니다.

먼저 가상 화폐를 정의하는 방법에 대한 정보는 아래 예제 스크린 샷 (가상 화폐 정의 방법에 대한 정보는 통화튜토리어 참조)에 표시된 가상 화폐를 고려하세요.

PlayFab 경제 - 통화 - 새 통화

이제 각 플레이어에 대해 정의된 다음 통계를 고려해보세요 (테스트 순위표를 어떻게 생성하는지에 대한 정보를 보려면 보관된 토너먼트 결과에 액세스하기 튜토리얼을 참조).

PlayFab 플레이어 통계 - 순위

이러한 선행 조건을 설정하면 푸시 알림 챌린지 시스템을 설정할 수 있습니다.

다음 클라이엍트 코드는 CloudScript ChallengePlayer를 호출합니다.

public void ChallengeRandomClosePlayer(string currentPlayerId) {
    PlayFabClientAPI.GetLeaderboardAroundPlayer(new GetLeaderboardAroundPlayerRequest() {
        MaxResultsCount = 10,
        StatisticName = "Rank",
        PlayFabId = currentPlayerId,
    }, result => OnLeaderboardLoaded(result,currentPlayerId),OnPlayFabError);
}

private void OnLeaderboardLoaded(GetLeaderboardAroundPlayerResult leaderboard, string currentPlayerId) {
    var index = (int)(UnityEngine.Random.value * (leaderboard.Leaderboard.Count-1));
    if (leaderboard.Leaderboard[index].PlayFabId == currentPlayerId)
        index = (index + 1) % leaderboard.Leaderboard.Count;
    var targetId = leaderboard.Leaderboard[index].PlayFabId;

    PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest() {
        FunctionName = "ChallengePlayer",
        FunctionParameter = new Dictionary<string, object>() {
            { "TargetId", targetId }
        }
    }, null, OnPlayFabError);
}

public void OnPlayFabError(PlayFabError obj) {
    Debug.Log(obj.GenerateErrorReport());
}

ChallengePlayer CloudScript 코드는 요청을 처리하고 순위표 상태의 유효성을 검사하며 챌린지 푸시 알림을 대상에게 보냅니다.

handlers.ChallengePlayer = function (args) {
    var targetId = args.TargetId;
    var leaderboard = server.GetLeaderboardAroundUser({
        MaxResultsCount : 10,
        PlayFabId : currentPlayerId,
        StatisticName : "Rank"
    });

    for(var i = 0; i < leaderboard.Leaderboard.length; i++) {
        var target = leaderboard.Leaderboard[i];
        if(target.PlayFabId !== targetId) continue;

        // subtract virtual currency from current player
        server.SubtractUserVirtualCurrency({
            VirtualCurrency : "CH",
            PlayFabId : currentPlayerId,
            Amount : 1
        });

        // get current player profile
        var profile = server.GetPlayerProfile({
            PlayFabId : currentPlayerId
        }).PlayerProfile;

        // try to send push notification
        try {
            server.SendPushNotification({
                Recipient : targetId,
                Package : {
                    Message : `${profile.DisplayName} challenges you for a battle!`,
                    Title: "You have been challenged",
                }
            });
        } catch (ex) {
            // Target player has not registered for Push Notifications
        }
        return;
    }
}

푸시 알림 사용

푸시 알림을 사용할 수 있는 능력은 놀라운 것입니다. 그러나 악용될 경우, 그러나 사용자가 향후 알림을 수신 거부할 수 있습니다. 또는 게임을 완전히 떠날 수 있습니다.

하지만 현명하게 사용한다면 푸시 알림은 게임 커뮤니티를 구축하고 유지 관리하기 위한 최상의 도구 중 하나가 될 수 있습니다.

푸시 알림은 배달을 보장하지 않는 전송 후 지움 메시지 프로토콜입니다.

참고 항목

플레이어가 메시지를 열거나 관여할 것이라는 보장이 없음을 기억하세요. 이러한 주의 사항을 감안할 때 메시지를 게임 플레이 루프의 중요한 부분이 아닌 보너스 기능으로 사용하는 것이 좋습니다.

iOS 플랫폼의 경우 앱에 OS에서 단일성 대화 상자가 표시되어 사용자가 푸시 알림의 상태를 확인할 수 있습니다. 사용자가 초기 선택을 하면 이 설정은 다음 기간까지 유지됩니다.

  • 앱이 업데이트되거나 다시 설치됩니다.

  • 사용자는 휴대 전화의 설정 메뉴에서 설정을 변경합니다.

Android 앱의 경우 알림은 기본적으로 사용 설정되며 클라이언트가 자유롭게 켜고 끌 수 있습니다.

모든 세션에서 알림 수신자를 다시 초기화하는 것이 좋습니다.

리소스

다음 리소스는 해당 빠른 시작의 항목에 대한 추가 정보를 제공합니다.

  • Firebase Unity SDK: Unity용 올인원 FCM 솔루션입니다. 이 SDK는 다른 모든 기능 중에서도 FCM을 통해 전송된 푸시 알림을 수신하고 처리할 수 있습니다.
  • 잘 푸시하기: 예고자가 푸시 알림에 "예"하는 방법: 이 블로그 게시물에는 푸시 알림을 사용하기 위한 추가 전략과 기술이 자세히 나와 있습니다.
  • 푸시 알림: 이 블로그 게시물은 푸시 기능의 최신 업그레이드를 설명하고 Android 용 기본 플러그인인 FCM으로 전환합니다.
  • Postman 빠른 시작: 이 빠른 시작에서는 Postman을 사용하여 API를 테스트하는 방법을 보여 줍니다.