[flutter/플러터] 앱 아이콘 및 알림 아이콘 설정

박민준·2022년 3월 13일
0

오늘 해볼 것은 앱 아이콘 설정 및 알림(flutter_local_notification) 아이콘을 설정해주는 작업이다.

앱 아이콘 설정은 간단하다. 네이티브 폴더를 직접 건드리는 것도 가능하지만 flutter_launcher_icons 패키지를 사용하면 간단히 가능하다.

일단 해당 라이브러리를 임포트해주고 pub get을 해준다.

dependencies가 아니라 dev_dependencies에 등록을 해줘야 한다.

그 다음 아이콘으로 사용할 파일을 준비하자!! png 파일로 준비했다.
소문에 의하면 1024*1024 여야 하고 1024kb 이하 용량이어야 한다고 한다.

그러고 위 그대로 pubspec.ymal에 써주면 된다. 나는 그냥 하단에 썼다.
android: "launcher_icon" 뜻은 네이티브 디렉토리에 launcher_icon.png 이라는 파일명으로 생성하라는 것 같다.
image_path야 이미지 위치를 써주면 되는 것이고. (나는 assets폴더에 icon.png파일을 저장했으므로 저렇게 썼다)

flutter pub run flutter_launcher_icons:main

그러고 프로젝트 루트폴더 경로에서 위와 같이 터미널을 실행해주면 된다.
위 명령은 이미 설정된 경로와 이름 등을 바탕으로 실제 네이티브 폴더 및 파일 구성을 업데이트하라는 것이겠죠.

그러고 다시 실행하면 반영이 되어 있을 것.
아래 폴더 목록처럼 구성이 된다.

mimap ~~ 폴더들에 launcher_icon.png가 추가됐다. 폴더명 뒤의 사족은 아마 사이즈일 것이다. 사이즈별로 알맞게 변환되어 해당 폴더에 들어가 있는 것.

splash screen의 아이콘도 변경이 되더라. 아마도 루트 앱 아이콘을 끌어다 스플래시 스크린에 띄우는 것 같다. 이거는 나중에 알아보자. 정확한 원리는 모르겠다. 가끔 적용이 안되는 경우도 있던데.. 안된다면 splash screen은 따로 등록을 한번더 해주도록 하자.

이제는 알림 아이콘을 다뤄보자

놀랍게도 따로 설정을 해주지 않아도 위에서 설정한 launcher_icon.png가 그대로 적용된다. 하지만 안드로이드의 경우, 앱이 켜져 있을 땐 푸시알람을 줄 수 없는 lock이 걸려져 있다. 그래서 따로 flutter_local_notification이라는 패키지를 통해서 설정을 해주었다.(이전 게시물 참고...)

현재 상태 => 앱이 백그라운드 실행 상태일 때, 꺼져있을 때는 바뀐 아이콘이 푸쉬알림에 적용되어 있다.
하지만 앱이 켜져있을 때 오는 아이콘은 적용이 안 되어 있는 상태!!

[기존 코드]

await flutterLocalNotificationsPlugin.initialize(
        const InitializationSettings(
            android: AndroidInitializationSettings('@mipmap/ic_launcher'), iOS: IOSInitializationSettings()),
        onSelectNotification: (String? payload) async {});

기존 코드의 android: AndroidInitializationSettings('@mipmap/ic_launcher'), 부분을 보자. @mipmap/ic_launcher라는 것은 해당 폴더 목록 바로 위 폴더 목록 사진에서 확인했던 폴더 안의 ic_launcher.png로 아이콘을 설정하겠다 이거다. 이렇게 내가 기존에 코드를 짜 놓은 이유는 위에서 런처 아이콘 설정을 하기 전에는 ic_launcher.png 밖에 없었기 때문이다. 이제 이걸 아래와 같이 변경해주자.

(왜인지 모르겠으나 파일 확장자 .png는 생략한다)

await flutterLocalNotificationsPlugin.initialize(
        const InitializationSettings(
            android: AndroidInitializationSettings('@mipmap/launcher_icon'), iOS: IOSInitializationSettings()),
        onSelectNotification: (String? payload) async {});

이러면 이제 잘 된다!!

profile
코린이

0개의 댓글