FCM(Firebase Cloud Messaging)

2018. 7. 6. 12:28Android

반응형

1. Firebase Console에서 프로젝트 생성

2. AndroidStudio

  ㅇ Firebase Console에서 프로젝트 생성시 'google-services.json' 파일 다운로드 및 app 하위 경로에 붙여넣기

  ㅇ build.gradle(Project 수준)에서 다음 내용 추가

dependencies {
classpath 'com.google.gms:google-services:3.3.1'
}

  ㅇ build.gradle(app 수준)에서 다음 내용 추가 후 sync now 선택하여 sync 맞춤

dependencies {
implementation 'com.google.firebase:firebase-messaging:15.0.2'
}
apply plugin: 'com.google.gms.google-services'

  ㅇ AndroidManifest.xml에서 permission 및 service 추가

<uses-permission android:name="android.permission.INTERNET"/>

<!-- 서비스 태그 추가 -->
<service
android:name=".MyFCMService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>

<service
android:name=".MyFIService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>

  ㅇ MyFCMService 클래스 생성

public class MyFCMService extends FirebaseMessagingService {
private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();

// 메시지 수신
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.i(TAG, "onMessageReceived..");

Map<String, String> data = remoteMessage.getData();
String title = data.get("title");
String messagae = data.get("content");

sendNotification(title, messagae);
}

private void sendNotification(String title, String message) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_CANCEL_CURRENT);

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_dialog_info))
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
}

 ㅇ MyFIService 클래스 생성

public class MyFIService extends FirebaseInstanceIdService {
private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();

// 토큰 재생성
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String token = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "token : " + token);
}
}

* 앱 실행시 FCM SDK에서 Client App 인스턴스용 등록 토큰 생성(MyFIService)

* 토큰이 새로 생성될 때마다 onTokenRefresh() 콜백이 실행되므로 getToken() 호출하면 사용 가능한 현재 등록 토큰에 항상 액세스 가능함.


3.  Firebase Console에서 메시지 보내기 

    - 대상 > 사용자 타겟팅 조건 > 앱선택(com.app.FCMTest)

    - 고급 옵션에서 제목 및 맞춤데이터 작성 후 메시지 보내기 클릭

      => onMessageReceived()에서 받는 메시지의 key값으로 보내야 함.

"title" : "fcm테스트"

"content" : "fcm테스트 내용"






반응형

'Android' 카테고리의 다른 글

FCM 서버(Spring) 연동  (0) 2018.07.07
FCM 푸시알림시 화면깨우기  (0) 2018.07.07
개선된 로딩 화면 (Splash Screen)  (0) 2018.07.02
웹뷰(2)  (0) 2018.06.08
웹뷰(1)  (0) 2018.06.08