본문 바로가기
Android

안드로이드 8.0이상의 버전 Notification 및 버전별 처리

by 일용직 코딩노동자 2020. 3. 24.
728x90
반응형

기존 푸시알람과는 달리 안드로이드 8.0이상부터는 채널이란 개념이 추가됩니다.

 

채널이란건 한번 그 채널로 푸시를 띄웠다면 앱을 지우지 않는 이상 그 채널이 삭제되진 않습니다.

 

 private void Success_Notification(String messageBody, String messageTitle) {
        int notifyID = 2;

        if(android.os.Build.VERSION.SDK_INT > 25) {
            //푸쉬알림음설정//
            AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
                    .build();
            //푸쉬알림음설정//

            //푸시를 클릭했을때 이동//
            Intent intent = new Intent(this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , intent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
            //푸시를 클릭했을때 이동//

            NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            NotificationChannel mChannel = new NotificationChannel(Noti_ID, name, NotificationManager.IMPORTANCE_HIGH);
            mChannel.setDescription(description);
            mChannel.enableLights(true);
            mChannel.enableVibration(true);
            mChannel.setSound(uri,audioAttributes);

            mNotificationManager.createNotificationChannel(mChannel);
            mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            try {
                Notification notification = new Notification.Builder(MyFBMessageService.this,Noti_ID)
                        .setContentTitle(URLDecoder.decode(messageTitle, "UTF-8"))
                        .setContentText(URLDecoder.decode(messageBody, "UTF-8"))
                        .setSmallIcon(R.drawable.icon)
                        .setContentIntent(pendingIntent)
                        .setAutoCancel(true)
                        .build();
                mNotificationManager.notify(notifyID, notification);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }

        else{
            NotificationManager notificationManager;
            PendingIntent intent2 = PendingIntent.getActivity(this, 0, new Intent(getApplicationContext(), MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);

            Notification.Builder builder = null;
            try {
                builder = new Notification.Builder(getApplicationContext())
                        .setSmallIcon(R.drawable.icon)
                        .setDefaults(Notification.BADGE_ICON_NONE)
                        .setContentTitle(URLDecoder.decode(messageTitle, "UTF-8"))
                        .setContentText(URLDecoder.decode(messageBody, "UTF-8"))
                        .setAutoCancel(true)
                        .setSound(uri)
                        .setPriority(Notification.PRIORITY_HIGH)
                        .setContentIntent(intent2);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            notificationManager.notify(notifyID, builder.build());
        }
    }

위에 if문 같은경우는 오레오버전(8.0) 이상의 버전입니다.

 

아래는 기존에 저희가 쓰던 8.0 아래의 버전에서 사용하는 푸시입니다.

 

저는 알림음도 따로 설정을 해주었는데요.

 

Uri uri = Uri.parse("android.resource://패키지네임/" + R.raw.mp3파일명);

이런식으로 적어주시면 raw안에 있는 mp3파일을 알림음으로 재생할수있습니다.

 

PendingIntent같은 경우는 해당 푸시를 클릭했을때 메인클래스로 바로 이동하겠다는 intent입니다.

 

채널관련된 변수는

 

String Noti_ID = "Order_channel";
CharSequence name = "Order_push";
String description = "Order";

이런식으로 정의해줬는데요 이름은 여러분들이 마음껏 지어보도록 하세요.

 

여기서 주의해야할 사항은 지금 Order_channel, Order_push, Order 라는 채널에는

 

예를들어 test.mp3 라는 파일로 알림음을 재생한다고 가정하면,

 

추후에 알림을을 변경한다고해도 바뀌지않습니다.

 

앱을 삭제해야지만 바뀔것입니다.

 

그러기위해선 다른이름의 채널을 만들어주면 생성이 가능합니다.

 

오레오버전부터는 그 전버전과는 달리 setSound 인자값으로 오디오메니저가 하나 더 추가됩니다.

 

이렇게 오레오버전(8.0) 이상의 버전부터 울리는 푸시의 방법에 대해서 알아봤습니다.

728x90
반응형

댓글