게임 프로그래밍 ( 이제 안함 )/Issue 문제 및 해결

FCM 데이터를 받아오지 못하는 이슈 ( iOS 편 추가 )

Nerd_Lee 2018. 8. 14. 17:41
반응형



1. Firebase Issue


< 문제 >


- FCM을 사용할 수 있는 스크립트와 FCM에 대한 패키지들이 있었지만, 푸시 메시지만 받게 되고, Key : Value값은 들어가지 않았다.
그래서 처음부터 프로젝트를 다시 만들어, FCM을 만들어 사용해보기로 하였다.

< 진행 >


1 )  새 프로젝트 생성 및 파이어 베이스에서 앱 추가를 한 다음, json 파일과, 최신 unitypackage 파일을 받아 프로젝트에 추가함.

2 )  GameObject를 만들고, 게임오브젝트 안에 스크립트를 추가. 이름은 마음대로 코드는 이렇게 사용.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public 클래스 이름 : MonoBehaviour
{
public UnityEngine.UI.Text text;
string topic = "토픽이름";
    void Start()
    {
        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
        Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
        Firebase.Messaging.FirebaseMessaging.SubscribeAsync(topic);        // SubscribeAsync로 바뀌었음.
    }
 
    public virtual void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
    {
        Debug.Log("Received Registration Token: " + token.Token);
    }
 
    public virtual void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
    {
        Debug.Log("Received a new message");
        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.Link != null)
        {
            Debug.Log("link: " + e.Message.Link.ToString());
        }
        if (e.Message.Data.Count > 0)
        {
            Debug.Log("data:");
            foreach (System.Collections.Generic.KeyValuePair<stringstring> iter in e.Message.Data)
            {
                // Key값이 url이고, 값이 비어있지 않다면!
                if (iter.Key.Equals("url"&& iter.Value != "")
                {
                    // 여기에 추가하고 싶은 부분을 추가하면 됩니다.
text.text = string.Format("{0} : {1}",iter.Key,iter.Value);
                }
            }
        }
    }
}
cs

3 ) 그리고 나서, Text UI를 만들어, string.Format을 이용해, Key값과 Value값이 들어오는 지 확인했다.


< 결과 >


값은 잘 들어왔다. 구 버전은 푸시 메시지는 오지만 값이 들어오지 않았기 때문에, 버전의 문제라고 생각하고,
새로운 버전의 unitypackage 파일을 덮어씌웠다. 덮어씌우기는 성공적으로 잘 되었다.

하지만 푸시메시지 조차 뜨지 않았다. 여러번 시도했지만 푸시메시지는 계속 뜨질 않아 뭔가 이상하다는 것을 느꼈다.

그리고 새로 만든 프로젝트와 비교를 해보았더니, 파일 여러개가 부족했다.


분명 Resolve가 되었는데 파일 몇개가 부족하다는 것을 느끼고 Assets - Play Services Resolver - Android Resolver - Force Resolve를 해줬더니 없었던 파일 여러개가 생기고 다시 빌드를 해봤다. 그리고, 앱이 꺼진 상태에서 클라우드 메시지를 날렸다.


값은 잘 들어갔고, 값에 따른 Url을 통해, 웹뷰로 그 링크로 넘어갔다.



< 주의할 점 >


1. 값이 들어가지 않는다면, 프로젝트를 새로 만들어, 버전이 바뀐건 지 아닌 건지 확인하고, Reference도 확인해서 코드가 바뀐 것은 아닌 지를 확인.

2. Resolve가 잘 되었는 지 확인해보거나 새로운 프로젝트에서 잘 되는데 만들고 있는 프로젝트에서 되질 않는다면 의심을 한번 해보자.

3. Resolve가 되지 않았다면, Force Resolve를 클릭해서 Google Play Services에 필요한 부분들이 Plugins - Android에 들어갔는 지 확인하자.

( 아직 iOS 쪽은 해보지 않음. iOS쪽이 다르다면 글을 따로 쓸 예정. )



본문 += 추가 IOS 편

안드로이드만 개발하셨거나 안드로이드 개발한 프로젝트로 iOS로 빌드를 하시는 분들은, XCode에서, 설정해줘야 되는 것이 몇가지 있습니다.


저는, 일단 푸시 인증서 발급이 되어 있는 상태였기 때문에 2가지가 문제였습니다.


1) Unity-iPhone 프로젝트를 클릭하고, General 탭에 맨 밑에 있는,  Linked Framework and Libraries에서, UserNotification을 추가해줘야합니다. 


2) 두 번째는, Capabilities라는 탭에서, 밑으로 가다보면, Push Notification을 ON을 해주어야 합니다. 그리고 난 뒤에, fix error가 뜨는 경우가 생길 수도 있는데.


저는 그 부분이 없었기 때문에.. 검색하시면 충분히 나올 수 있습니다.


지금까지 Base Of Coding이였습니다.



- 이 글에 도움이 되셨다면, 밑에 공감(♡) 버튼을 눌러주시면 감사하겠습니다. -




반응형