본문 바로가기
Android

안드로이드 Notification 클릭 시 원하는 곳으로 이동 중복실행 방지 및 포그라운드 중 바로이동 안드로이드12 이슈대응까지

by 일용직 코딩노동자 2021. 12. 8.
728x90
반응형

푸시알림을 클릭 했을 때 원하는 url또는 화면으로 이동하는 기능은 다른 앱을 사용 하시면서 많이 보셨을겁니다.

우선 푸시알림 사용 방법은

https://onedaycodeing.tistory.com/78

 

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

기존 푸시알람과는 달리 안드로이드 8.0이상부터는 채널이란 개념이 추가됩니다. 채널이란건 한번 그 채널로 푸시를 띄웠다면 앱을 지우지 않는 이상 그 채널이 삭제되진 않습니다. private void Suc

onedaycodeing.tistory.com

해당 게시글을 참조해주시고 해당 게시글은 FCM하시는 분들에게 유용합니다!!

 

보통 푸시 클릭시 앱 실행은

PendingIntent

해당 인텐트로 사용했는데요.

 

//푸시를 클릭했을때 이동//
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("key",value);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , intent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
//푸시를 클릭했을때 이동//

이런식으로 셋팅해주시면 putExtra에서 값을 넘겨주기때문에 메인에서 받아서 사용하시면 됩니다.

 

그리고 메니페스트에 singleInstance로 런처모드를 바꿔줍니다.

이렇게 하시면 앱이 실행중에 푸시알림을 터치해도 중복 실행을 막아줍니다.

android:launchMode="singleInstance"

 

String result = "";
try{
  Intent psuhIntent = getIntent();
  result = psuhIntent.getExtras().get("key").toString();
}
catch (Exception e){
  result = "";
}

 

이렇게 메인에서 받으시면 값이 없을때는 catch를 타서 값을 공백으로 넣어줘서 널에러를 방지합니다.

 

이제 해당 try catch는 앱이 실행되지 않은 상태에서 동작하는 코드입니다.

 

@Override
protected void onNewIntent(Intent intent) {
    try {
        String url = URLDecoder.decode(intent.getExtras().getString("pushUrl"),"UTF-8");
        if(url.length() > 5){
            mWebView.loadUrl(url);
        }
    }
    catch (Exception e) { }
    super.onNewIntent(intent);
}

이렇게 onNewIntent를 오버라이드 해주시면 앱 동작중에 푸시를 클릭 했을 시 바로 호출됩니다.

그리고 원하는 부분으로 바로 이동 구현이 가능합니다.

 

 

여기서 중요한 포인트는

 

안드로이드 12 대응을 하기위해

PendingIntent.FLAG_MUTABLE

해당 플래그를 사용했는데요 이렇게만 사용하시면

 

메인에서 값을 추출할때 계속 같은값만 추출됩니다(처음에 추출한 값)

 

그래서 

 

PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT

이렇게 같이 써주면 값도 신규로 업데이트되고 안드로이드12 타겟팅도 무사히 가능합니다.

 

ㄱ ㅏ   ㄱ  푸시

ㅗ o    ㅗ  푸시 :D

 

728x90
반응형

댓글