목차

     

     

    Turorial

    이름 버전 (2019-12-04 기준)
    Unity3d 2018.4.13f1 (LTS)
    Firebase Unity SDK 6.7.0
    Node 12.13.1

     

     

    Firebase Setting

    https://seonbicode.tistory.com/28

     

    [Firebase] 시작하기

    1. Firebase 사이트(https://firebase.google.com/)에 접속한 후 [시작하기] 를 클릭해준다. 2. [프로젝트 추가] 로 새로운 프로젝트를 만든다. 만약, 먼저 만든 프로젝트가 있다면 기존 프로젝트로 진입한다. 3..

    seonbicode.tistory.com

    윗 글을 참고하여 새로운 Firebase 프로젝트를 만들거나 기존의 Firebase 프로젝트에 접속한다.

     

    Firebase FCM (Firebase 클라우드 메시징) 기능을 사용하기 위해서는 Firebase Unity3d 앱 등록 후 다운로드 받을 수 있는 google-services.json 이 필요하다.

    아래 링크를 참고하여 새로운 Unity3d 앱이나 기존의 Unity3d 앱에서 google-services.json을 다운로드 받으면 된다.

     

    https://seonbicode.tistory.com/43#google-services.json

     

    [Firebase] Firebase 기본 설정

    목차 Firebase 시작하는 법 https://seonbicode.tistory.com/28 [Firebase] 시작하기 1. Firebase 사이트(https://firebase.google.com/)에 접속한 후 [시작하기] 를 클릭해준다. 2. [프로젝트 추가] 로 새로운 프..

    seonbicode.tistory.com

    다운로드 받은 google-services.json 파일을 Unity3d 안에 넣게되면 Firebase Setting 이 마무리된다.

     

    Firebase Cloud Messaging Settings

    성장 - Cloud Messaging - Send your first message 를 눌러준다.

     

    Cloud Messaging 메뉴 설명

    더보기

    1. Create experiment

    https://firebase.google.com/docs/ab-testing/abtest-with-console 

    Firebase A/B Test 기능을 사용하여 사용자층을 임의로 나누어 서로 다른 메시지를 테스트함으로써 가장 적절한 Push 문구와 표현 방식을 알아내는데 사용할 수 있다.

    최신 FirebaseMessaging.unitypackage 이 필요하다.

     

    2. 새 알림

    새로운 Cloud Messaging 작성

     

    3. 과거에 보낸 메시지들

     

    4. 알림 복제, 알림 삭제

    과거 메시지를 삭제하거나 복제할 수 있다. 복제할 경우 과거에 메시지를 보낸 세팅이 불러와진다.

     

      

    새 알림 클릭

     

     

    Push 보낼 내용을 적은 후 다음 버튼을 클릭

    위 이미지 각 항목 설명

    더보기

    이미지 각 항목 설명

    알림 이미지

    [이미지를 업로드하려면 Storage를 사용해 이미지를 저장할 수 있도록 Blaze 요금제로 업그레이드해야 합니다.]고 나오지만 직접 Firebase Storage 에 이미지를 업로드 한 후 다운로드 링크를 첨부하면 된다.

     

    알림 이름

    Firebase Cloud Messaging 목록에서 보여질 이름이다.

     

    테스트 메시지 전송 (백그라운드 앱 메시지 테스트)

    특정 백그라운드 앱에 테스트 메시지를 보낼 수 있다. FCM 등록 토큰은  FirebaseInstanceId.getInstance().getInstanceId()함수를 사용하여 구할 수 있다. 사용법 :기기 등록 토큰 검색

     

    자신의 Unity3d(Android App)을 선택한 후 다음을 클릭한다.

    위 이미지 각 항목 설명

    더보기

    주제

    특정 게시/구독 모델을 기반으로 특정 주제를 구독하는 여러 기기에 메시지를 보낼 수 있다. FCM에서 라우팅을 처리하여 올바른 기기에 정확히 전송한다.

    Ex. 지역 조수 예보 앱 사용자는 '조류 특보' 주제를 구독하여 해당 지역에서 최적의 바다 낚시 상태 알림을 수신할 수 있다.

    자세한 설명 : https://firebase.google.com/docs/cloud-messaging/android/topic-messaging?hl=ko

     

     

     

    사용자 타겟팅 조건

    을 누를 경우 메시지를 보낼 사용자 타겟팅 조건을 추가할 수 있다.

     

      

    Target another app

    현재 Firebase Project 에 포함된 앱들 중 새롭게 타겟팅할 앱을 추가합니다.

     

     

    예약 설정을 한다. 지금은 지금을 선택하고 다음을 누른다.

    위 이미지 각 항목 설명

    더보기

     

    대상 사용자에게 전송

    기본 설정은 지금 으로 되어있으며 설정함 에서 특정 날짜를 설정할 수 있다.

    맞춤설정... 에서 일주일 중 어떤 날에 반복할 것인지 설정할 수 있다.  

     

     

    전환 이벤트, 추가 옵션은 선택사항이므로 넘어가도 된다. 오른쪽 아래 검토를 누른다.

    위 이미지 각 항목 설명

    더보기

    전환 이벤트

    애널리스틱스 보고서에 입력될 이벤트 로그를 설정할 수 있다. 설정하지 않아도 메시지를 보낼 수 있다.

      

    Android 알림 채널

    시계 어플과 관련된 설정 https://developer.android.com/training/notify-user/channels.html

    백그라운드에서 날라오는 Push의 알림음을 변경할 수도 있다.

     

    맞춤 데이터

    알림의 데이터 페이로드로 처리됩니다. 다른 필드는 FCM 알림 페이로드의 키에 직접 매핑됩니다.

     

     

     

    게시 한다. 하지만 아직 클라이언트를 설정하지 않았기 때문에 게시를 하여도 Push가 도착하지 않는다.

     

     

    Client (Unity3d)

    File - Build Settings 에서 Android 로 Switch Platform 해준 후 Player Settings 버튼을 눌러 Other Settings 에 있는 Package Name 을 적당한 이름으로 설정해준다.

     

    Package Name을 설정했다면 UAssets 메뉴 - Import Package - Custom Package 로 다운로드 받은 firebase_unity_sdk 폴더로 간 후 firebase sdk 를 추가한다.

    Player Settings 의 Scripting Runtime Version (.NET 버전) 을 확인하여,

    Net 3.5 면 dotnet3 폴더에 있는 FirebaseMessaging.unitypackage 파일을 임포트한다.

    Net 4.x 라면 dotnet4 폴더에 있는 FirebaseMessaging.unitypackage 파일을 임포트한다.

     

    만약, Firebase Analytics 를 Firebase 프로젝트를 만들때 활성화하였다면 마찬가지로 FirebaseAnalytics.unitypackage 파일을 위의 방식대로 임포트 해준다.

     

    4.x 라면 dotnet45 폴더 바깥에 있는 Unity.Compat.dll 과 Unity.Tasks.dll 을 삭제해주고

    3.5 라면 dotnet45 폴더에 있는 Unity.Compat.dll 과 Unity.Tasks.dll 을 삭제해준다.

     

     마지막으로 Firebase 앱 초기화와 Firebase 와 통신할 스크립트를 하나 추가한다.

    FCM.cs
    0.00MB
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    // Firebase SDK 참조
    using Firebase;
    
    public class FCM : MonoBehaviour
    {
        // 로그를 찍어줄 UGUI Text
        public Text log;
        // 로그를 저장해줄 String
        public string addMessage = "";
    
        FirebaseApp app;
    
        private void Awake()
        {
            DontDestroyOnLoad(this);
        }
    
        // Start is called before the first frame update
        void Start()
        {
            // Firebase 클라우드 메시징 초기화
            // https://firebase.google.com/docs/cloud-messaging/unity/client?hl=ko#initialize
            // google-services.json 의 앱 ID를 이용하여 앱을 초기화한다.
            Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
            Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
            
            // 수동으로 FCM을 다시 설정
            //Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
    
            // GooglePlay 서비스 버전 요구사항 확인
            // https://firebase.google.com/docs/cloud-messaging/unity/client?hl=ko#confirm_google_play_version
            Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
                var dependencyStatus = task.Result;
                if (dependencyStatus == Firebase.DependencyStatus.Available)
                {
                    // Create and hold a reference to your FirebaseApp,
                    // where app is a Firebase.FirebaseApp property of your application class.
                    app = Firebase.FirebaseApp.DefaultInstance;
    
                    addMessage += "파이어 베이스 앱 초기화 완료 \n";
    
                    // Set a flag here to indicate whether Firebase is ready to use by your app.
                }
                else
                {
                    UnityEngine.Debug.LogError(System.String.Format(
                      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    
                    addMessage += "Could not resolve all Firebase dependencies";
                    // Firebase Unity SDK is not safe to use here.
                }
            });
        }
    
        // Update is called once per frame
        void Update()
        {
            lock(log)
            {
                if (string.IsNullOrEmpty(addMessage)) return;
    
                log.text += addMessage;
    
                addMessage = "";
            }
        }
    
        // 토큰을 수신하며 차후 토큰을 사용하도록 캐시한다.
        public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
        {
            UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
    
            addMessage += string.Format("Received Registration Token: {0} \n",token.Token);
        }
    
        // 메시지를 수신한다.
        public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
        {
            var notification = e.Message.Notification;
    
            UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
    
            addMessage += string.Format("Received a new message from: {0} Title: {1} Message: {2} \n",e.Message.From ,notification.Title,notification.Body);
        }
    }
    

     

     

     

    스크립트를 추가하고 Firebase Console에서 Unity3d 앱 등록 후 받을 수 있는 google-services.json 까지 Unity3d 프로젝트에 포함하면 Unity3d 클라이언트 세팅은 마무리된다. google-services.json에 관련된 내용은 이 글의 목차 - Firebase Setting 에서 자세하게 설명되어 있다.

     

    추가적으로 FCM은 FCM 내에서 자동으로 등록 토큰으로 사용되는 인스턴스 ID 를 생성하고 라이브러리가 식별자와 구성 데이터를 Firebase에 업로드한다. 자동으로 초기화 하지 않고 명시적인 수신 동의를 얻은 후 인스턴스 ID를 사용하려면 AndroidManifest.xml 에 아래에 추가하면 자동 초기화가 방지 된다.

    <?xml version="1.0" encoding="utf-8"?>
    <application>
      <meta-data android:name="firebase_messaging_auto_init_enabled"
                 android:value="false" />
      <meta-data android:name="firebase_analytics_collection_enabled"
                 android:value="false" />
    </application>

     

    FCM을 다시 사용 설정하려면 런타임에서 아래를 호출 하면 된다.

    Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true; 

     

    그리고 백그라운드, 포그라운드 알림 처리는 Firebase Messaging SDK 추가 시 자동으로 AndroidManifest.xml 에 추가된다.

    그에 관련된 자세한 설명 : https://firebase.google.com/docs/cloud-messaging/unity/client?hl=ko#configuring_an_android_entry_point_activity

     

     

    Unity3d 에디터 상에서는 FCM 테스트가 안되므로 APK 빌드 후 테스트해야한다.

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기