ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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(),
        );
      }
    }

    근데 실행하니 또 안됨....아무리 찾아봐도 안됨. 오 됨!!! 강의 버전이랑 다 다시 해본 결과 정상 작동 확인. 

    반응형

    댓글

Designed by Tistory.