파파비의 블로그

플러터, flutter) 푸시 알람의 원리 & FCM(Firebase cloud messaging) 본문

개발/flutter

플러터, flutter) 푸시 알람의 원리 & FCM(Firebase cloud messaging)

N. Dave 2020. 6. 23. 15:53
반응형

안드로이드나, ios 모두 푸시알람 기능을 하기 위해선 

push Notification Server에 따로 등록을 해두어야 한다.

그래야 보안이나 오남용 이슈를 방지할 수 있다.

 

앱을 push Notification Server에 등록하고, 푸시 알람을 보내기 위해선 해당 서버로 요청을 보내면 되고

그러면 해당 서버가 각 앱이 깔린 디바이스들에게 알람을 보내는 형태이다.

 

이렇게 등록과정이 필요하기 때문에

해당 기능을 앱에 적용하기 위해선 단순히 패키지만을 넣으면 되는 것이 아니라

몇가지 더 할일이 필요하다.

 

일단 패키지부터 

https://pub.dev/packages/firebase_messaging#-installing-tab-

 

firebase_messaging | Flutter Package

Flutter plugin for Firebase Cloud Messaging, a cross-platform messaging solution that lets you reliably deliver messages on Android and iOS.

pub.dev

 

요것이다.

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가 오는지 확인해봐도 좋다.

반응형
Comments