해당 포스팅에서는 프로젝트를 생성하는 내용은 작성되지 않습니다. 이 점 참고바랍니다.
프로젝트가 생성되어 있다는 가정하에 파이어베이스 애널리틱스를 사용하는 방법을 알아보겠습니다. 먼저 아래 링크를 이용해 파이어베이스를 접속하여 생성된 프로젝트를 확인합니다.
https://console.firebase.google.com/u/0/?hl=ko
원래 같았으면 프로젝트 명이 사각형의 각 영역당 나와있습니다. 저는 프로젝트 명을 모두 이미지 편집 도구를 이용해 가려서 보이지 않는 상태입니다.
위 이미지를 보면 AOS 및 IOS 아이콘이 활성화 된 프로젝트와 그렇지 않은 프로젝트가 있습니다.
최초 생성 시, AOS 및 IOS 모두 비활성화 되어 있으므로 프로젝트에 들어가 각 OS를 활성화 시켜줍니다.
가상의 프로젝트 A를 클릭하여 예를 들겠습니다.
프로젝트를 클릭하여 프로젝트 개요로 들어가 상단에 앱 추가를 눌러줍니다. 이후 유니티 아이콘을 눌러줍니다.
1. 앱 등록항목에서는 패키지 이름을 입력하면 됩니다.
패키지 이름은 유니티 프로젝트 - Project Setting - Player - Other Setting - Identification - Package Name를 입력하면 됩니다.
2. 구성 파일 다운로드에 입력한 패키지 네임을 바탕으로 AOS 전용 및 iOS 전용 json 파일이 생성됩니다.
해당 파일을 다운로드 받아 유니티 프로젝트에 넣어줍니다. 이 때 파일의 위치는 사용자가 원하는 위치에 넣어도 상관없습니다.
3. Firegbase SDK 추가
SDK를 다운로드 하여 유니티에 임포트합니다.
압축을 푼 상태에서 아래 링크 ‘지원되는 Firebase 제품’ 쪽을 확인하여 원하는 SDK를 추가합니다.
로그 같은 경우는 단순히 FirebaseAnalytics 패키지만 사용하면 되므로 저는 FirebaseAnalytics 패키지만 추가했습니다.
이 때 추가할 때 유니티 버전에 따라 dotnet의 버전을 달리 사용하므로, 현재 유니티 버전에 맞는 패키지를 추가합시다.
https://firebase.google.com/docs/unity/setup?authuser=0&hl=ko#available-libraries
4. 다음 단계
콘솔로 이동하는 완료 단계입니다.
유니티로 이동하여 Firebase Manager 스크립트를 만들어줍니다.
3. Firegbase SDK 추가에 있던 링크를 참고하여 ‘5단계 구글 플레이 서비스 버전 요구사항 확인' 항목을 처리해야 합니다.
Firebase를 관리하는 매니저 스크립트를 생성합니다. 아래는 코드에 대한 예제입니다.
public class FirebaseMgr : MonoBehaviour
{
private static FirebaseMgr instance;
public static FirebaseMgr Instance
{
get { return instance; }
}
public bool checkedFixDependency = false;
FirebaseApp _app;
List<Parameter> _pList = new List<Parameter>();
private void Awake()
{
instance = this;
}
public void Start()
{
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
{
var dependencyState = task.Result;
if (dependencyState == DependencyStatus.Available)
{
/*
Create and hold a reference to your FirebaseApp, where app is a Firebase.
> Firebase App에 대한 참조를 생성하고 유지하십시오. 여기서 app은 Firebase입니다.
FirebaseApp property of your application class.
> 응용 프로그램 클래스의 FirebaseApp 속성입니다.
*/
_app = FirebaseApp.DefaultInstance;
/*
Set a flag here to indicate whether Firebase is ready to use by your app.
> 앱에서 Firebase를 사용할 준비가 되었는지 여부를 나타내는 플래그를 설정합니다.
*/
checkedFixDependency = true;
}
else
{
UnityEngine.Debug.LogError(System.String.Format("Could not resolve all Firebase dependencies: {0}", task.Result));
}
});
}
}
만약 맥을 사용한다고 하면 스크립트 작성을 마치고 유니티를 실행할 때
[DllNotFoundException ‘FirebaseCppApp-[Version].Dll을 로드할 수 없음] 에러가 발생할 수 있습니다.
이는 맥 운영체제에서 FirebaseCppApp 파일을 외부(=인터넷)에서 받았으니 위험할 수 있다고 윈도우즈 방화벽처럼 실행을 막습니다. 만약 해당 파일을 휴지통으로 버려버리면 유니티 실행 시 게임을 실행해도 바로 일시정지가 됩니다.
이를 일시정지를 풀어서 다시 할 수 있지만 매 번 이렇게 살 순 없으니 구글에 아래와 같이 검색하여 맥에서 외부에서 받은 파일들을 허용해 주도록 합시다.
“다운로드 한 앱 허용 전체 허용”
이를 진행하면 유니티 상에서 Dll을 로드할 수 없다는 에러가 사라질 겁니다. 이 후 빌드를 진행하여 핸드폰에서 앱을 설치 및 실행하면 파이어베이스 Analytics Dashboard에 지난 30분 동안의 사용자에 로그가 찍히게 됩니다.
로그를 달 때
절대로 로그의 이름에 띄어쓰기를 하지마세요.
예) 만약 test 01로 설정하면 로그가 찍히지 않습니다. 이 경우 test_01로 설정해야 로그가 찍힙니다.
다음 코드는 다양한 Event Log의 항목입니다.
public void LogEvent(string eventName)
{
FirebaseAnalytics.LogEvent(eventName);
}
public void LogEvent(string eventName, string _pName, int _pValue)
{
FirebaseAnalytics.LogEvent(eventName, _pName, _pValue);
}
public void LogEvent(string eventName, string _pName, float _pValue)
{
FirebaseAnalytics.LogEvent(eventName, _pName, _pValue);
}
public void LogEvent(string eventName, string _pName, string _pValue)
{
FirebaseAnalytics.LogEvent(eventName, _pName, _pValue);
}
public void LogEvent(string eventName, params Parameter[] _pArray)
{
FirebaseAnalytics.LogEvent(eventName, _pArray);
}
public void LogEvent(string eventName, List<KeyValuePair<string, string>> _list)
{
_pList.Clear();
for (int i = 0; i < _list.Count; i++)
{
_pList.Add(new Parameter(_list[i].Key, _list[i].Value));
}
FirebaseAnalytics.LogEvent(eventName, _pList.ToArray());
}
public void LogEvent(string eventName, params KeyValuePair<string, string>[] _list)
{
_pList.Clear();
for (int i = 0; i < _list.Length; i++)
{
_pList.Add(new Parameter(_list[i].Key, _list[i].Value));
}
FirebaseAnalytics.LogEvent(eventName, _pList.ToArray());
}
public void LogEvent(string eventName, Dictionary<string, string> _list)
{
_pList.Clear();
foreach (var data in _list)
{
_pList.Add(new Parameter(data.Key, data.Value));
}
FirebaseAnalytics.LogEvent(eventName, _pList.ToArray());
}
작성한 Event Log를 사용할 때는 아래와 같습니다.
LogEvent("Test");
LogEvent("param_test_int", "IntParam", 111);
LogEvent("param_test_float", "FloatParam", 2.22f);
LogEvent("param_test_string", "StringParam", "TEXT");
LogEvent("param_test_array", new Parameter(FirebaseAnalytics.ParameterCharacter, "warrior"), new Parameter(FirebaseAnalytics.ParameterLevel, 5));
for (int i = 0; i < test.Count; i++)
{
for (int j = 0; j < test2.Count; j++)
{
tempList.Add(new KeyValuePair<string, string(testStr1, testStr2));
}
}
FirebaseMgr.Instance.LogEvent("tempList", tempList);
FirebaseMgr.Instance.LogEvent("TestLog",
new KeyValuePair<string, string>("LogName1", testStr3),
new KeyValuePair<string, string>("LogName2", testStr4)
);
로그를 볼 때
원하는 위치에 이벤트를 달고 확인하려 해도 파이어베이스 이벤트 탭에서는 대략 1시간동안 이벤트를 모아 일괄 업로드합니다. 이 때 기다릴 시간 여유가 없기 때문에 파이어베이스 DebugVIew 탭을 이용하여 로그가 찍히는지 바로바로 확인할 수 있습니다.
[adb 활성화]
확인을 위해서는 디버그모드를 활성화가 필요합니다. 이를 위해서는 adb 명령어를 사용해야 합니다. adb 파일을 찾아줍시다. 맥에서의 경로는 아래와 같습니다.
Users/Your Computer User Name/Library/Android/sdk
만약 위 경로에 없을경우 맥 검색 기능을 이용해 adb를 검색합니다. 검색을 이용해 경로를 찾아 터미널 앱을 켜줍니다.
% cd <adb 파일 경로> 명령어를 입력합니다.
이 때 adb 파일이 있는 폴더까지 가지말고, 그 상위폴더로 이동합니다.
이후 ./ 명령어와 adb shell setprop debug.firebase.analytics.app <App Package Name>을 입력하여 DebugView 모드를 활성화 합니다.
윈도우 환경에서는 경우는 밑에 작성된 참고 사이트를 참고하시면 되겠습니다.
[adb 비활성화]
adb shell setprop debug.firebase.analytics.app .none.
이 후 빌드를 진행하여 앱을 실행하면 파이어베이스 DebugView 탭에서 앱에 적용한 이벤트 로그들이 발생되며 나타납니다.
참고
- 유니티 프로젝트에 Firebase 추가 [https://firebase.google.com/docs/unity/setup?hl=ko#analytics-enabled]
- 디버깅 이벤트 [https://firebase.google.com/docs/analytics/debugview?hl=ko&authuser=0#android]
- 이벤트 로깅 [https://firebase.google.com/docs/analytics/unity/events?hl=ko#android]
- 파이어베이스 함수 레퍼런스 [https://firebase.google.com/docs/reference/unity/class/firebase/analytics/firebase-analytics#public-static-functions_1]
- 파이어베이스 애널리틱스 이벤트 [https://mrw0119.tistory.com/154]
- 유니티 Firebase Analytics 테스트 및 적용 [https://computer-warehouse.tistory.com/15]
- 유니티에 Firebase analytics 추가하기 [https://blog.naver.com/PostView.nhn?blogId=thunderyk&logNo=221324226607&parentCategoryNo=&categoryNo=17&viewDate=&isShowPopularPosts=true&from=search]
- 유니티에서 파이어베이스 SDK 초기화 및 애널리틱스 [https://boxwitch.tistory.com/entry/유니티에서-파이어베이스-SDK-초기화-및-애널리틱스]
'개발 > 유니티' 카테고리의 다른 글
유니티의 장점은 무엇이 있을까? (0) | 2023.03.05 |
---|---|
오브젝트 풀링(Object pooling)은 왜 사용할까? (0) | 2023.02.11 |
유니티 Pod install 시 에러 발생시 (1) | 2022.09.26 |
유니티 페이스북 디펠로퍼에서 iOS 플랫폼을 추가 시 (0) | 2022.09.25 |
유니티 iOS Xcode 빌드시 Undefined symbol 에러 발생 시 (0) | 2022.09.24 |