민프

[Android] FCM Push 기능 구현해보자!! 본문

[Android]

[Android] FCM Push 기능 구현해보자!!

민프야 2021. 7. 6. 19:13

FCM을 이용해서 알림 Push를 해보자!

FCM이란 Firebase Cloud Messaging이고, 
카카오톡에서 나에게 채팅이 오면 Push 알림이 오는 것 처럼

이 FCM을 이용하면 앱을 이용하는 이용자들에게 알림을 보내줄 수 있다.

 


1. 먼저 프로젝트 만들기
https://console.firebase.google.com/u/0/

 

로그인 - Google 계정

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

accounts.google.com

-1) 프로젝트 만들기 누르기

 -2) 프로젝트 이름 지정

 이렇게 해주면 프로젝트가 생성된다.

2. 앱을 추가하여 시작하기

패키지 이름에는 나의 어플의 패키지 이름을 넣고 앱 등록을 눌러주면 

구성 파일 다운로드가 나오는데 이것을 다운로드 해주고 오른쪽에 나와있는 이미지 처럼 project -> app에 넣어주고 
다음을 누른다.

 

다음 나오는 내용 처럼 gradle에 추가해주고 다음을 누르면 
android 앱에 firebase추가가 완료 된다.


자 이제 본격적으로 FCM에 필요한 작업들을 해보자!

https://firebase.google.com/docs/cloud-messaging/android/client?hl=ko 

 

Android에서 Firebase 클라우드 메시징 클라이언트 앱 설정

Firebase 클라우드 메시징 Android 클라이언트 앱을 만들려면 FirebaseMessaging API와 Gradle이 있는 Android 스튜디오 1.4 이상을 사용하세요. 이 페이지의 안내에서는 Android 프로젝트에 Firebase를 추가하는 단

firebase.google.com

3. 프로젝트에 FCM 설정

 

    //FCM 관련
    implementation platform('com.google.firebase:firebase-bom:28.2.0')
    implementation 'com.google.firebase:firebase-analytics'
    implementation 'com.google.firebase:firebase-messaging:22.0.0'
    //FCM 관련
}
//FCM 관련
apply plugin: 'com.google.gms.google-services'

Manifest에 빨간색 부분을 추가하고 

      <service
            android:name=".MyFirebaseMessagingService"
            android:stopWithTask="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>


MyFirebaseMessagingService.java 파일을 하나 생성 후에 코드를 삽입한다.

 

https://github.com/firebase/quickstart-android/blob/cdf2619efe945f2b3d2536c805fbb71636adc96f/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/java/MyFirebaseMessagingService.java#L58-L101

 

firebase/quickstart-android

Firebase Quickstart Samples for Android. Contribute to firebase/quickstart-android development by creating an account on GitHub.

github.com

 

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage != null && remoteMessage.getData().size() > 0) {
            sendNotification(remoteMessage);
        }
    }

    private void sendNotification(RemoteMessage remoteMessage) {

        String title = remoteMessage.getData().get("title");
        String message = remoteMessage.getData().get("message");

        final String CHANNEL_ID = "ChannerID";
        NotificationManager mManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            final String CHANNEL_NAME = "ChannerName";
            final String CHANNEL_DESCRIPTION = "ChannerDescription";
            final int importance = NotificationManager.IMPORTANCE_HIGH;

            // add in API level 26
            NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, importance);
            mChannel.setDescription(CHANNEL_DESCRIPTION);
            mChannel.enableLights(true);
            mChannel.enableVibration(true);
            mChannel.setVibrationPattern(new long[]{100, 200, 100, 200});
            mChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
            mManager.createNotificationChannel(mChannel);
        }

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
        builder.setSmallIcon(R.drawable.ic_launcher_background);
        builder.setAutoCancel(true);
        builder.setDefaults(Notification.DEFAULT_ALL);
        builder.setWhen(System.currentTimeMillis());
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setContentTitle(title);
        builder.setContentText(message);
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
            builder.setContentTitle(title);
            builder.setVibrate(new long[]{500, 500});
        }
        mManager.notify(0, builder.build());
    }

    @Override
    public void onNewToken(String s) {
        super.onNewToken(s);
    }
}

여기까지 하고 이제 알림을 보내보자!!


4. Cloud Messaging

타겟에 나의 어플을 넣으면 된다.

예약에서 지금을 선택하고 검토를 누른 후 게시를 누르면

Push가 간다. 

 

이렇게 FCM을 써보았는데

내가 하고싶은 기능은
내가 올린 게시물에 댓글이 달렸을때 PUSH가 되는 것 이다.

다음 포스트에는 서버 + FCM 을 해봐야겠다. 

https://minf.tistory.com/18?category=871909 

 

Comments