티스토리 뷰
[Unity] 빌드에러 해결, 설치) Android FCM(Firebase Cloud Message)(앱 푸시알림) 사용하기, 오류 해결방법
DevRororo 2023. 4. 11. 18:49유니티에서 FCM(Firebase Cloud Message) 사용방법
1. 먼저 기존 프로젝트에서 Firebase 서비스를 사용하고 있다면 유니티에서 "firebasecppapp"을 검색해서 나온 것들의 버전을 살펴본다.

기존에 사용하던 Firebase 서비스가 8.8.0 버전인것을 확인
2. Unity Firebase SDK 8.8.0 버전을 다운로드 한다
https://dl.google.com/firebase/sdk/unity/firebase_unity_sdk_8.8.0.zip
혹시나 본인의 버전이 8.8.0이 아닌 다른 버전이라면 위 링크에 8.8.0 대신의 본인의 버전을 적으면 된다.
3. 압축을 풀고 FirebaseMessaging.Unitypackage를 불러온다
4. 불러오면 Force Resolve 를 할때까지 기다린다.
5. 프로젝트 세팅을 다음과 같이 설정한다.

6. Asset/Plugins/Andriod 에 AndroidManifest 파일을 연다
7. 아래 예시에서 14번째줄에 com.google.firebase.MessagingUnityPlayerActivity로 되어있는지 확인한다. 또한 20번째줄이 같이 들어있는지 확인한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.devation.dragonmagician" android:versionCode="1" android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<permission android:name="패키지이름.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name=패키지이름.permission.C2D_MESSAGE" />
<application android:label="@string/app_name" android:icon="@drawable/app_icon">
<!-- The MessagingUnityPlayerActivity is a class that extends
UnityPlayerActivity to work around a known issue when receiving
notification data payloads in the background. -->
<activity android:name="com.google.firebase.MessagingUnityPlayerActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false"></service>
</application>
</manifest>
8. 아래 코드를 추가한다
#region FCM 관련 함수
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);
}
#endregion
#start 함수에 추가
public void Start()
{
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(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.
Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
Firebase.Messaging.FirebaseMessaging.TokenReceived -= OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived -= OnMessageReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
// 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));
// Firebase Unity SDK is not safe to use here.
}
});
}
9. 빌드
10. Firebase Messaging 에서 메시지를 보낼 내용을 입력한다.

11. 완료(알림올때까지 약 3분정도 소요될 수 있음)

참고 : https://firebase.google.com/docs/cloud-messaging?hl=ko
