Android 용 푸시 알림
필수 구성 요소
- 푸시 알림 빠른 시작
- Unity3D 빠른 시작
- [옵션] Unity 편집기 확장
- [선택 사항] postman 빠른 시작
Android 알림 채널 구성하기
Firebase 설정
사용하고 동기화해야 하는 세 개의 Google 웹 사이트가 있습니다. Google/Firebase에는 프로젝트와 앱이 있습니다.
프로젝트:
- Firebase 콘솔에 아직 프로젝트를 가져오지 않았다면 가져옵니다.
앱:
- Firebase 프로젝트가 앱을 포함합니다.
- 앱이 두 위치에 동일한 이름과 식별자 (예: Unicorn Battle and com.playfab.unicornbattle2)를 가지고 있는지 확인하세요.
PlayFab에는 서버 프라이빗 키 파일이 필요합니다.
- Firebase 콘솔에서 이 프라이빗 키 파일을 가져올 수 있습니다.
-
Firebase 콘솔:
- 프로젝트 또는앱을 선택하고 설정 옵션을 찾습니다 (이 작업을 수행하는 방법은 여러 가지가 있으며 모두 동일한 장소로 연결됩니다).
- 서비스 계정 탭에서 새 프라이빗 키 생성 단추를 선택하여 JSON 파일을 다운로드합니다.
프라이빗 키 파일 사용
다음 두 가지 방법 중 하나로 프라이빗 키 파일을 제공합니다.
- 프라이빗 키 파일을 게임 관리자 UI: 설정(타이틀) >푸시 알림>Android에 직접 업로드합니다.
- 또는서버 API 메소드가 활성화된 Postman 또는 Unity 프로젝트를 사용하여 SetupPushNotification를 호출합니다.
이름: 사용자_게임_이름
플랫폼: GCM
자격 증명: (프라이빗 키 파일 내용(문자열)):
{ ... }
OldARN 덮어쓰기:
true
HTTP 200 OK응답을 다음과 비슷한 데이터로 받아야 합니다.
// Postman JSON result output { "code": 200, "status": "OK", "data": { "ARN" : "arn:*******/GCM/your_game_name" } }
두 방법 중 하나를 사용하여 올바르게 설정하면 게임 관리자 UI설정(타이틀의 경우) > 푸시 알림 > Android에 이 항목이 표시됩니다.
시작하기: Android + Unity에 대한 푸시 알림
Unity 프로젝트를 설정하려면:
새 Unity 프로젝트를 만듭니다.
[선택 사항] PlayFab Unity 편집기 확장패키지를 가져옵니다.
Unity PlayFab SDK 패키지를 가져옵니다.
FCM Unity 가이드에 따라 FCM 메시징을 설치하고 푸시 알림을 위한 프로젝트를 설정하세요.
- 설정이 끝나면 이 가이드를 계속 진행하여 PlayFab에서 메시지를 받을 수 있습니다.
- 다음 예제에서는 FCM과 PlayFab을 결합하는 완전한 FCM 지원 monoBehaviour 스크립트를 제공합니다.
FCM 가이드에서 Firebase 플러그인을 설정하는 monobehavior 스크립트를 작성합니다.
- 해당 monobehaviour 스크립트를 계속 사용하거나 뒤에 나오는 예제의 스크립트로 바꿀 수 있습니다.
첫 번째 푸시 알림 설정
Unity에서 FCM 튜토리얼에서 생성한 스크립트를 열고 콘텐츠을 바꿉니다.
using PlayFab;
using PlayFab.ClientModels;
using PlayFab.Json;
using UnityEngine;
public class MsgCatcher : MonoBehaviour
{
public string pushToken;
public string playFabId;
public string lastMsg;
// OnGUI should be deleted/replaced with your own gui - This is only provided for debugging
public void OnGUI()
{
GUI.Label(new Rect(0, 0, Screen.width, 200), pushToken);
GUI.Label(new Rect(0, 200, Screen.width, Screen.height - 200), lastMsg);
}
private void OnPfFail(PlayFabError error)
{
Debug.Log("PlayFab: api error: " + error.GenerateErrorReport());
}
public void Start()
{
// PlayFabSettings.TitleId = "TITLE_ID";
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
LoginToPlayFab();
}
private void LoginToPlayFab()
{
#if UNITY_ANDROID
var request = new LoginWithAndroidDeviceIDRequest { AndroidDeviceId = SystemInfo.deviceUniqueIdentifier, CreateAccount = true, };
PlayFabClientAPI.LoginWithAndroidDeviceID(request, OnPfLogin, OnPfFail);
#endif
}
private void OnPfLogin(LoginResult result)
{
Debug.Log("PlayFab: login successful");
playFabId = result.PlayFabId;
RegisterForPush();
}
private void RegisterForPush()
{
if (string.IsNullOrEmpty(pushToken) || string.IsNullOrEmpty(playFabId))
return;
#if UNITY_ANDROID
var request = new AndroidDevicePushNotificationRegistrationRequest {
DeviceToken = pushToken,
SendPushNotificationConfirmation = true,
ConfirmationMessage = "Push notifications registered successfully"
};
PlayFabClientAPI.AndroidDevicePushNotificationRegistration(request, OnPfAndroidReg, OnPfFail);
#endif
}
private void OnPfAndroidReg(AndroidDevicePushNotificationRegistrationResult result)
{
Debug.Log("PlayFab: Push Registration Successful");
}
private void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
{
Debug.Log("PlayFab: Received Registration Token: " + token.Token);
pushToken = token.Token;
RegisterForPush();
}
private void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
{
Debug.Log("PlayFab: Received a new message from: " + e.Message.From);
lastMsg = "";
if (e.Message.Data != null)
{
lastMsg += "DATA: " + JsonWrapper.SerializeObject(e.Message.Data) + "\n";
Debug.Log("PlayFab: Received a message with data:");
foreach (var pair in e.Message.Data)
Debug.Log("PlayFab data element: " + pair.Key + "," + pair.Value);
}
if (e.Message.Notification != null)
{
Debug.Log("PlayFab: Received a notification:");
lastMsg += "TITLE: " + e.Message.Notification.Title + "\n";
lastMsg += "BODY: " + e.Message.Notification.Body + "\n";
}
}
}
장치에서 Unity 프로젝트를 빌드하고 실행합니다. 푸시 알림이 성공적으로 등록됨이라는 텍스트와 함께 푸시 알림을 받으면 모든 것이 예상대로 작동한 것입니다.
참고 항목
PlayFabSettings.TitleId = TITLE_ID
.
자신만의 TitleId
을 설정해야 합니다. 이 TitleId
을 업데이트하지 않으면 이 예제는 작동하지 않을 것입니다. 왜냐하면 타이틀이 사용자의 것이 아니라 Firebase 키와 설정에 등록되어 있기 때문입니다. 이 줄을 주석으로 처리하고 TITLE_ID
을 titleId
로 바꾸거나 앞 절에서 언급한 선택 편집기 확장 플러그인에서 제목을 선택할 수 있습니다.
Android 문제 해결
Firebase 콘솔에서 테스트 푸시 알림을 보낼 수 있는지 확인하세요.
- 그렇게 할 수 없다면 Firebase 플러그 인이 올바르게 설정되지 않은 것이므로 Firebase 문서를 검토하여 이유를 알아보거나 Firebase 지원에 문의해야 합니다.
FCM 클라이언트 pushToken이 올바르게 설정되어 있는지 확인하세요.
- 이 예제의
OnTokenReceived
기능이 호출되어야 하며 유효한 토큰을 가져야합니다. - 이 항목이 호출되지 않으면, Firebase 플러그인이 올바르게 설정되지 않은것이므로 Firebase 문서를 검토하여 이유를 찾거나 Firebase 지원부에 문의하시기 바랍니다.
- 이 예제의
titleId
이 자신이 소유하고 있는 타이틀로 설정되어 있고 Firebase 프로젝트의 서버 API 키에 등록되어 있는지 확인하세요.
고급 기능
server.SendPushNotification에서 request.Package.CustomData를 사용하여 장치에 임의의 데이터를 전달합니다. 이전 예에서는 다음 주석이 있는 섹션으로 전달됩니다.
Debug.Log("PlayFab: Received a message with data:");
원하는 경우 해당 데이터를 사용하도록 클라이언트 수신자를 사용자 정의할 수 있습니다. CustomData은 플레이어에게 표시되지 않으므로 클라이언트에 맞춤 게임 정보를 제공하거나 FCM 플러그인을 사용하여 향후 다른 알림을 현지에서 예약하는 데 사용할 수 있습니다.
request.Package.CustomData를 사용하거나 또는 AdvancedPlatformDelivery를 요청하여 많은 타사 플러그인을 제공할 수 있습니다.
참고 항목
타사 플러그인 제공은 지원 또는 보장되지 않지만 고급 사용자가 사용할 수 있습니다.
추가 지원
도움, 버그 예제 및 관련 질문은 포럼에 남겨주세요.
현재 이 문서에 설명된 표준 흐름에 대한 서비스만 지원합니다. 팀이 다른 일반적인 푸시 서비스 또는 플러그인을 사용하여 추가 기능을 찾고 있다면 알려 주시기 바랍니다. 개발자 커뮤니티로부터 피드백을 얻는 것은 언제나 환영입니다.
Amazon SNS를 통한 푸시 페이로드에 대한 설명서는 다음을 참조하시기 바랍니다.