총 게시물 934건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

FCM알람 관련 질문드립니다..^^

글쓴이 : todaynogada 날짜 : 2018-01-16 (화) 03:09 조회 : 718
글주소 : http://www.androidside.com/B49_best/12868
 
  한국시뮬레이션기술
LS DYNA, SIMPACK, Simuform, FCM, VPG
www.kostech.co.kr
  플래시사이트 컴스쿨닷컴
플래시사이트 1년 동영상 전과목 89,000원,365일 피씨와 모바일 수강가능.
www.컴스쿨.com
  SBS아카데미컴퓨터학원전해림
취업 포트폴리오 전문학원, 1:1취업상담,취준생&직장인 국비지원,수강료&위치조회.
www.sbs-artcom.net
신청하기


안녕하세요. 푸시관련해서 로직자체가 생각이 안나서 질문올리게 되었습니다.

FCM으로 푸시메시지 만들었습니다.

서버 게시판에서 글작성시 앱으로 메시지가 날라옵니다.

sendNotification 메소드에서 받은 내용


 PendingIntent pendingIntent = PendingIntent.getActivity(this, (int)id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

.setContentText(messageBody)

messageBody 이부분을 메인액티비티로 데이터전달을 하였습니다.(푸시글내용)


Intent intent = new Intent(this, MainActivity.class);

        intent.putExtra("noti", messageBody);


메인액티비티에서는 잘받아지긴합니다.


 Intent intent = getIntent();

      

  


        String[] str = intent.getStringArrayExtra("noti");


        if(str != null) {

            Log.d("test12345", str[0]);


            ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, str);

            ListView listview = (ListView) findViewById(R.id.lv);

            listview.setAdapter(adapter);

}


배열로 메시지 보낸이유는 리스트뷰가 배열만 들어가기땜에 그렇게 해주었습니다.

잘되긴하는데요 액티비티를 계속 생성해서 메시지 1개씩받아와집니다.

여기서 문제점은 메시지 받을때마다 PendingIntent 로 인해 계속 새 액티비티로 띠어지는것이 문제인거죠.

(이부분은 인지하고 있으나 어떻게 바꿔야할지 생각이 안나네요).

하나 액티비티가 생성되고 그이후로 리스트뷰로 하나씩 생성되는걸 원하는데 

이런경우 어떻게 해야할지 방법이 떠오르지 않습니다.

조금이나마 팁이라도 알려주시면 거기에 대해서 다시한번 생각좀해보겠습니다.

접근방법이 틀린걸까요?...



결론 - 액티비티생성없이 메인액티비티에서 메시지 수신시 데이터전달만받고 리스트뷰 개행 생성되는방법을 알고싶습니다. 



좋은하루보내세요!




todaynogada 님의 개발 Q&A FAQ 최신글 [더보기]


질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

OSKiller 2018-01-16 (화) 08:12
MainActivity를 싱글인스턴스로 호출 하면 되지 않을까요?
댓글주소 추천 0 반대 0
     
     
todaynogada 2018-01-16 (화) 23:25
[@OSKiller]감사합니다..한번해보겠습니다
댓글주소 추천 0 반대 0
adbb 2018-01-17 (수) 15:05
해결하셨나요? 저 같은 경우 서비스 클래스에 콜백 달아서 처리했었습니다.
댓글주소 추천 0 반대 0
     
     
todaynogada 2018-01-18 (목) 04:37
[@adbb]아니요..해결못했습니다..메인에서 값받는건 해결했습니다..브로드캐스트 온리스트 호출해서요..
그러나 메시지클릭시마다 계속 페인팅이 리셋됩니다..


    public void onMessageReceived(RemoteMessage remoteMessage) {
Intent intent = new Intent("com.google.firebase.MESSAGING_EVENT");
        intent.putExtra("body", remoteMessage.getNotification().getBody());
        intent.putExtra("title", remoteMessage.getData().get("title"));
        intent.putExtra("message", this.messageBody2);
        sendBroadcast(intent);
}

이부분이 메시지오면 호출되는메서드구요..


public void sendNotification(String messageBody) {
       Intent intent = new Intent(this, MainActivity.class);
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0, intent, PendingIntent.FLAG_ONE_SHOT);
       String channelId = getString(R.string.gcm_defaultSenderId);
       Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
       NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(this, channelId)
                        .setSmallIcon(R.drawable.ic_launcher_background)
                        .setContentTitle("FCM Message")
                        .setContentText(messageBody)
                        .setAutoCancel(true)
                        .setSound(defaultSoundUri)
                       .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(String.valueOf(Context.NOTIFICATION_SERVICE));
        notificationManager.notify (0, notificationBuilder.build());

 }
이 부분이 메시지온걸 클릭하면 이동하는액티비티입니다..

메인액티비티에서 
BroadcastReceiver receiver = new BroadcastReceiver() 구현해서 onReceive 오버라이드해서 
값 받아오는것 까진했는데요

음..여기서 메시지클릭해도 새 액티비티가 안뜨고 기존액티비티에 1줄씩 추가하는식으로 하고싶은데 잘안되네요.
(값받은걸 메인에서는 리스트뷰로 한줄씩 추가됩니다)
그러나.. 이게 액티비티가 계속 새로되버려서 여기서 어떻게 해야할지 ..
메시지가 있다면 팬딩인텐트없이 기존액티비티에 값만 전달할수는 없나요? 

 
댓글주소 추천 0 반대 0
          
          
todaynogada 2018-01-18 (목) 05:42
[@todaynogada]곰곰히 생각해봤는데.. 리시버로 호출을 해도 액티비티가 새로떠야하기때문에.. 이방법으론 소용없을것같은데..
주기적으로 데이터를 받으려면 핸들러를 써야 맞는거 아닌가요?
(메시지를받으면 메인액티비티에 데이터를보내서 하나의 액티비티에 리스트뷰로 주기적으로 데이터를 쌓는것)

댓글주소 추천 0 반대 0
               
               
adbb 2018-01-18 (목) 09:45
[@todaynogada] 음... 궁금한 부분이 있는대요,
"알림 메시지를 클릭했을 때 새 액티비티가 안 뜨고 기존 액티비티 갱신"
이게 반드시 필요한 건지 알고 싶어요.

만약 이 목적이 단순히 "메시지 신호가 왔을 때 갱신" 이 목적이라면 메시지 클릭과는 별개의 로직으로
처리해서 바로 갱신되게 할 수 있습니다.
(만드시는 분 마다 의도가 다르겠지만, 일단 메시지(상태바)로 들어온 걸 클릭하는 건 앱 내에서 상호작용 하려는 목적 보다, 외부에서 앱으로 진입하기 위한 수단으로 이용하는 경우가 많아서 내부 상호작용 방식은 좀 더 구현이 필요할 것으로 보입니다.)

일단 메시지 클릭 후 갱신이 반드시 필요한 건지 부터 알 수 있으면 좋겠습니다.
댓글주소 추천 0 반대 0
                    
                    
todaynogada 2018-01-18 (목) 10:08
[@adbb]메시지를 새 액티비티로해서 하고싶은데 누르면 계속 새액티비티가떠요 메시지가 액티비티 별로 따로 놀아서요..
메시지1이 오면 액티비티뜨고 메시지2가 오면 액티비티가  다시뜨고
메시지3이오면 액티비티가다시 떠서 데이터가 각각 따로놀게됩니다.
저는 액티비티하나로 메시지1,2,3이 다들어가길원하는데 이게 잘 이해가 안됩니다..
힌트좀주십시요 꾸벅,,
핸들러를써야하는거 아닌지...
리시버 호출해봤자 메인액티비티로 가야 메시지데이터가 호출이되버려서요
댓글주소 추천 0 반대 0
OSKiller 2018-01-18 (목) 07:51
메인액티비티를 싱글인스턴스로 호출 하면 
메인액티비티가 없을때는 생성 되고
있을 경우에는 onNewIntent()(이름이 가물가물...)가 호출 됩니다
무엇을 고민 하시는지 모르겟네요
댓글주소 추천 0 반대 0
     
     
todaynogada 2018-01-18 (목) 10:14
[@OSKiller]메시지가 연속으로 3개가온다고 가정하면
메시지가 1개클릭할떄마다 액티비티가 새로 올라가서 각각 따로 데이터가 분류되는데요
여기서 메시지1이들어오면 메인액티비티가 띄어지고 그다음 메시지 2,3 데이터도 메인액티비티(리셋)에 띄어지는데 
액티비티 새로 생성안되고 메시지 2,3도 메시지1이 들어갈떄 액티비티로 들어갔으면 좋겠는데요..
메인액티비티안에 메시지1,2,3이 다 들어가게하는 방법은 없을까요?
이게 개념이 잘안잡혀서그런지 하나액티비티로 안들어가지네요..이 런경우에는 어떤식으로 로직을 해야하는지 힌트만좀 부탁드립니다.
댓글주소 추천 0 반대 0
OSKiller 2018-01-18 (목) 10:33
1. 푸시가 왔을때 해당 정보를 저장한다
2. 싱글인스턴스로 호출 하도록 팬딩인텐트를 만들어 noti에 뿌려준다
3. 액티비티가 호출 되면 저장된 푸시 정보들을 긁어 리스트에 포함 시켜 화면을 뿌려준다.
4. notification들을 모두 제거 한다
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기