본문 바로가기
Devlog

[Unity] 로컬 푸쉬 기능 구현 Part 2 (iOS) feat.삽질

by wendy308 2020. 5. 30.
반응형

** 전에 올렸던  소스파일에 버그가 있어서 수정해서 다시 첨부하였습니다 **

NotifyManager.cs
0.00MB

 

이전에 유니티에서 로컬푸쉬 기능을 구현했을 때는 애샛스토어에 올라와 있는 무료애샛을 사용했었다.

 

iOS는 친절하게도 유니티에서 자체제공해주는 클래스 및 함수로 구현이 가능하다.

 

https://docs.unity3d.com/ScriptReference/iOS.NotificationServices.html

 

Unity - Scripting API: NotificationServices

Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close

docs.unity3d.com

공식 문서는 이 링크로 확인할 수 있다.

 

바로 코드로 확인해보자.

 

전에 안드로이드 개발할 때 만들었던 클래스내에서 코딩해서 구현이 가능하다.

#if UNITY_IOS
using NotificationServices = UnityEngine.iOS.NotificationServices;
using NotificationType = UnityEngine.iOS.NotificationType;
using LocalNotification = UnityEngine.iOS.LocalNotification;
#endif

// 최상단에 전처리기로 iOS 전용 헤더를 사용한다고 선언하고

start()함수안에서 푸쉬 알람 초기화 함수를 호출해준다.

    void start()
    {
#if UNITY_IOS
        NotificationServices.RegisterForNotifications(NotificationType.Alert | NotificationType.Badge | NotificationType.Sound);
#endif
    }
    
    // 알림, 사운드, 뱃지를 다 사용하겠다는것이다.

푸쉬 알림 1개 만드는 방법

LocalNotification noti1 = new LocalNotification();
noti1.alertTitle = "랜덤 페이스";
noti1.alertBody = "달려 달려 달려";
noti1.soundName = LocalNotification.defaultSoundName;
noti1.fireDate = DateTime.Now.AddMinutes(15);
NotificationServices.ScheduleLocalNotification(noti1);

LocalNotification로 변수를 받아 메모리 할당을 해주고 타이틀과 내용을 적고 사운드는 디폴트로 세팅

fireDate에는 현재 시간으로부터 15분 후에 알림을 예약해준다고 코딩했다(게임에 따라 다르게 변경 가능)

그리고 마지막으로 ScheduleLocalNotification를 호출해주면 끝.

 

자 이제 유니티 빌드 후 xcode를 통해 최종빌드 후에 테스트 해보면 잘 되겠지?

 

하고 실행해봤으나 잘 되지 않았다......

 

역시 한방에 되는법은 없는가보다 하고 약 반나절간 삽질 끝에 해결을 했는데 그 해결방법을 기록해본다.

 

보통 푸쉬 알람 기능을 쓰고 있는 게임들은 다음과 같이 알림 기능을 사용하고 있다고 명시되어 있다.

알림기능이 있는 앱의 경우

하지만 위의 방법대로 구현해서 빌드 후 실행하면 알림 기능이 제대로 추가되지 않는다.

 

xcode상에 프레임워크를 제대로 추가 안했는지 버전이 안맞았는지 부터 해서 다양한 의심을 하고 수정하고 테스트 해봤으나 결론은 실패.

 

결국, 검색 끝에 찾아낸것이 다음과 같다.

 

최근에 유니티 패키지 매니져를 통해 다양한 기능의 플러그인을 사용할 수 있는데 모바일 알림 기능도 제공해주기 시작했던것이다.

 

혹시라도 이 포스팅을 보면서 패키지 매니져의 존재를 처음 알게된 분들을 위해 접근 경로를 알려드린다.

구버전에는 있을지 모르겠으나 필자가 사용하는 유니티 버전은 2019.3.3f1이다. 

 

반응형

패키지 매니져

 클릭하면 다음처럼 창이 열리는데

 

유니티 제공 Mobile Notifications

왼쪽 상단에 올패키지로 변경하고 우측상단에 noti라고만 쳐도 나온다.

우측 하단에 사진에는 Up to date로 되어있지만 설치전에는 install이라고 있을것이다. 누르면 설치 완료.

 

유니티 메뉴상단 Edit -> Project Settings를 눌러 들어가보면 다음처럼 메뉴가 추가되어 있다.

 

모바일 알림 세팅창

체크는 따로 안해도 된다. 처음부터 체크 되어 있다.

 

여기까지 확인하고 바로 빌드 후 테스트!

 

앱을 설치하고 실행 하자마자 다음처럼 나오면 푸쉬알림이 제대로 추가된것이다.

알림 허용!

약 1년전만 하더라도 최상단에 자체코드만으로도 로컬푸쉬 기능이 제대로 돌아갔던거 같은데

버전업이 되며 초기화가 제대로 안되는 버그(?)가 생긴거 같다.

사실 이 패키지를 추가함으로써 해결된 점은 초기화를 제대로 해줄 수 있었다는점인데

기본 제공 클래스로 구현을 안하고 이 패키지를 설치하고 완전 새로운 방법으로도 로컬 푸쉬를 구현할 수도있다.

 

혹시 궁금하신분들을 위해 링크를 남겨놓을테니 다양한 방법으로 로컬푸쉬 구현을 시도해보길 바란다.

 

https://docs.unity3d.com/Packages/com.unity.mobile.notifications@1.0/manual/index.html

 

Unity Mobile Notifications Package | Mobile Notifications | 1.0.4-preview.9

Unity Mobile Notifications Package The runtime API is split into two parts: AndroidNotificationCenter and iOSNotificationCenter. These can be used to schedule and manage notifications for their respective platforms. You can download a sample Project which

docs.unity3d.com

 패키지 매니져를 설치 후 로컬푸쉬를 구현한 샘플 코드가 깃허브에 올라와있다.

 

https://github.com/Unity-Technologies/NotificationsSamples

 

Unity-Technologies/NotificationsSamples

Sample project for Unity Notifications. Contribute to Unity-Technologies/NotificationsSamples development by creating an account on GitHub.

github.com

* 혹시 몰라서 필요한분들을 위해 안드로이드 & iOS 로컬푸쉬를 구현한 소스코드를 올려놓으니 참고 바란다.

반응형

댓글