์ฝ๋ฅด๋๋ฐ 6.3.1
Phonegap Firebase ํ๋ฌ๊ทธ์ธ 0.1.12
์ฅ์น: Android 6.0.1์ด ์ค์น๋ LG G5
์ด๊ฒ์ ๋ด๊ฐ ์ฌ์ฉํ๋ ์ฝ๋์
๋๋ค.
`var ์ฑ = {
// ์ ํ๋ฆฌ์ผ์ด์
์์ฑ์
์ด๊ธฐํ: ํจ์() {
this.bindEvents();
},
// ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฐ์ธ๋ฉ
//
// ์์ ์ ํ์ํ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ด๋ฒคํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// '๋ก๋', '์ฅ์น ์ค๋น', '์คํ๋ผ์ธ' ๋ฐ '์จ๋ผ์ธ'.
bindEvents: ํจ์() {
document.addEventListener('์ฅ์น ์ค๋น', this.onDeviceReady, ๊ฑฐ์ง);
},
// deviceready ์ด๋ฒคํธ ํธ๋ค๋ฌ
//
// 'this'์ ๋ฒ์๋ ์ด๋ฒคํธ์
๋๋ค. 'receivedEvent'๋ฅผ ํธ์ถํ๋ ค๋ฉด
// ํจ์, ์ฐ๋ฆฌ๋ ๋ช
์์ ์ผ๋ก 'app.receivedEvent(...);'๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
onDeviceReady: ํจ์() {
console.log("Estamos en onDeviceReady");
if (navigator.connection.type == Connection.NONE) {
navigator.notification.alert('์ธํฐ๋ท ์ฐ๊ฒฐ์ด ํ์ํฉ๋๋ค');
} ๋ ๋ค๋ฅธ {
window.FirebasePlugin.onNotificationOpen(ํจ์(์๋ฆผ) {
console.log(์๋ฆผ);
navigator.notification.alert("๋ ์๋น๋");
}, ํจ์(์ค๋ฅ) {
console.log(์ค๋ฅ);
});
}
},
};
์ฑ ์ด๊ธฐํ();`
๋๋ ๋ชจ๋ ์ํฉ์์ ์์คํ ์ ํธ๋ ์ด์์ ์๋ฆผ์ ๋ฐ์ต๋๋ค: ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ฑ, ํฌ๊ทธ๋ผ์ด๋ ๋ฐ ๋ซํ ์ฑ ๊ทธ๋ฆฌ๊ณ ์๋ฆผ์ ํด๋ฆญํ๋ฉด ์ธ ๊ฐ์ง ๊ฒฝ์ฐ์ ์ฑ์ด ์ด๋ ค ์์ง๋ง ์ฝ๋ฐฑ์ด ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค.
์ฝ๋์ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋์ผํ ๋ฌธ์ , Android ์๋ฆผ์ด ๋์ฐฉํ์ง๋ง ์ฑ ๋ด๋ถ์์๋ ์ฝ๋ฐฑ์ด ํธ์ถ๋์ง ์์ต๋๋ค.
v. 0.1.12
@voidbrain @Kibukita ๋ฆฌํฌ์งํ ๋ฆฌ ์์ ์ต์ ๋ฒ์ ์ ํ ์คํธํ์ญ์์ค. ๊ณต๊ฐ ์๋ฆผ์ ๊ฐ์ ํด ๋ณด์์ต๋๋ค. ๊ฐ์ฌ ํด์.
@BugsBunnyBR ๋ฐฉ๊ธ ์ต์ ๋ฒ์ ์
@superheroben , ํ๋ฌ๊ทธ์ธ ์ฝ๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ํ์ ์ ์ฅ์์ ์ ๊ณตํ ์ ์์ต๋๊น? ์๋ฆผ์ ์ด๋ป๊ฒ ๋ณด๋ด๊ณ ์์ต๋๊น? ์ฃผ์ ๋ฉ์์ง๋ก ํ ์คํธํ์ต๋๋ค.
๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
getInstanceId() ์ฝ๋ฐฑ์ด ํธ์ถ๋๊ณ ์๋ฆผ์ด ๋์ฐฉํ์ง๋ง onNotificationOpen()์ด ํธ์ถ๋์ง ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์ฝ๋:
if (window.FirebasePlugin)
{
window.FirebasePlugin.getInstanceId(
function(token) {
thiss.saveToken(token);
},
function(error) {
console.log(error);
}
);
window.FirebasePlugin.onNotificationOpen(
function(notification) {
alert("Yeah!!!");
},
function(error) {
alert("Error!");
console.error(error);
}
);
window.FirebasePlugin.grantPermission();
}
๋ด ์๋ฆผ ๋ฐ์ดํฐ ๊ตฌ์กฐ:
(
[to] => (device token)
[notification] => Array
(
[title] => Title
[text] => Test message
[sound] => default
[vibrate] => 1
[badge] => 2
)
)
๋ด ์๋ฒ ์ธก ์ฝ๋(PHP):
$jsonData = json_encode($data);
$ch = curl_init("https://fcm.googleapis.com/fcm/send");
$header = array(
'Content-Type: application/json',
"Authorization: key=".MY_GCM_API_KEY
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, true);
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
$result = curl_exec($ch);
curl_close($ch);
Cordova Android 5.2.2์์ ์์ ํฉ๋๋ค. ํ ์คํธ์ ์ฌ์ฉ๋ ๊ธฐ๊ธฐ๋ Android 4.4.2๋ฅผ ์คํํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ๋ฒ์ 0.1.12.
@arivanbastos , github ์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌ์ผ
github์์ ์ค์นํ๋ฉด ๋ฌธ์ ๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํด๊ฒฐ๋์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
cordova plugin remove cordova-plugin-firebase
cordova plugin add https://github.com/arnesson/cordova-plugin-firebase/
์ด์ ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์์ ๋ onNotificationOpen() ์ฝ๋ฐฑ์ด ํธ์ถ๋ฉ๋๋ค.
์ฑ์ด ๋ฌธ์๊ฐ ์๋ ํฌ๊ทธ๋ผ์ด๋์ ์์ ๋ ์๋ฆผ์ด ๋์ฐฉํ๊ณ onNotificationOpen()์ด ํธ์ถ๋์ง ์์ต๋๋ค.
์ฑ์ด ํฌ๊ทธ๋ผ์ด๋์ ์์:
์ฌ์ฉ์๋ ์ฅ์น ์์ฒด์ ๋ํ ์๋ฆผ ์์ด JavaScript ์ฝ๋ฐฑ์์ ์๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์์ ํฉ๋๋ค(์ด๋ ํธ์ ์๋ฆผ์ ์ผ๋ฐ์ ์ธ ๋์์ด๋ฉฐ ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๋ ๊ฒ์ ๊ฐ๋ฐ์์๊ฒ ๋ฌ๋ ค ์์)
๋ฐ์ดํฐ ๋ณธ๋ฌธ ์์ด "์๋ฆผ" ์ ํ์ ํธ์๋ฅผ ๋ณด๋ด๋ ๊ฒฝ์ฐ ์ฑ์ด ํฌ๊ทธ๋ผ์ด๋์ ์์ ๋ ์๋ฆผ์ด ํ์๋์ง ์์์ผ ํฉ๋๋ค.
์ฃ์กํฉ๋๋ค. ์ดํดํ์ง ๋ชปํ์ต๋๋ค. ๋ด ์๋ฆผ ๋ฐ์ดํฐ์ "๋ฐ์ดํฐ" ์น์ ์ ์ถ๊ฐํด์ผ ํฉ๋๊น?
(
[to] => (device token)
[notification] => Array
(
[title] => Title
[text] => Test message
)
[data] => Array
(
[test] => 1
)
)
๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์์ต๋๋ค.
"์๋ฆผ" ์น์ ์ ์ด๋ฆ์ "๋ฐ์ดํฐ"๋ก ๋ฐ๊พธ๋ฉด ์๋ฆผ์ด ๋์ฐฉํ ๋ ์ฑ์ด ์ถฉ๋("์ฑ์ด ์ค์ง๋จ")๋ฉ๋๋ค.
(
[to] => (device token)
[data] => Array
(
[title] => Title
[text] => Test message
)
)
https://firebase.google.com/docs/cloud-messaging/android/receive
์ฌ๊ธฐ ์์ฃผ ์ ์ค๋ช
๋์ด ์์ต๋๋ค.
์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์๋ ๊ฒฝ์ฐ ์๋ฆผ์ด ์์คํ
ํธ๋ ์ด๋ก ์ด๋ํ๊ณ ์ฑ์ด ํฌ๊ทธ๋ผ์ด๋์ ์๋ ๊ฒฝ์ฐ onMessageReceived()๋ก ์ด๋ํฉ๋๋ค.
๋ฉ์์ง์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ํญ์ onMessageReceived()๋ก ์ ๋ฌ๋ฉ๋๋ค.
onMessageReceived() ๊ตฌํ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ํด์ํ๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
NotificationManager.notify(id, notification)๋ ์ํ ํ์์ค์ ํ์๋ ์๋ฆผ์ ๊ฒ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋์๊ฒ ์ด๊ฒ์ FCM์์ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋๋ง๋ค ์ํ ํ์์ค์ ์๋ฆผ์ด ํ์๋ ๊ฒ์ผ๋ก ์์๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฑ์ด ํฌ๊ทธ๋ผ์ด๋์ ์๋์ง ํ์ธ์ด ํ์๋์ง ์๊ณ ์ฝ๋ฐฑ์ ๋ํ ํธ์ถ์ด ํ์๋์ง ์์ต๋๋ค. ๋๋ Android ๊ฐ๋ฐ์๊ฐ ์๋๋ฏ๋ก ์๋ง๋ ํ๋ฆด ์ ์์ง๋ง ์ค๋ช
๋ ๋์์ ๊ทธ๊ฒ์ ์ ํฉํฉ๋๋ค.
์๊ฒ ์ต๋๋ค. ์ฝ๋ฐฑ์ ํธ์ถํ๋ ์ฝ๋๋ฅผ ์ฐพ์์ต๋๋ค.
BugsBunnyBR์ ๋ง์ง๋ง ์ปค๋ฐ์์ arivanbastos๊ฐ github ์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํฌ ๋ ์คํ๋๋ ์ฝ๋ฐฑ์ ๊ฐ์ ธ์ด์ ์ค๋ช
ํ๋ OnNotificationOpenReceiver๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ์ ํ ์๋ฆผ์ ํ ์คํธ ๋๋ ์ ๋ชฉ(์๋ฆผ ๋๋ ๋ฐ์ดํฐ)์ด ์๋ ๊ฒฝ์ฐ์๋ง (OnNotificationOpenReceiver ๋ฐ NotificationManager๋ก) ์ ์ก๋ฉ๋๋ค. ์ฆ, StatusBar์ ํ์๋๋ NotificationManager์ ์๋ฆผ์ ๋ณด๋ด์ง ์๊ณ ์ฑ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
@arivanbastos
๋ด๊ฐ ๋น์ ์๊ฒ ๋ญ๊ฐ ์๋ชป ๋งํ๋ค. ๋ฏธ์ํฉ๋๋ค.
์ด repo ๋ฒ์ ์ ๊ฐ๋ฆฌ์ผ ๋ณด์
จ์ต๋๊น?
@packowitz ๋ฐ @robertarnesson . ์ข์, ๋ด ๊ตฌํ์ ํญ์* ์๋ฆผ์ ํ์ํ๋ ค๊ณ ํฉ๋๋ค. ๋๋ Firebase ์๋ ํ์ ์๋ฆผ ๋๋ onMessageReceived
๋ด๋ถ์ ๋น๋๊ฐ ํ์๋ฉ๋๋ค.
onNotificationOpen
์ฝ๋ฐฑ์ onMessageReceived
๊ฐ ํธ์ถ๋๊ฑฐ๋ ์๋ฆผ์ ๋ฐ์ดํฐ ๋ฐ ์๋ฆผ ๋ณธ๋ฌธ์ด ๋์์ ์์ ๋ ํธ์ถ๋ฉ๋๋ค. onNotificationOpen
๋ฅผ ์๊ฐํ ํ๋ณด ์์ ๋๋ ์๋ฆผ ์ ํ์ ํธ์ ์๋ฆผ์ด ์ฝ๋ฐฑ์ ์คํํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์ค๋ช
ํ๋ ค๊ณ ํ์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ด ์ฝ๋ฐฑ์ ๊ฐ์งํ๊ณ ์คํํ ์ ์๋๋ก ํญ์ ๋ฐ์ดํฐ ๋ณธ๋ฌธ๊ณผ ์๋ฆผ ๋ณธ๋ฌธ์ ํฌํจํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋ถ๋ถ์ Android ์ฑ ๊ฐ๋ฐ์๋ ์ฑ์ด ํฌ๊ทธ๋ผ์ด๋์ ์๋ ๊ฒฝ์ฐ์๋ ์์คํ
ํธ๋ ์ด์ ์๋ฆผ์ด ํ์๋๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ฑํ
์ฑ๊ณผ ๊ฐ์ด ์ด๋ฌํ ๋์์ด ์ข์ง ์์ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
Android ์๋ฆผ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋ ์ฑํ
์ฑ ์๊ตฌ ์ฌํญ์ด๋ Firebase ์ค์ ์ฌ๋ถ์ ๋ํด์๋ ์ ๊ฒฝ ์ฐ์ง ์์์ต๋๋ค.
ํ ์ ์๋ ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ์ฑ์ด ์ด๋ ธ์ ๋ ์ค์ ๋ ํ๋๊ทธ๋ฅผ ๊ฐ๋ฐํ์ฌ "์ด์ด, ์ฑ์ด ์ด๋ ค ์์ ๋๋ ์๋ฆผ์ ๋ณด์ฌ์คฌ์ผ๋ฉด ํด"๋ผ๊ณ ๋งํ์ฌ ๋์์ ์ ์ดํ๋ โโ๋ฐ ์ฌ์ฉํฉ๋๋ค. ์ฑ์ ์ด ๋ ํญ์ ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ ๊ฒฝ์ฐ ์ ์ฅ์์ ์ ์ง๋ ํ์๊ฐ ์์ต๋๋ค.
2) ์ด ์ค์ ์ฃผ์์ ๋ฌ๊ณ ์ฑ์ด ํฌ๊ทธ๋ผ์ด๋์ ์์ ๋ ์๋ฆผ์ ๋นํ์ฑํํฉ๋๋ค.
_ํญ์_ -> ํ๋ฌ๊ทธ์ธ์ด ์๋ฆผ ๋ณธ๋ฌธ์์ "ํ ์คํธ" ๋๋ "์ ๋ชฉ"์ ์ฐพ๋ ๊ฒฝ์ฐ.
@BugsBunnyBR ๋๋ ํ๋์ ์ ํํ ํ๋๊ทธ๊ฐ ์๋ค๋ ์์ด๋์ด๋ฅผ ์ข์ํฉ๋๋ค.
JS ์ฝ๋ฐฑ์ ๋ค์ ํธ์ถํ๋ OnNotificationOpenReceiver์์ NotificationManager๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค. ๋ด ๊ถ์ฅ ์ฌํญ์ ๋ฉ์์ง์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ํ์ธ์ ๋์
ํ๊ณ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ฐ์ดํฐ์ ํจ๊ป ์ฝ๋ฐฑ์ ํธ์ถํ๋ ๊ฒ์
๋๋ค.
์๋ฆผ์ ์ํด์๋ ๊น๋ฐ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
@BugsBunnyBR ๋ฐฉ๊ธ github
๊ทธ๋ฌ๋ ์ฝ๋ฐฑ์ ์ด์ ์๋ํฉ๋๋ค ;)
์ฌ๊ธฐ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ฒ์ 0.1.13์ผ๋ก ์ธํด ์ฑ์ด ํฌ๊ทธ๋ผ์ด๋์ ์์ ๋ ์ฑ์ด ๋ค์ ์์๋ฉ๋๋ค. ๋ฒ์ 0.1.12๋ ์ ์๋ํฉ๋๋ค.
์๋ฆผ์ repo ๋ฒ์ ์์ ํ๋ช
ํ๊ฒ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์๋ฆผ์ด ์ด๋ฆฌ๊ธฐ ์ ์ onNotificationOpen
๊ฐ ํธ์ถ๋๋ฉด ๋ฌด์๋๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค.
https://github.com/arnesson/cordova-plugin-firebase/blob/master/src/android/FirebasePlugin.java#L123
registerOnNotificationOpen
์์ notificationBundle
๋๊ธฐ ์ค์ธ ๊ฒฝ์ฐ์๋ง ์ฝ๋ฐฑ์ ๋ฑ๋กํฉ๋๋ค.
๋ํ ์ด๋ฏธ ์ด๋ ค ์๋ ๊ฒฝ์ฐ ์ฑ์ด ๋ค์ ๋ก๋๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ด์ ๋ OnNotificationOpenReceiver
์ ๋ช
์์ ์ผ๋ก ๋ช
์๋์ด ์์ต๋๋ค.
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
onNotificationOpen
์ฝ๋ฐฑ์ด ๋ฑ๋ก๋ ๋ notificationBundle
๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ณณ์์ ํด๋ผ์ด์ธํธ๋ฅผ ๊ฐ์ ๋ก ๋ค์ ๋ก๋ํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฆผ์ ๋ฐ๋๋ก ํฉ๋๋ค.
์ ์ฒด onNotificationOpen
์ฒ๋ฆฌ๋ฅผ ๋ค์ ์์ฑํ์ผ๋ฉฐ ์์ํ ๋๋ก ๊ฑฐ์ ์๋ํ๋๋ก ํ์ต๋๋ค.
onNotificationOpen
๊ฐ ํธ์ถ๋ฉ๋๋ค(๋ค์ ๋ก๋ํ์ง ์์).onNotificationOpen
๊ฐ ํ์ฌ ํด๋ผ์ด์ธํธ์ ํจ๊ป ํธ์ถ๋ฉ๋๋ค(๋ค์ ๋ก๋ํ์ง ์์).๋จ์ ์ ์ผํ ๊ฒ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ(์์ง ์ดํด๋ณด์ง ์์ ๊ฒฝ์ฐ) ์ด ํ์ ์์ด ์ฆ์ ํด๋ผ์ด์ธํธ์ ์๋ฆผ์ ์ ๋ฌํ๋ ๊ฒ์ ๋๋ค.
์ ๋ ์ฝ๊ฐ์ Android ๋ฉ์ฒญํ ์ฌ๋์ด๋ฏ๋ก ๊ฐ์ ํ ์ ์๋ ๋ช ๊ฐ์ง ์ฌํญ์ด ์์ ์ ์์ง๋ง ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์์ ๊ณต์ ํ๋ ค๊ณ ํฉ๋๋ค.
OnNotificationOpe nReceiver:onReceive ์ด์ ๋จ์ํ ํธ์ถ
FirebasePlugin.onBroadcastReceive(context, intent);
FirebasePlugin
๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์ต๋๋ค.
private static CallbackContext callbackContext;
// ...
private void registerOnNotificationOpen(final CallbackContext callbackContext) {
FirebasePlugin.callbackContext = callbackContext;
}
// called when in foreground
public static void onBroadcastReceive(Context context, Intent intent) {
Log.d("FirebasePlugin", "onBroadcastReceive");
Bundle data = intent.getExtras();
FirebasePlugin.onNotificationOpen(data);
}
// called when in background
<strong i="32">@Override</strong>
public void onNewIntent(Intent intent) {
Log.d(TAG, "new intent " + intent);
super.onNewIntent(intent);
FirebasePlugin.onNotificationOpen(intent.getExtras());
}
public static void onNotificationOpen(Bundle bundle) {
if (FirebasePlugin.callbackContext == null ) {
Log.d("FirebasePlugin", "no callback context, onNotificationOpen ignored");
return;
}
if (callbackContext != null && bundle != null) {
JSONObject json = new JSONObject();
Set<String> keys = bundle.keySet();
for (String key : keys) {
try {
json.put(key, bundle.get(key));
} catch (JSONException e) {
Log.d("FirebasePlugin", "onNotificationOpen: json exception");
PluginResult result = new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage());
result.setKeepCallback(true);
callbackContext.sendPluginResult(result);
return;
}
}
Log.d("FirebasePlugin", "onNotificationOpen: send notification to javascript");
PluginResult result = new PluginResult(PluginResult.Status.OK, json);
result.setKeepCallback(true);
callbackContext.sendPluginResult(result);
}
}
ํ ... ํด๋ผ์ด์ธํธ๊ฐ ์คํ ์ค์ด ์๋ ๋(์ข ๋ฃ๋จ) ์๋ฆผ์ด (์ฅ์น๋ก) ์ ๋ฌ๋์ง ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
Firebase์์ ์ง์ ์ ๊ณตํ๋ ์๋ฆผ์ ์ด๊ณ ๋์์ ํ์ธํ์ญ์์ค. ์ฌ๋ฐ๋ฅธ ๋์์ด๋ผ๊ณ ์๊ฐ๋๋ ์ฃผ์ ํ๋์ ๋ค์ ์์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ง์ฐ ๋ผ์ ์ฃ์กํฉ๋๋ค. 0.1.13์ผ๋ก ์๋ํ์ง๋ง ์๋ฆผ์ด ์ด๋ฆฐ ํ ์ฑ์ด ๋ค์ ์์๋ฉ๋๋ค.
์ด๋ค ์์?
0.1.17์ ์ฌ์ฉํ๋ Android์์ onNotificationOpen ์ฝ๋ฐฑ ์ฑ๊ณต ๋๋ ์คํจ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ํ์ด๋ก๋๊ฐ ์๋ API ๋๋ GUI๋ฅผ ํตํ ์ ์ก์ ๋ชจ๋ ์๋ํ์ง ์์ต๋๋ค. ์ด๋ค ์ ์?
@Mehuge๊ฐ ๊ฒ์ํ ํด๋น ์ฝ๋๋ก pull ์์ฒญ์ ์์ฑํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? Android์์๋ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค.
์ ์์ ์ธ ์คํ ์๋๋ฅผ ํํฐ๋งํ๊ธฐ ์ํด FirebasePlugin์์ onNewIntent๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ด onNewIntent ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<strong i="6">@Override</strong>
public void onNewIntent(Intent intent) {
Log.d(TAG, "new intent " + intent);
super.onNewIntent(intent);
Bundle data = intent.getExtras();
if (data != null) {
String id = data.getString("id");
if (null != id) {
FirebasePlugin.handleNotificationBundle(data);
} else {
Log.d(TAG, "Not a notification intent, ignored");
}
}
}
๋๋ ๊ทธ๊ฒ์ ์์ ํ ๋ง์กฑํ์ง ์์ต๋๋ค. ๋ด ์๋ฒ ์ฝ๋๊ฐ ํญ์ ๋ณด๋ด๋ ์๋ ๋ฒ๋ค์์ id ์์ฑ์ ์ฐพ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ์๋ฆผ/๋ฉ์์ง๋ก ์๋๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ฒ๋ค์ GCM ๋๋ FBM์ด ์์ ์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ก๋ ์ผ๋ถ Google ์์ฑ์ด ์ถ๊ฐ๋์ง๋ง(ํธ๋ ์ด์์ ์๋ฆผ์ ์ฌ๋ ๊ฒฝ์ฐ) ๋ฉ์์ง ๋ฐ ์๋ฆผ์ด ํฌ๊ทธ๋ผ์ด๋์ ์์ ๋ ํด๋ผ์ด์ธํธ์ ์ง์ ์ ๋ฌ๋๋ ๊ฒฝ์ฐ ์คํ ์๋์์ ์๋ ค์ฃผ๋ ๋ฉ์์ง์ ๋ฐ์ดํฐ ์ธ์๋ ์๋ฌด ๊ฒ๋ ์์ต๋๋ค. ์ ์ด๋ ๋ด๊ฐ ๋ณผ ์ ์์๋ ์๋ฆผ ๋๋ฌธ์.
์ด๊ฒ์ ์ฒ๋ฆฌํ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ ์ ์์ต๋๋ค.
@Mehuge ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ํ์ผ๋ก ์์ ์ ๋ง๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น?
์, ์ฌ๊ธฐ https://gist.github.com/Mehuge/374ee24d9e18a6c7ccc171d3e521b7ad์ ๋๋ค.
๊ทธ๋ฌ๋ ๊ฑฐ๊ธฐ์๋ ์ฐ๋ฆฌ ์ฑ๊ณผ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋นํธ๊ฐ ์์ต๋๋ค. ์ฝ๋๋ฅผ ๋๋ฌด ๋ง์ด ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ํ๋ก์ ํธ๋ก ์ฎ๊ธฐ๊ฒ ๋์์ต๋๋ค. ๋์ด์ผ ์๊ฐํด๋ณด๋ฉด ํ๋ฌ๊ทธ์ธ์ ํฌํฌํ๊ณ ๊ทธ๋ฐ ์์ผ๋ก ์์ ํ์ด์ผ ํ์ง๋ง ์ด ์์ ์์ ์ ๋ ์ผ์ ์ด ๋๋ฌด ๋ฆ์ด์ ๋ชจ๋ ๊ฒ์ ์ง์ณค์ต๋๋ค. ๊ทธ๋์ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์๋ํ๋๋ก ํ์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋นํธ๋ ์๋นํ ๋ช ํํ๋ฏ๋ก ์ ์ธํ ์ ์์ ๋งํผ ์ฌ์์ผ ํฉ๋๋ค.
๋ํ ๋ด๊ฐ ํ๋ฌ๊ทธ์ธ์ ๊ตฌํํ ๋ฐฉ์์์ ํด๋ผ์ด์ธํธ๊ฐ ์ผ์ ์ค์ง๋ ์๊ฐ(๋๋ ๋ณด๋ค ๊ตฌ์ฒด์ ์ผ๋ก ์ผ์ ์ค์ง๋์ง ์์ ๊ฒฝ์ฐ)์ ์์์ผ ์๋ฆผ์ ์์ฑํ ์ง ๋ฉ์์ง๋ฅผ ์ง์ ์ ๋ฌํ ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ๊ทธ ๊ธฐ๋ฅ์ด ํ์ํ ์๋ ์๊ณ ํ์ํ์ง ์์ ์๋ ์์ง๋ง ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๊ฐ Android ์๋ฆผ์ ์์ฑํ๊ธฐ ์ํด ํฌ๊ทธ๋ผ์ด๋์ ์์ ๋ ์ ์ก๋๋ ์๋ฆผ์ ์ํ์ง ์๊ณ ๋์ ์ฒ๋ฆฌํ ํด๋ผ์ด์ธํธ์ ์ง์ ์ ๋ฌ๋๋ ๊ฒ์ ์ํ์ง ์์์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ ํด๋ผ์ด์ธํธ์ ์ผ์ ์ค์ง ์ํ๋ฅผ ์๋ฆฌ๋ ค๋ฉด ๊ธฐ๋ณธ ํ๋์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ธ์.
<strong i="9">@Override</strong>
protected void onResume() {
FirebasePlugin.setPaused(false);
super.onResume();
}
<strong i="10">@Override</strong>
protected void onPause() {
FirebasePlugin.setPaused(true);
super.onPause();
}
ํด๊ฒฐํด์ผ ํ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฆผ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์๋ ๋์ ๋์ฐฉํ์ง๋ง ์ฌ์ฉ์๊ฐ Android ์๋ฆผ์ ์ฌ๋ ๋์ ์ฑ์ ์ง์ ์คํํ๋ ๊ฒฝ์ฐ ์ด๋ค ์์ผ๋ก๋ ์ด๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ ์ฑ์ ๊ฒฝ์ฐ ์ด์ง ์์ ์๋ฆผ์ ์ง์ธ ์ ์์ต๋๋ค. ๊ทํ์ ์ํฉ์ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๋๋ ์ต์ข ๊ฒฐ๊ณผ์ ์์ ํ ๋ง์กฑํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ถ๊ฐ๋ ์ถ๊ฐ ํค ์ค ์ผ๋ถ๋ ์คํ์ ์ด์๊ณ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์์์ต๋๋ค. ๋จ์ง ์ ๊ฑฐํ์ง ์์์ ๋ฟ์ ๋๋ค.
ํผ๋๋ฐฑ์ด๋ ์ ์๋ ๊ฐ์ ์ฌํญ ๋๋ ๊ฒฐํจ์ ์ง์ ํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ์ ๋ ํนํ ์ผ๋ฐ ์ถ์์์ GCM ํ์ด๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ ์๋๋ฅผ ๋ ์ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค. Google ์์ฑ์ ํน์ ์ํฉ์์๋ง ์ถ๊ฐ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๋ํ ๋ค์ํ ์ ํ์ ์๋ฆผ(is_push, is_notify, broadcast)์ ๊ฐ์งํ๋ ค๋ ์๋๊ฐ ์ค์ ๋ก ์๋ํ์ง ์์ต๋๋ค.
#108 ์ฐธ์กฐ
๋๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์์ฒญ์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
{
"registration_ids": [...tokens],
"notification" : {
"title": "Notf title",
"body": "Notification body"
},
"data": {
"click_action": "/call/dwEugLJ9PTVdcFb064CX"
}
}
๊ทธ๋ฌ๋ click_action์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๊ณ ์๋์ผ๋ก ๋ฆฌ๋๋ ์ ์ ์ํํด์ผ ํ์ต๋๋ค(์ ๋ react ์ฑ๊ณผ ํจ๊ป cordova๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค).
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ์ฒด
onNotificationOpen
์ฒ๋ฆฌ๋ฅผ ๋ค์ ์์ฑํ์ผ๋ฉฐ ์์ํ ๋๋ก ๊ฑฐ์ ์๋ํ๋๋ก ํ์ต๋๋ค.onNotificationOpen
๊ฐ ํธ์ถ๋ฉ๋๋ค(๋ค์ ๋ก๋ํ์ง ์์).onNotificationOpen
๊ฐ ํ์ฌ ํด๋ผ์ด์ธํธ์ ํจ๊ป ํธ์ถ๋ฉ๋๋ค(๋ค์ ๋ก๋ํ์ง ์์).๋จ์ ์ ์ผํ ๊ฒ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ(์์ง ์ดํด๋ณด์ง ์์ ๊ฒฝ์ฐ) ์ด ํ์ ์์ด ์ฆ์ ํด๋ผ์ด์ธํธ์ ์๋ฆผ์ ์ ๋ฌํ๋ ๊ฒ์ ๋๋ค.
์ ๋ ์ฝ๊ฐ์ Android ๋ฉ์ฒญํ ์ฌ๋์ด๋ฏ๋ก ๊ฐ์ ํ ์ ์๋ ๋ช ๊ฐ์ง ์ฌํญ์ด ์์ ์ ์์ง๋ง ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์์ ๊ณต์ ํ๋ ค๊ณ ํฉ๋๋ค.
OnNotificationOpe nReceiver:onReceive ์ด์ ๋จ์ํ ํธ์ถ
FirebasePlugin
๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์ต๋๋ค.