fcm push notification example / (fcm) 안드로이드 푸시 알림 (2)


HKH

Share

 

 

Firebase Cloud Messaging을 사용하여 안드로이드 푸시 알림을 구현 하는 방법 입니다.

 

 

1. project level의  build.gradle 파일에 google-service를 추가합니다.

 

dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
//classpath 'com.google.gms:google-services:3.0.0'
classpath 'com.google.gms:google-services:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}

2. app level의 build.gradle 파일에 firebase-messaging을 추가합니다. 그리고 google-service plugin을 apply 해줍니다.

 

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'

compile 'com.google.firebase:firebase-messaging:9.0.2'

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

 

 

3. Android-manifest.xml

 

<application></application> 태그 안에 아래 내용을 추가해 줍니다.
<service
android:name=".FirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service
android:name=".FirebaseInstanceIDService" >
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>

4. FirebaseInstanceIDService.java

/**
* Created by HKH on 2016-06-28.
*/
import android.util.Log;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;


public class FirebaseInstanceIDService extends FirebaseInstanceIdService {

private static final String TAG = "MyFirebaseIIDService";

// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String token = FirebaseInstanceId.getInstance().getToken();

}

}

사용자 기기별 token을 생성하는 클래스 입니다.

나중에 push 알림을 특정 타겟에게 보낼 때 사용되는 고유 키 값 입니다.

이 토큰값을 용도에 맞게 사용하시면 됩니다.


5. FirebaseMessagingService.java


/**
* Created by HKH on 2016-06-28.
*/
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.PowerManager;
import android.support.v4.app.NotificationCompat;

import com.google.firebase.messaging.RemoteMessage;

import java.io.BufferedInputStream;
import java.net.URL;
import java.net.URLConnection;


public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
private static final String TAG = "FirebaseMsgService";

// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

sendPushNotification(remoteMessage.getData().get("message"));
}

private void sendPushNotification(String message) {
System.out.println("received message : " + 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_ONE_SHOT);

Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.noti).setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher) )
.setContentTitle("Push Title ")
.setContentText(message)
.setAutoCancel(true)
.setSound(defaultSoundUri).setLights(000000255,500,2000)
.setContentIntent(pendingIntent);

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
wakelock.acquire(5000);

notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}

}


푸시메세지가 들어왔을때 실제 사용자에게 푸시알림을 만들어서 띄워주는 클래스 입니다.

Api를 통해 푸시 알림을 전송하면 입력한 내용이 message에 담겨서 오게 됩니다.


6. MainActivity.java


import com.google.firebase.messaging.FirebaseMessaging;

onCreate 함수 안에

FirebaseMessaging.getInstance().subscribeToTopic("notice");

-> 여기서 topic은 api를 사용하여 푸시 알림 전송시 같은 토픽명 그룹 전체에 메세지를 발송 할 수 있습니다.

 

 테스트는 Firebase Console의 Notification 메뉴에서 가능합니다.

 

 

 

 

백그라운드 푸시알림 받기 :: https://trandent.com/board/Android/detail/744 

 

+ 내용 추가 

 

1. android sdk에 google play services 가 설치되어있지 않아서 오류가 발생한다면

 

android studio 사용중이시라면 tools -> android -> SDK manager -> SDK Tools 탭에 들어가셔서 Google Play services 설치해 보시기 바랍니다.

2. onTokenRefresh에서 뿐만 아니라 어느 시점에서든 

String token = FirebaseInstanceId.getInstance().getToken(); 을 사용하게 되면 사용자 기기의 고유 토큰 값을 가져 올 수 있습니다.

여기서 얻은 토큰으로 특정 사용자에게 푸시알림 전송이 가능합니다.

첨부파일
Sign in required
  • : {{i.writer }}
    {{i.regdate}}


    {{i.content||breakFilter }}