Program/Flutter

Flutter + FCM : Android 기준

하랑파파♡ 2020. 8. 10. 11:44
728x90
반응형
SMALL

firebase cloud message package 다운로드

[https://pub.dev/packages/firebase_messaging](https://pub.dev/packages/firebase_messaging)

[project]/android/build.gradle 수정

dependencies {
  // Example existing classpath
  classpath 'com.android.tools.build:gradle:3.5.3'
  // Add the google services classpath
  classpath 'com.google.gms:google-services:4.3.2'
}

[project]/android/app/build.gradle 수정

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

android/app/src/main/AndroidManifest.xml 수정

<application>
  ...
  <activity>
    ...
    <intent-filter>
        <action android:name="FLUTTER_NOTIFICATION_CLICK" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
  </activity>
</application>

FirebaseMessaging 객체 생성

final FirebaseMessaging _fcm = FirebaseMessaging();

initState() 함수 안에 fcm 수신 함수 설정

_fcm.configure(
  // 앱이 실행중일 경우
  onMessage: (Map<String, dynamic> message) async {
    print("onMessage: $message");
  },
  // 앱이 완전히 종료된 경우
  onLaunch: (Map<String, dynamic> message) async {
    print("onLaunch: $message");
  },
  // 앱이 닫혀있었으나 백그라운드로 동작중인 경우
  onResume: (Map<String, dynamic> message) async {
    print("onResume: $message");
  },
);

수신 테스트

https://console.firebase.google.com/project/[자신의 firebase 프로젝트명]/notification?hl=ko
- 테스트 메세지 전송 시 테스트기기의 token 값이 필요
- 메세지 등록 하고 다음 버튼을 계속 클릭 하고 검토 버튼 클릭 후 게시를 클릭하면 발송됨.

백그라운드에서 메시지를 처리하려면:

/android/app/build.gradle 수정

dependencies {
  // ...

  implementation 'com.google.firebase:firebase-messaging:<latest_version>'
}

Application.java 클래스를 MainActivity.java와 동일한 디렉토리의 앱에 추가.

일반적으로 <app-name>/android/app/src/main/java/<app-organization-path>/에서 
확인할 수 있다.

package io.flutter.plugins.firebasemessagingexample;

import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;

public class Application extends FlutterApplication implements PluginRegistrantCallback {
  @Override
  public void onCreate() {
    super.onCreate();
    FlutterFirebaseMessagingService.setPluginRegistrant(this);
  }

  @Override
  public void registerWith(PluginRegistry registry) {
    GeneratedPluginRegistrant.registerWith(registry);
  }
}

AndroidManifest.xml에서 응용 프로그램의 이름 속성을 설정

이는 일반적으로 <app-name>/android/app/src/main/에서 확인할 수 있다.

<application android:name=".Application" ...>

dart 파일에 백그라운드 메세지를 처리하는 기능 정의

Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) {
  if (message.containsKey('data')) {
    // Handle data message
    final dynamic data = message['data'];
  }

  if (message.containsKey('notification')) {
    // Handle notification message
    final dynamic notification = message['notification'];
  }

  // Or do other work.
}

메세지 수신을 처리하는 함수 수정 : onBackgroundMessage 프로퍼티 추가

_firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        _showItemDialog(message);
      },
      **onBackgroundMessage: myBackgroundMessageHandler,**
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
        _navigateToItemDetail(message);
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
        _navigateToItemDetail(message);
      },
    );
728x90
반응형
LIST

'Program > Flutter' 카테고리의 다른 글

flutter build apk  (0) 2020.08.11
Flutter Splash Screen 적용  (0) 2020.08.07
Mac Flutter 개발 환경  (0) 2020.07.15
Dart 기본 문법  (0) 2020.07.08
Flutter Card Widget Sample  (0) 2019.10.02