-
Flutter - 플러터 알림 보내기개발/Flutter 2021. 9. 29. 18:38반응형
기존과 똑같이 파이어베이스 와 플러터 프로젝트를 만들어 준다.
안드로이드 연결해주기 위해서 프로젝트 설정에서 안드로이드를 눌러주고 AndroidManifset.xml에서 패키지 네임을 복사후 넣어준후 다음단계의 json을 android - app 경로에 넣어주면 된다.
android - build.gradle 안에 classpath 'com.android.tools.build:gradle:3.5.3' classpath 'com.google.gms:google-services:4.3.2'를 넣어주자.
android - app - build.gradle 안에 파일 맨 아래에 apply plugin: 'com.google.gms.google-services' 를 넣어주자.
android - app - src - main - AndroidManifest.xml 안에
activity 안에
<intent-filter>
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
를 추가해 주자.
android - app - build.gradle 안에
implementation 'com.google.firebase:firebase-messaging:20.0.0' 을 추가해주고 최신버전을 찾아서 추가해 줘도 된다.
android - app - src - main - kotlin 에서 MainActivity를 우클릭 해주고 새로운 자바 클래스를 생성 해 준다.(내꺼엔 왜 자바 생성이 안뜨는지 모르겠네....)
import io.flutter.app.FlutterApplication; import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback; import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService; import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin; public class Application extends FlutterApplication implements PluginRegistrantCallback { @Override public void onCreate() { super.onCreate(); FlutterFirebaseMessagingService.setPluginRegistrant(this); } @Override public void registerWith(PluginRegistry registry) { FirebaseMessagingPlugin .registerWith( registry.registrarFor( "io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin" ) ); } }
그리고 맨 윗줄 빼고 나머지를 지운 후 위 코드를 넣어주면 된다.
그 후 AndroidManifest.xml 파일에 andori:name의 이름을 .Application으로 바꿔주면 된다.
그 후 lib에 background_messaging_handler.dart 파일을 만들고 해당 코드를 집어 넣어준다.
Future<dynamic> myBackgroundMessagingHandler(Map<String,dynamic> message) { if (message.containsKey('data')){ final dynamic data = message['data']; } if (message.containsKey('notification')){ final dynamic notification = message['notification']; } }
그러나 에러가 나는데 async를 넣어 주거나 pubspec.yaml에서 2.12.0을 2.7.으로 바꿔주면 정상 작동한다.
pubspec.yaml 에 firebase_messaging: ^6.0.13 를 추가해준다.
그 후 main에 코드를 추가해 준다.
class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); _firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) async { print("onMessage: $message"); }, onBackgroundMessage: myBackgroundMessagingHandler, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); } ); _firebaseMessaging.requestNotificationPermissions( IosNotificationSettings(sound: true, badge: true, alert: true) ); _firebaseMessaging.onIosSettingsRegistered.listen((IosNotificationSettings settings) { print("Settings registered: $settings"); }); _firebaseMessaging.getToken().then((token) { print(token); }); return MaterialApp( title: 'Flutter Demo', home: Container(), ); } }
그러나 현재 statelesswidget인데 statefullwidget라면 init로 옮겨줄수 있음.
class MyApp extends StatefulWidget { FirebaseMessaging _firebaseMessaging // This widget is the root of your application. @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { @override void initState(){ super.initState(); _firebaseMessaging= FirebaseMessaging(); _firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) async { print("onMessage: $message"); }, onBackgroundMessage: myBackgroundMessagingHandler, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); } ); _firebaseMessaging.requestNotificationPermissions( IosNotificationSettings(sound: true, badge: true, alert: true) ); _firebaseMessaging.onIosSettingsRegistered.listen((IosNotificationSettings settings) { print("Settings registered: $settings"); }); _firebaseMessaging.getToken().then((token) { print(token); }); } Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', home: Container(), ); } }
근데 실행하니 또 안됨....아무리 찾아봐도 안됨. 오 됨!!! 강의 버전이랑 다 다시 해본 결과 정상 작동 확인.
반응형'개발 > Flutter' 카테고리의 다른 글
Flutter - 인별 클론 코딩 V1.0, 피드화면 (0) 2021.10.01 Flutter - 인별 클론 코딩 V1.0, 시작 (0) 2021.09.29 Flutter - 광고 넣기, firebase_admob 라이브러리 개발 중지로 다른 방법 찾아봐야 할듯. (0) 2021.09.28 Flutter - 페이스북 로그인, 애플로그인 (0) 2021.09.28 Flutter - 구글 로그인 초기, 구현, 로그아웃 (0) 2021.09.14 댓글