공부하는 다락방

알림채널(Notification Channel) 본문

Android

알림채널(Notification Channel)

권파인 2018. 9. 7. 15:06

이제 targetSDKVersion 을 26 이상(Android 8.0 Oreo) 변경하게 되었습니다.

그러면서 발생하게 된 문제가 푸시 지원 문제였습니다.


    • 푸시 알림을 사용하는 경우 Google 클라우드 메시징(메시지 수신용) 또는 Firebase 클라우드 메시징 중 하나를 사용할 것입니다. 이 때, API 레벨 26을 지원하기 위해서는 반드시 Google Play Service SDK 10.2.1 혹은 그 이상 버전 SDK (2017년 3월 21일 출시)를 사용해야합니다.
(위 내용을 자세하게 보시려면 링크를 참조하세요~) 


이걸 모르고 앱 배포를 하였을 때 백그라운드에서 앱 강제종료되는 현상이 발생 -> 긴급업데이트를 진행했습니다.

이제 문제가 없겠지 생각했더니, 
푸시 전송시 푸시가 오지 않는 문제 발생..

원인은 Notification Channel!!

오레오에서부터는 
이 Notification Channel을 필수로 만들어 주어야 합니다.

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder;

// 오레오 버전 이상은 Channel 생성
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel("ebookPush", "ebookPush", NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(mChannel);
builder = new NotificationCompat.Builder(context, mChannel.getId());
} else {
builder = new NotificationCompat.Builder(context);
}
builder.setAutoCancel(true)
.setSmallIcon((Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) ? R.drawable.push_white : R.drawable.push_color)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
.setTicker(title)
.setContentTitle(title)
.setContentText(message)
.setPriority(NotificationCompat.PRIORITY_MAX); //최대로 펼침

if (banner != null) {
NotificationCompat.BigPictureStyle style = new NotificationCompat.BigPictureStyle();
style.setBigContentTitle(title);
style.setSummaryText(message);
style.bigPicture(banner);

builder.setStyle(style);
}

builder.setContentIntent(pendingIntent);
builder.setDefaults(Notification.DEFAULT_VIBRATE);
builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

notificationManager.notify(1234, builder.build());


이제 문제없이 수신이 잘 되는 것을 확인 할 수 있습니다.




==========================================================
혹시나 저같은 사람을 위해 다른 팁을 더 드리자면,

Notification 에 ProgressBar로 다운로드 게이지를 노출하는 서비스를 사용할때 저렇게 사용하니 계속 게이지가 올라갈때마다 진동이 울리는 이슈가 발생이 됩니다.

그때는 아래처럼 변경해주면 게이지가 올라갈 때마다 울리는 진동이 안 울리게 됩니다.

mContext = context;
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// IMPORTANCE_DEFAULT 진동이 계속 울림.
// IMPORTANCE_LOW 로 중요도를 낮추면 계속 울리던 진동이 울리지 않음.
NotificationChannel mChannel = new NotificationChannel("ebookDownload", "ebookDownload", NotificationManager.IMPORTANCE_LOW);
mNotificationManager.createNotificationChannel(mChannel);
mBuilder = new NotificationCompat.Builder(mContext, mChannel.getId());
} else {
mBuilder = new NotificationCompat.Builder(mContext);
}
bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.ic_launcher);


'Android' 카테고리의 다른 글

retrieveExplicitStyle NullPointerException Android 10  (0) 2020.03.12
.aab to .apk 변환  (0) 2020.03.09
외장 SD카드 Path 가져오기  (0) 2017.04.12
안드로이드 디버깅 플랫폼  (0) 2017.04.07
URL XML 파싱 방법  (0) 2017.03.08
Comments