파파비의 블로그
플러터, flutter) 푸시 알람의 원리 & FCM(Firebase cloud messaging) 본문
안드로이드나, ios 모두 푸시알람 기능을 하기 위해선
push Notification Server에 따로 등록을 해두어야 한다.
그래야 보안이나 오남용 이슈를 방지할 수 있다.
앱을 push Notification Server에 등록하고, 푸시 알람을 보내기 위해선 해당 서버로 요청을 보내면 되고
그러면 해당 서버가 각 앱이 깔린 디바이스들에게 알람을 보내는 형태이다.
이렇게 등록과정이 필요하기 때문에
해당 기능을 앱에 적용하기 위해선 단순히 패키지만을 넣으면 되는 것이 아니라
몇가지 더 할일이 필요하다.
일단 패키지부터
https://pub.dev/packages/firebase_messaging#-installing-tab-
요것이다.
ReadMe쪽에 보면 추가적으로 해야할 일들이 나온다.
참고로, 안드로이드는 애뮬레이터로 test가 가능한데,
ios는 에뮬레이터로 test가 불가능하다고 한다.
(ios로 fcm테스트 하기 위해선 리얼 ios 폰이 필요하다)
그리고 참고로,
이 단계는 옵션인데, 만약에 안하면 알람왔을 때 tap해도 앱이 켜지지 않는다.
또한 test할 때, 애뮬레이터라도 play store가 지원되는 애뮬로 돌려야 한다.
안그러면 작동이되지 않는다.
(그래서 난 이거 테스트할 땐 내 폰으로 직접했다)
아무튼,
패키지 넣기 + 위에 등록 단계를 다 거치고 나면,
메시지를 보낼 수 있다.
여기에 카톡처럼 메시지 마다 알람을 뜨게하거나, 앱이 켜져있을 때도 알람을 받게 하거나, 알람을 누르면 특정 액션을 하게 한다거나... 하려면
추가적으로 해야할 게 있지만, 일단 일방적으로 메시지를 보내기 위해선
여기 파이어베이스 콘솔 가서 보내면 된다.
지금은 딱 알람 받으면 클릭 후 앱이 켜지는 것만 가능하다. 이제 더 구체적으로 조작하는 방법을 알아보자
코드를 살펴보자 특이한 점은, 먼저 FirebaseMessaging은 싱글톤이 없다는 것이다.
이렇게 따로 객체를 부여해야 한다.
그 다음 configure를 통해, onLaunch, onMessage, onResume의 callback 메소드를 부여할 수 있는데 이 3개를 설정해두면 앱이 켜져있을 때나, 꺼져 있을 때, 백그라운드에 있을때 컨트롤을 할 수 있다,
(onBackgroundmessage는 뭔지 모르겠음)
여기보면 각 메소드들의 역할이 나온다.
onMessage는 앱이 켜져있을 때 발동된다. 앱이 켜져있을 때 알람을 받으면 알람을 따로 뜨지는 않고, 바로 onMessage가 발동된다.
onResume은 백그라운드에 있을때 실행되고, onLaunch는 꺼져있을 때 실행된다.
그런데 저 2개가 실행되기 위해선, 추가적으로 해주어야할 설정이 있다.
그것을 설정안해두면 알람만 받고, 알람을 누르면 켜지기만 하고, 따로 메소드가 실행되지는 않는다
이 메소드들을 설정 안해도, 알람을 보내면, 켜져 있을 때 빼곤 알람이 가고, 그 것을 누르면 앱이 켜진다.
근데 설정을 해두면 거기서 추가적으로 어떤일을 하게 할 수 있다.
예를 들면 특정 페이지로 이동시킨 다던지 말이다!!
아무튼 이 설정은 무엇을 말하는 것일까?
코드상의 설정은 아니고, 알람을 보낼 때의 설정을 말한다.
FCM을 보낼 때 위 사진처럼 이렇게 맞춤 데이터에 설정을 채워서 보내면
onResume이나 onLaunch도 잘 실행된다.
이제 configure에 관해 조금 더 얘기해보자면, 이 메소드들을 설정할 때,
물론 레퍼런스로 설정해도 이렇게 바로 설정해도된다.
이제 메시지들은 Future<다이나믹> 이고, 그래서 어떤 값을 return하긴해야한다. 여기서는 그냥 null을 return한 것을 알 수 있다. 그리고 받는 값은 Map의 형태로 다양한 data를 받는다. title, body 등등... 그래서 print를 먼저 해보고 어떤 data가 오는지 확인해봐도 좋다.
'개발 > flutter' 카테고리의 다른 글
플러터, flutter) 앱 퍼블리싱하기(앱이름 설정, 아이콘, 스플래시이미지, 앱 빌드) (0) | 2020.06.24 |
---|---|
플러터, flutter) Native Code를 실행하는 방법(Android) (0) | 2020.06.24 |
플러터, flutter) 겹쳐지는 이미지 버블 만들기 (0) | 2020.06.23 |
플러터, flutter) Fire Storage 사용하기 (0) | 2020.06.23 |
플러터, flutter) FireStore, 다른 collection에 저장된 data 가져오기 (0) | 2020.06.22 |