Unity에서 Firebase Messaging 사용해보기

사전준비

에셋설치


유니티 코드

Firebase Messaging API

public void Start() { Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived; Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived; } public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) { Debug.Log("Received Registration Token: " + token.Token); } public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) { Debug.Log("Received a new message from: " + e.Message.From); var notification = e.Message.Notification; if (notification != null) { Debug.Log("title: " + notification.Title); Debug.Log("body: " + notification.Body); } if (e.Message.From.Length > 0) Debug.Log("from: " + e.Message.From); if (e.Message.Data.Count > 0) { Debug.Log("data:"); foreach (System.Collections.Generic.KeyValuePair<string, string> iter in e.Message.Data) { Debug.Log(" " + iter.Key + ": " + iter.Value); } } }

테스트 결과

메시지를 보내기 전에, 앱을 최초 한번은 실행해야

이후부터 앱이 종료되던 샐행 중이던 상관없이 메시지를 받을 수 있다.

앱을 실행하면, 토큰 값을 얻을 수 있으며, 특정 단말기에 보내기 위에선 토큰을 알아야 한다.

08-04 10:58:57.467: I/Unity(8972): Received Registration Token: fnQUKrW0hFg:APA91bGd2dsCEhxWFvOUHJDnjFD2mSZ7vy4wVeR9ysAzuNM-OAv67nlnpTJ1i8yn-gRUrvN241QCuwMOa5O4JT646NVmmVm6gC-Dt_kcVg3tAusbcAL8GEZxeuo9eXqo7f-1gCglwFTa 08-04 10:58:57.467: I/Unity(8972): 08-04 10:58:57.467: I/Unity(8972): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

Firebase 콘솔의 Notification에서 메시지를 보낼 수 있다.


테스트 메시지 보내기

데이터도 추가해서 보내기


메시지 보내기 결과


앱 실행 중

폰 푸시메시지함에는 추가되지 않고,

OnMessageReceived가 호출되어, 서버가 보낸 메시지를 얻을 수 있다.

08-04 11:16:28.977: I/Unity(8972): Received a new message from: 08-04 11:16:28.977: I/Unity(8972): 08-04 11:16:28.977: I/Unity(8972): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:16:28.987: I/Unity(8972): title: test title 08-04 11:16:28.987: I/Unity(8972): 08-04 11:16:28.987: I/Unity(8972): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:16:28.987: I/Unity(8972): body: test body 08-04 11:16:28.987: I/Unity(8972): 08-04 11:16:28.987: I/Unity(8972): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:16:29.007: I/Unity(8972): data: 08-04 11:16:29.007: I/Unity(8972): 08-04 11:16:29.007: I/Unity(8972): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:16:29.027: I/Unity(8972): test_key1: 1212 08-04 11:16:29.027: I/Unity(8972): 08-04 11:16:29.027: I/Unity(8972): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:16:29.027: I/Unity(8972): test_key2: test_value2 08-04 11:16:29.027: I/Unity(8972): 08-04 11:16:29.027: I/Unity(8972): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

앱 실행 중이 아닌 경우

폰 푸시메시지함에 추가된다.


도착한 메시지를 클릭해 앱이 실행되면,

OnMessageReceived가 호출되고, 서버가 보낸 메시지를 얻을 수 없지만,

데이터는 얻을 수 있다.

08-04 11:17:53.527: I/Unity(9130): Received Registration Token: fnQUKrW0hFg:APA91bGd2dsCEhxWFvOUHJDnjFD2mSZ7vy4wVeR9ysAzuNM-OAv67nlnpTJ1i8yn-gRUrvN241QCuwMOa5O4JT646NVmmVm6gC-Dt_kcVg3tAusbcAL8GEZxeuo9eXqo7f-1gCglwFTa 08-04 11:17:53.527: I/Unity(9130): 08-04 11:17:53.527: I/Unity(9130): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:17:53.537: I/Unity(9130): Received a new message from: 08-04 11:17:53.537: I/Unity(9130): 08-04 11:17:53.537: I/Unity(9130): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:17:53.537: I/Unity(9130): data: 08-04 11:17:53.537: I/Unity(9130): 08-04 11:17:53.537: I/Unity(9130): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:17:53.557: I/Unity(9130): test_key1: 1212 08-04 11:17:53.557: I/Unity(9130): 08-04 11:17:53.557: I/Unity(9130): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 08-04 11:17:53.557: I/Unity(9130): test_key2: test_value2 08-04 11:17:53.557: I/Unity(9130): 08-04 11:17:53.557: I/Unity(9130): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

도착한 메시지를 클릭하지 않고, 앱을 실행 한 경우

OnMessageReceived는 호출되지 않는다.


Firebase 콘솔에서 보내는 것 말고, URL로 메시지 보내기

curl --header "Authorization: key=<Server Key>" --header "Content-Type: application/json" https://android.googleapis.com/gcm/send -d '{"notification":{"title":"Hi","body":"Hello from the Cloud"},"data":{"score":"lots"},"to":"<Registration Token>"}'

서버키는 Firebase 콘솔의 프로젝트 설정에 있다.


메시지가 정상적으로 도착했다.