Android

(스크랩) Android Firebase FCM Launch Activity 지정하기. (원하는 Activity 실행하기)

Machine_웅 2018. 6. 29. 23:48
728x90
반응형

 

Android/Tip&Tech

Android Firebase FCM Launch Activity 지정하기. (원하는 Activity 실행하기)

하나아빠. 2017.01.30 20:00
안녕하세요 하나아빠 입니다.

Firebase 에서 제공해주는 FCM을 이용하시다 보면 백그라운드에서 알림바에 Notification이 자동으로 등록된 경우

자신이 원하는 Activity가 실행되는것이 아니라 기본 MainActivity가 실행되는것이 대부분일 텐데요.

(FCM은 기본적으로 <action android:name="android.intent.action.MAIN"/> 인텍트 액션이 추가된 Activity를 실행 합니다.)


이를 해결하기 위한 방법으로는 FCM메시지를 전송할 때 click_action 값을 정해주는 것 입니다.


우선 Android Firebase Chat(6) : FCM - 클라이언트에서 직접 전송하기 에서 진행했던 FCM을 전송하는 부분에서 부터 시작하겠습니다.


아래의 FCM을 전송하는 소스코드에서 click_action값을 추가해 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
private void sendPostToFCM(final ChatData chatData, final String message) {
    mFirebaseDatabase.getReference("users")
            .child(chatData.userEmail.substring(0, chatData.userEmail.indexOf('@')))
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    final UserData userData = dataSnapshot.getValue(UserData.class);
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                // FMC 메시지 생성 start
                                JSONObject root = new JSONObject();
                                JSONObject notification = new JSONObject();
                                notification.put("body", message);
                                notification.put("title", getString(R.string.app_name));
                                root.put("notification", notification);
                                root.put("to", userData.fcmToken);
                                root.put("click_action""OPEN_ACTIVITY"); // click_action 추가!
                                // FMC 메시지 생성 end
 
                                URL Url = new URL(FCM_MESSAGE_URL);
                                HttpURLConnection conn = (HttpURLConnection) Url.openConnection();
                                conn.setRequestMethod("POST");
                                conn.setDoOutput(true);
                                conn.setDoInput(true);
                                conn.addRequestProperty("Authorization""key=" + SERVER_KEY);
                                conn.setRequestProperty("Accept""application/json");
                                conn.setRequestProperty("Content-type""application/json");
                                OutputStream os = conn.getOutputStream();
                                os.write(root.toString().getBytes("utf-8"));
                                os.flush();
                                conn.getResponseCode();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }).start();
                }
 
                @Override
                public void onCancelled(DatabaseError databaseError) {
 
                }
            });
}
cs


저는 click_action의 값으로 "OPEN_ACTIVITY" 라고 설정했습니다.


그리고 나서 AndroidManifest.xml 파일을 열고 실행하고자 하는 Activity에 Intent-filter 값을 추가 합니다.


1
2
3
4
5
6
7
<activity
    android:name=".CustomActivity">
    <intent-filter>
        <action android:name="OPEN_ACTIVITY"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>
cs



이렇게 설정해 주시면 원하는 Activity를 실행하실 수 있습니다.


+-- 추가로 Notification의 icon을 변경하고 싶으시면 아래처럼 한줄 추가 하시면 됩니다.

1
2
3
4
5
6
JSONObject root = new JSONObject();
JSONObject notification = new JSONObject();
notification.put("body", message);
notification.put("title", title);
notification.put("icon""ic_message"); // <-- 추가  (R.drawable_ic_message)
notification.put("click_action""OPEN_ACTIVITY");
cs

 

 

 

+ 추가

백그라운드일때 실행할 앱을  node js에서 지정하는 방법

 

  notification: {
         title: title,
   //  노티피케이션 상단에 나타날 이름  ( 타이틀 다음에  테스트로 );
         body: "새로운 알림 왔습니다.",
   sound: "default",
         //click_action: "FCM_PLUGIN_ACTIVITY",
   click_action: "OPEN_ACTIVITY",

   icon: "help"

     },

위를 참고해서 지정해 주시면 됩니다!

 

출처 : http://anhana.tistory.com/10

728x90
반응형