Android/Tip&Tech
Android Firebase FCM Launch Activity 지정하기. (원하는 Activity 실행하기)
하나아빠. 2017.01.30 20:00Firebase 에서 제공해주는 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"
},
위를 참고해서 지정해 주시면 됩니다!
'Android' 카테고리의 다른 글
navigationview 클릭이벤트 (0) | 2018.07.08 |
---|---|
Navigation View (0) | 2018.07.07 |
Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (0) | 2018.06.26 |
안드로이드 노티피 케이션 해드업 알림 (0) | 2018.06.23 |
안드로이드 진동 Vibrate (0) | 2018.06.21 |