Mobile/Flutter

Firebase 연동(Android)

tranzal 2022. 4. 19. 20:36

Firebase를 Flutter에 연동하기 위해서는 Firebase 프로젝트를 생성해야 한다.

https://console.firebase.google.com/?hl=ko 

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

 

위 FirebaseConsole로 접속하여 프로젝트 추가 버튼을 눌러준다.

프로젝트 명은 원하는 이름으로 설정한다.

 

애널리스틱이 필요하다면 설정을 하면 된다.

 

설정이 완료되면 Firebase를 사용할 수 있다.

 

이제 Flutter와 연동해보자.

 

톱니바퀴 버튼을 클릭하여 프로젝트 설정을 누른다.

 

들어가게 되면 위와 같은 화면이 나타난다.

 

해당 화면에서 제일 아래로 내리게 되면 위 이미지처럼 플랫폼을 추가할 수 있다.

 

여기서 안드로이드를 클릭해 준다.

 

클릭하면 위처럼 나타나는 데 여기에 만드는 앱의 패키지 명을 작성한다.

 

선택사항은 작성하지 않아도 괜찮다.

 

다음을 누르게 되면 구성 파일을 다운로드 가능한데 파일을 다운로드하여 ~/android/app 폴더에 넣어준다.

 

이제 build.gradle을 설정하면 된다.

처음은 ~/android에 있는 build.gradle을 설정해 준다.

 

buildscript {
  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository

  }
  dependencies {
    ...
    // Add this line
    classpath 'com.google.gms:google-services:4.3.10'

  }
}

allprojects {
  ...
  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository

    ...
  }
}

위처럼 classpath 'com.google.gms:google-services:4.3.10' 부분만 추가해 주면 된다.

 

다음은 ~/android/app 에 있는 build.gradle을 설정한다.

 

Flutter에 작성되어있는 apply 내용 아래에

apply plugin: 'com.google.gms.google-services'

를 추가해 준다.

또한 최 하단에 있는 dependencies에 

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation platform('com.google.firebase:firebase-bom:29.2.1')
    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.firebase:firebase-firestore-ktx'
    implementation 'com.google.firebase:firebase-core:20.1.2'
    implementation 'com.google.firebase:firebase-messaging:23.0.3'
}

위 코드를 추가해 준다.

 

위 내용에서 analytics는 애널리스틱을 사용할 때 추가하는 항목이다.

 

이렇게 설정하면 안드로이드는 기본 설정이 완료되었다.

 

이제 Flutter 설정을 해보자

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(const MyApp());
}

Firebase를 초기화해주는 코드를 작성해 준다.

 

Future<void> tokenInit() async {
  await FirebaseMessaging.instance.getToken().then((tokenData) {
    setState(() {
      token = tokenData!;
    });
  });
}

 

기기에 대한 토큰 값을 생성해 주는 코드를 작성한다.

 

전체 코드는 아래와 같다.

 

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late String token = '';

  @override
  void initState() {
    super.initState();
    tokenInit();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text("Firebase Test"),
        ),
        body: Center(
            child: Column(
          children: <Widget>[
            Text("토큰 값 : $token"),
          ],
        )));
  }

  Future<void> tokenInit() async {
    await FirebaseMessaging.instance.getToken().then((tokenData) {
      setState(() {
        token = tokenData!;
      });
    });
  }
}

 

토큰이 생성된 것을 확인하였다면 토큰을 이용하여 푸시 메시지를 보내보자.

 

메시지를 보내면 

위와 같이 메시지를 받았다고 콘솔 창에 나타난다.

 

푸시 메시지가 안 나타나는 이유는 푸시 메시지를 위한 설정을 아직 하지 않았기 때문이다.