본문 바로가기

개발/PLUG-IN

[NATIVE, ANDROID] Local Notification(로컬 알림) 유니티 플러그인

개요

유니티에서 네이티브 알림 기능을 iOS 만 제공하고 있습니다.
안드로이드에서 로컬 알림을 이용하려면 플러그인을 직접 제작하거나 다른 사람이 만들어 둔 플러그인을 사용해야 합니다.
이번에 다소니닷넷에서도 로컬 알림을 사용하게 되어 직접 제작을 하였습니다.

유니티 플러그인

notify-1.0.0.unitypackage


사용방법

1. 알림 아이콘 적용

안드로이드의 최신 버전에서는 작은 크기의 알림 아이콘과 큰 크기의 알림 아이콘 이렇게 두가지를 사용하고 있는데요.
그 중 작은 크기의 알림 아이콘은 필수 아이콘으로 꼭 적용해야합니다.

아이콘 적용 방법은 간단합니다.

Project Folder/Assets/Plugins/Android/DasonyNotification/res/drawable/


위 경로에 아이콘 이미지를 추가하신 후 메소드 호출 시 아이콘 이름만 입력하시면 알림에 적용됩니다.
안드로이드 이미지는 drawable 폴더의 이름에 따라 해상도(dpi) 별로 호출이 가능한건 알고 계시죠? 같은 방법으로 이미지를 추가하시면 됩니다.
해상도(dpi) 폴더와 예제 아이콘이 플러그인에 포함되어 있으므로 이미지 추가 혹은 교체 후 사용하시면됩니다.

1-1 해상도(dpi) 별 drawable 폴더명

drawable

drawable-ldpi

drawable-mdpi

drawable-hdpi

drawable-xhdpi

drawable-xxhdpi

drawable-xxxhdpi


2. 로컬 알림 설정

로컬 알림을 사용할 스크립트 상단에 플러그인의 클래스를 사용할 수 있도록 아래와 같이 선언합니다.

using Dasony.Libs;


2-1 초기화

로컬 알림 플러그인은 싱글톤으로 제작되어 LocalNotification 클래스의 Instance 속성을 호출하면 자동으로 초기화됩니다.


public class Test : MonoBehaviour {
    LocalNotification notification;

    void Start () {
        notification = LocalNotification.Instance;
    }
}


2-2  알림 보내기

NotificationData.Builder 클래스를 이용하여 알림을 생성합니다.
알림을 생성할 때 SetDelay를 이용해 지연시간을 넣어주면 스케쥴 알림으로 적용됩니다.

public class Test : MonoBehaviour {

    ...

    void SendNotification () {
        NotificationData.Builder builder = new Notification.Builder(1) // 정수형 알림 id
            .SetSmallIcon ("notify_icon") // 위에서 추가한 아이콘의 이름
            .SetContentTitle("제목 입력")
            .SetContentText("본문 입력")
            .SetAutoCancel(true)
            .SetDelay(30000); // 30초 후에 알림 옴, 단위는 밀리초

        notification.SetLocalNotification(builder.Build()); // 알림을 보냅니다.
    }
}


2-3 알림 취소 (스케쥴 알림 이용 시)

스케쥴 알림(지연시간 추가) 을 등록 후 알림이 수신되기 전에 알림을 취소할 수 있습니다.


# 1개의 알림 취소
notification.CancelScheduleNotification(1); // 알림 생성 시 입력했던 정수형 알림 id


# 모든 알림 취소
notification.CancelAllScheduleNotification();


2-4 수신된 모든 알림 없애기

이미 수신된 알림을 없애지 않으면 앱 아이콘에 뱃지(숫자 표시)가 없어지지 않을 수 있습니다.
이때 알림을 없애는 메서드를 호출하면 됩니다.

notification.ClearAllLocalNotifications();


3. 레퍼런스

Notification (Dasony.Libs.Notification)

알림을 설정하거나 취소, 제거 등을 실행해주는 클래스입니다.
싱글톤으로 제작되었으며, Instance 속성을 호출하면 생성자가 자동으로 초기화됩니다.

정리

Public 생성자

Notification ()


사용자가 직접 생성자를 호출 할 수 없습니다.

Notification.Instance 를 이용하여 메서드를 호출해야 합니다.

# Public 메서드

TestNotification(long delay)

알림이 정상 동작하는지 테스트 할 때 호출하기 위한 용도입니다 .


제목 : Test

내용 : Test Notification!


위의 내용으로 알림이 설정됩니다.

delay 값을 입력하면 스케쥴 알림으로 설정됩니다.

SetLocalNotification (NotificationData data)

NotificationData로 생성된 알림 데이터를 이용하여 로컬 알림을 설정합니다.

CancelScheduleNotification (int id)

스케쥴 알림으로 설정된 알림을 취소 처리합니다.

id는 NotificationData를 생성할 때 입력한 id를 사용합니다.

CancelAllScheduleNotifications ()

스케쥴 알림으로 설정된 모든 알림을 취소 처리합니다.

ClearAllLocalNotifications ()

호출 처리된 모든 알림을 제거합니다.

이때 앱 아이콘에 노출된 배지도 함께 제거됩니다.


NotificationData.Builder (Dasony.Libs.NotificationData.Builder)

알림을 생성시킬 때 사용할 수 있는 속성들을 정의해주는 보조 클래스입니다.
NotificationData 클래스는 독립적으로 생성할 경우 기본 속성으로 생성되며, 속성 값을 변경할 수 없도록 제작되었습니다.
속성 값을 변경하여 NotificationData를 정의하기 위해서는 NotificationData.Builder 클래스를 이용해야합니다.

정리

# Public 생성자

NotificationData.Builder (int id, ChannelData channelData = null)


id : 정수형 알림 id

channelData : 최근 안드로이드 라이브러리에 추가된 내용으로 알림을 그룹화 함 (null 가능)


# Public 메서드

SetContentTitle (string value)

일반적인 알림의 제목을 설정합니다.

SetContentText (string value)

일반적인 알림의 내용을 설정합니다.

SetContentTicker (string value)

알림 수신 시 노치에 표시되는 한 줄 내용을 설정합니다.

SetSmallIcon (string iconName)

알림에 노출 될 작은 크기의 아이콘을 설정합니다. (필수)

SetLargeIcon (string iconName)

알림에 노출 될 큰 크기의 아이콘을 설정합니다. (선택)

SetColor (Color32 color)

알림에 노출 되는 작은 크기의 아이콘의 색상을 변경합니다.

SetBadgeIconType (int type)

앱 아이콘 위에 노출되는 배지의 형태를 설정합니다.

SetPriority (int priority)

알림의 우선 순위를 설정합니다.

SetDelay (long milliSecond)

알림을 지연시킵니다. 흔히 스케쥴 알림이라고 말합니다.

SetAutoCancel (bool value)

true로 설정할 경우 사용자가 알림을 터치하면 노치에서 자동으로 알림이 제거됩니다.


마치며

제가 게임을 개발하면서 필요한 메서드만 적용한 상태입니다.
혹시 추가로 필요한 기능이 있으시면 댓글로 남겨주시면 업데이트를 해보도록 하겠습니다.


  • Jamespark 2019.02.12 14:07 댓글주소 수정/삭제 댓글쓰기

    유니티에서 2-1초기화에서 " 1>LocalNotification notification " 선언 시 "LocalNotification"를 찾을 수 없다고 나오네요

    2> NotificationData.Builder builder = new Notification.Builder(1) // 정수형 알림 id
    에서 Notification선언 부분에 Builder 에러가 납니다

    혹시 이유를 알수 있을까요?
    참고로 안드로인드 빌드입니다

  • soundpiercer 2019.04.28 18:11 댓글주소 수정/삭제 댓글쓰기

    로컬푸시 잘오네요. 감사합니다. FCM 서버푸시랑 병행해서 쓰니 효과만점이네요
    설명서에 오류가 있는데

    Notification notification; 이렇게 선언해야되고

    초기화는 notification = Notification.Instance; 이렇게하고

    사용은 NotificationData.Builder builder = new NotificationData.Builder(0)
    ...

    이렇게 해야 제대로되네요.
    그리고 FCM이나 GPGS 같은게 이미 연동되어 있으면 Google Play Resolver는 import를 안해야 컴파일에러 없이 제대로 돌아가는것같습니다.

    • 도움이 되셔서 다행이네요..
      @Jamespark 님께서 말씀하신 문제도 해결해주셔서 감사합니다.
      제가 시간이 없어 문제 확인을 아직 못했는데 초기화 설명이 잘못되었나보네요.
      시간 날때 수정해두도록 하겠습니다.
      쓰시다가 발생하는 문제 있으시면 답글달아주세요.
      시간날때 수정하도록 하겠습니다.
      감사합니다.

  • LastP 2019.10.28 21:47 댓글주소 수정/삭제 댓글쓰기

    @soundpiercer 님이 맗씀하신데로 Play Resolver 에러가 나길레 전부 제거하고 진행하니 TestNotification 진행하니 앱이 죽는 상황이 발생합니다 따로 위치값을 잡아보려고 했지만 안드로이드 스튜디오에서 로그 확인이 어렵습니다 선언 및 초기화 진행하였고 테스트 푸쉬 날려보았지만 그대로 앱 정지 현상이 오네요 어떻게 사용하셨는지 궁금합니다

    • play resolver는 기존에 gpgs나 다른 구글 라이브러리를 이용중이셨다면 import 하실때 해당 부분을 선택 해제후 import 하시는게 좋을것 같아요.
      현재 버전의 play resolver가 사용 중인 구글 라이브러리보다 버전이 낮을수 있거든요.
      그리고 기존에 추가된 구글 라이브러리와 gcm 라이브러리 버전이 동일 한지도 확이해야합니다.
      버전이 맞지 않으면 정상동작하지 않을 수 있습니다.