Unity로 Firebase 클라우드 메시징 클라이언트 앱 설정

Unity로 교차 플랫폼 Firebase 클라우드 메시징 클라이언트 앱을 작성하려면 Firebase 클라우드 메시징 API를 사용하세요. Unity SDK는 Android 및 iOS에서 모두 작동하며 플랫폼에 따라 몇 가지 추가 설정이 필요합니다.

시작하기 전에

Firebase 클라우드 메시징을 사용하려면 우선 Firebase 프로젝트를 만들고 Unity 프로젝트에 Firebase Unity SDK 패키지를 추가해야 합니다.

설정:

필수 조건

Android

iOS

  • Unity 5.0 이상
  • Xcode 8.0 이상
  • 실제 iOS 기기
  • 푸시 알림이 사용 설정된 APN 인증서

Unity 프로젝트를 준비하지 않았다면 빠른 시작 샘플 중 하나를 다운로드하여 특정 Firebase 기능을 시험해 볼 수 있습니다. 빠른 시작을 사용한다면 프로젝트 설정에서 번들 식별자를 확인해야 합니다. 다음 단계에서 이 식별자가 필요합니다.

Firebase 콘솔에서 앱 설정

앱에 Firebase를 추가하려면 Firebase 프로젝트 및 앱의 Firebase 구성 파일이 필요합니다.

Firebase 프로젝트가 없으면 Firebase 콘솔에서 프로젝트를 만듭니다. 모바일 앱에 연결된 기존 Google 프로젝트가 있으면 Google 프로젝트 가져오기를 클릭합니다. 그렇지 않으면 프로젝트 추가를 클릭합니다.

Android

  1. Android 앱에 Firebase 추가를 클릭하고 설정 단계를 따릅니다. 기존 Google 프로젝트를 가져오면 이 단계가 자동으로 수행되므로 구성 파일만 다운로드하면 됩니다.
  2. 메시지가 표시되면 앱의 패키지 이름을 입력합니다. 앱이 사용하는 패키지 이름을 입력해야 합니다. 이 설정은 Firebase 프로젝트에 앱을 추가할 때만 가능합니다.
  3. 안내가 표시되면 google-services.json 파일을 다운로드합니다. 언제든지 이 파일을 다시 다운로드할 수 있습니다.
  4. 이 파일을 프로젝트의 애셋 폴더 내부에서 원하는 위치에 복사해 붙여 넣습니다.

iOS

  1. iOS 앱에 Firebase 추가를 클릭하고 설정 단계를 따릅니다. 기존 Google 프로젝트를 가져오면 이 단계가 자동으로 수행되므로 구성 파일만 다운로드하면 됩니다.
  2. 메시지가 표시되면 앱의 번들 ID를 입력합니다. 앱에서 사용하는 번들 ID를 입력하는 것이 중요합니다. 이 설정은 Firebase 프로젝트에 앱을 추가할 때만 가능합니다.
  3. 안내가 표시되면 GoogleService-Info.plist 파일을 다운로드합니다. 언제든지 이 파일을 다시 다운로드할 수 있습니다.
  4. 프로젝트에 GoogleService-Info.plist 파일을 추가합니다.

  5. 다운로드한 GoogleService-Info.plist를 Firebase 콘솔에서 드래그하여 Unity 프로젝트의 원하는 폴더에 넣습니다.

앱에 Firebase Unity SDK 추가

  1. Firebase Unity SDK를 다운로드합니다.
  2. Assets > Import Package > Custom Package 메뉴 항목을 선택합니다.
  3. 앞에서 다운로드한 Firebase Unity SDK에서 FirebaseMessaging.unitypackage 패키지를 가져옵니다.
  4. Import Unity Package 창이 나타나면 Import 버튼을 클릭합니다.

앱 빌드

Android

  1. File > Build Settings 메뉴 옵션을 선택합니다.
  2. Platform 목록에서 Android를 선택합니다.
  3. Switch Platform을 클릭하여 타겟 플랫폼으로 Android를 선택합니다.
  4. Unity 상태 표시줄 오른쪽 하단의 스피너(컴파일) 아이콘이 멈추기를 기다립니다.
  5. Build and Run을 클릭합니다.

iOS

  1. File > Build Settings 메뉴 옵션을 선택합니다.
  2. Platform 목록에서 iOS를 선택합니다.
  3. Switch Platform을 클릭하여 타겟 플랫폼으로 iOS를 선택합니다.
  4. Unity 상태 표시줄 오른쪽 하단의 스피너(컴파일) 아이콘이 멈추기를 기다립니다.
  5. Build and Run을 클릭합니다.

  6. Xcode가 열리면 UserNotifications.framework를 추가합니다.

    1. Xcode에서 프로젝트를 클릭하고 Editor area에서 General 탭을 선택합니다.
    2. Linked Frameworks and Libraries까지 아래로 스크롤하고 + 버튼을 클릭하여 프레임워크를 추가합니다.
    3. 나타나는 창에서 UserNotifications.framework로 스크롤하고 해당 항목을 클릭한 후 Add를 클릭합니다.

Firebase 클라우드 메시징 초기화

TokenReceived 또는 MessageReceived 이벤트에 대한 핸들러를 추가하면 Firebase 클라우드 메시징 라이브러리가 초기화됩니다.

초기화 시 클라이언트 앱 인스턴스에 대한 등록 토큰이 요청됩니다. 앱은 OnTokenReceived 이벤트로 토큰을 수신하며, 이 토큰을 이후에 사용하도록 캐시해야 합니다. 메시지를 해당 기기로 타겟팅하려면 이 토큰이 필요합니다.

더불어, OnMessageReceived 이벤트에도 등록해야 메시지를 수신할 수 있습니다.

전체 설정은 다음과 같습니다.

public void Start() {
  Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
  Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
  UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
}

Android 진입점 액티비티 구성

Android에서 Firebase 클라우드 메시징은 기본 UnityPlayerActivity를 대체하는 맞춤 진입점 액티비티와 함께 제공됩니다. 맞춤 진입점을 사용하지 않는 경우에는 자동으로 대체 작업이 진행되며 별도로 조치를 취할 필요가 없습니다. 기본 진입점 액티비티를 사용하지 않거나 자체 Assets/Plugins/AndroidManifest.xml을 제공하는 앱은 추가 구성이 필요합니다.

Android용 Firebase 클라우드 메시징 Unity 플러그인에는 2가지 파일이 추가로 포함되어 있습니다.

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar에는 표준 UnityPlayerActivity를 대체하는 MessagingUnityPlayerActivity라는 액티비티가 포함되어 있습니다.
  • Assets/Plugins/Android/AndroidManifest.xmlMessagingUnityPlayerActivity를 앱의 진입점으로 사용하도록 앱에 지시합니다.

이러한 파일이 제공되는 이유는 기본 UnityPlayerActivityonStop, onRestart 액티비티 수명 주기 전환을 처리하지 않으며 Firebase 클라우드 메시징에서 수신 메시지를 올바르게 처리하는 데 필요한 onNewIntent를 구현하지 않기 때문입니다.

맞춤 진입점 액티비티 구성

앱에서 기본 UnityPlayerActivity를 사용하지 않는 경우 제공된 AndroidManifest.xml을 삭제하고 맞춤 액티비티에서 Android 액티비티 수명 주기의 모든 전환을 적절히 처리해야 합니다. 처리 방법의 예는 아래에 나와 있습니다. 맞춤 액티비티에서 UnityPlayerActivity를 확장하는 경우 필요한 메소드를 모두 구현하는 com.google.firebase.MessagingUnityPlayerActivity를 대신 확장할 수 있습니다.

맞춤 액티비티를 사용하고 있고 com.google.firebase.MessagingUnityPlayerActivity 를 확장하지 않은 경우에는 액티비티에 다음 스니펫을 포함해야 합니다.

/**
 * Workaround for when a message is sent containing both a Data and Notification payload.
 *
 * When the app is in the background, if a message with both a data and notification payload is
 * receieved the data payload is stored on the Intent passed to onNewIntent. By default, that
 * intent does not get set as the Intent that started the app, so when the app comes back online
 * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so
 * that it sends the intent to the MessageForwardingService which forwards the message to the
 * FirebaseMessagingService which in turn sends the message to the application.
 */
@Override
protected void onNewIntent(Intent intent) {
  Intent message = new Intent(this, MessageForwardingService.class);
  message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
  message.putExtras(intent);
  message.setData(intent.getData());
  startService(message);
}

/**
 * Dispose of the mUnityPlayer when restarting the app.
 *
 * This ensures that when the app starts up again it does not start with stale data.
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
  if (mUnityPlayer != null) {
    mUnityPlayer.quit();
    mUnityPlayer = null;
  }
  super.onCreate(savedInstanceState);
}

Android 메시지 전송 참고사항

앱이 전혀 실행되지 않을 때 사용자가 알림을 탭하면 기본적으로 메시지가 FCM의 기본 제공 콜백을 통해 라우팅되지 않습니다. 이러한 경우에는 메시지 페이로드가 애플리케이션을 시작하는 데 사용되는 Intent를 통해 수신됩니다.

앱이 백그라운드 상태일 때 수신된 메시지에는 작업 표시줄 알림을 채우는 데 사용되는 알림 필드의 콘텐츠가 포함되지만 이 알림 콘텐츠는 FCM에 전달되지 않습니다. 즉, FirebaseMessage.Notification은 null 값이 됩니다.

요약하면 다음과 같습니다.

앱 상태 알림 데이터 모두
포그라운드 Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
백그라운드 작업 표시줄 Firebase.Messaging.FirebaseMessaging.MessageReceived 알림: 작업 표시줄
데이터: 인텐트 부가 정보

다음 단계

클라이언트 앱이 설정되면 Firebase로 다운스트림 메시지와 주제 메시지를 보낼 수 있습니다. 자세한 내용은 이 기능을 시연하는 빠른 시작 샘플을 참조하세요.

앱에 다른 고급 동작을 추가하려면 앱 서버에서 알림을 전송하는 방법 가이드를 참조하세요.

이러한 기능을 사용하려면 서버 구현이 필요하다는 점에 유의하세요.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.