Cordova-plugin-firebase: ์•ฑ์ด ๋‹ซํžŒ ๊ฒฝ์šฐ onNotificationOpen์ด ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ฑ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 11์›” 24์ผ  ยท  46์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: arnesson/cordova-plugin-firebase

์•ˆ๋…•,

์ด ๊ธฐ๋ณธ ๋™์ž‘์ธ์ง€ ์•„๋‹Œ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์ด ๋‹ซํžˆ๋ฉด(์•ฑ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋จ) ํ‘ธ์‹œ ์•Œ๋ฆผ์ด ์™€์„œ ํƒญํ•˜๋ฉด onNotificationOpen์ด ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ˆ์ƒ๋Œ€๋กœ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

messaging

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Firebaseํ”Œ๋Ÿฌ๊ทธ์ธ.์ž๋ฐ”

<strong i="6">@Override</strong>
protected void pluginInitialize() {
    final Context context = this.cordova.getActivity().getApplicationContext();
    final Bundle extras = this.cordova.getActivity().getIntent().getExtras();
    this.cordova.getThreadPool().execute(new Runnable() {
        public void run() {
            Log.d(TAG, "Starting Firebase plugin");
            mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
            if(extras != null && extras.size()>1) {
                // FirebasePlugin.sendNotification(extras);
                if (FirebasePlugin.notificationStack == null) {
                    FirebasePlugin.notificationStack = new ArrayList<Bundle>();
                }
                notificationStack.add(extras);

            }
        }
    });
}

๋ชจ๋“  46 ๋Œ“๊ธ€

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ๋‹ค :(

์ฝ”๋ฅด๋„๋ฐ” ์žฌ๊ฐœ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝœ๋ฐฑ์„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๋ผ์ดํ”„์‚ฌ์ดํด์— ๋Œ€ํ•œ ์ฝ”๋ฅด๋„๋ฐ” ๋ฌธ์„œ ์ฐธ์กฐ: http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html#lifecycle -guide

@robertarnesson ๋‹ต๋ณ€์„ ์กฐ๊ธˆ ๋” ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? iOS์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์ด ํฌ๊ทธ๋ผ์šด๋“œ ๋ฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์•ฑ์„ ์ข…๋ฃŒ/์ข…๋ฃŒํ•˜๋Š” ์ฆ‰์‹œ ๋” ์ด์ƒ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ ํฌ๊ทธ๋ผ์šด๋“œ(Android 6.0.1) ๋ชจ๋‘์—์„œ ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ์•Œ๋ฆผ ์—ด๊ธฐ๋Š” ์•ฑ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ํƒญ ํ›„ ํŠธ๋ ˆ์ด ์•Œ๋ฆผ์ด ์ง€์›Œ์ง€๊ณ  ์•Œ๋ฆผ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค. (์ด๋Š” ์•ฑ์ด ์ผ์‹œ ์ค‘์ง€๋œ ๊ฒฝ์šฐ์—๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค). ํšก๋‹จ๋ณด๋„ ๋•Œ๋ฌธ์ผ๊นŒ์š”? ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@robertarnesson @Taracque

์ด๊ฒƒ์ด ๋„์›€์ด ๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์˜ ์ฝ”๋“œ ์ƒ˜ํ”Œ ๋Œ€์‹  ๋‹จ์–ด๋‚˜ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋„ํ•˜๊ณ  ๋„์›€์„ ์ค„ ๋•Œ ์ •๋ง ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด index.html์— ์žˆ๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํ•ด์„์ด๋ฉฐ iOS ๋ฐ Android์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ํŽ˜์ด๋กœ๋“œ๋Š” ์กฐ์ž‘์„ ์œ„ํ•ด ์•ฑ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

iOS์—์„œ๋Š” ์•ฑ์ด ํฌ๊ทธ๋ผ์šด๋“œ์— ์žˆ์„ ๋•Œ ์•Œ๋ฆผ์ด ์ˆ˜์‹ ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ๋˜ ์•ฑ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ๋ฅผ ํƒญํ•˜์—ฌ cordova.js์˜ 'deviceready' ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์•Œ๋ฆผ์„ ๋ฐ›๊ฑฐ๋‚˜ ์•ฑ์„ ์—ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Android์˜ ๊ฒฝ์šฐ 'resume'์„ 'deviceready'๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์ฒ˜์Œ ๋กœ๋“œ๋  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค(์ดํ•ด๊ฐ€ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค).

function onLoad(){

    //fire this with load of the HTML page
    document.addEventListener("deviceready", onDeviceReady, false);

    }

    function onDeviceReady(){

    // this will fire when the app first runs (iOS and Android)
    // iOS will run this after tapping a notification as well but not Android

    // Create the resume as soon as the device is ready.
    document.addEventListener("resume", onResume, false); 

    // add initial cordova-plugin-firebase function calls here
    // e.g TokenRefresh, onNotificationOpen etc

    window.FirebasePlugin.onTokenRefresh(function(token){

    //Do something with the token server-side if it exists

    });

    // get any initial or resume notification (used for iOS)
    var payload = getNotification();

    }

    function getNotification(){

    // get any notification variables for use in your app
    window.FirebasePlugin.onNotificationOpen(function(notification){

    //Check if notification exists then do something with the payload vars
    var str = JSON.stringify(notification);
    console.log(str);

    });

    return str;

    }

    function onResume(){
    //Add plugin functions here after app has resumed from background
    // or after notification is tapped (needed for Android)

    //get resume notification and payload (needed for Android)

    var payload = getNotification();

    }

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ €๋Š” ์—ฌ๊ธฐ์„œ ์š”์ ์„ ๋†“์น˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•ฑ ์ž์ฒด๋Š” ๋ฐฐ๊ฒฝ์ด๋‚˜ ์ „๊ฒฝ์—๋„ ์—†์Šต๋‹ˆ๋‹ค. ์•ฑ์„ ์ข…๋ฃŒํ•˜๊ณ  ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉด ์•ฑ์ด ์ผ์‹œ ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ์•ฑ์ด ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๊ณ  ์‹œ์ž‘๋˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๊ฐœ ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์žฅ์น˜๊ฐ€ ์ค€๋น„๋œ ํ›„์—๋„ onNotification open์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ–ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค.

1: ์•ฑ์ด ์™„์ „ํžˆ ๋น„ํ™œ์„ฑ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
2: ์•ฑ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์•Œ๋ฆผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
3 ๋‹น์‹ ์€ ์•Œ๋ฆผ์„ ํด๋ฆญ
4 ์•ฑ ๋กœ๋“œ
5 onNotificationOpen์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์˜ฌ๋ฐ”๋ฅธ์ง€?

์ด๊ฒƒ์€ ์–ด๋–ค OS๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์Šคํฌ๋ฆฝํŠธ์— Cordova.js๋ฅผ ํฌํ•จํ–ˆ์Šต๋‹ˆ๊นŒ?

๋กœ๋”ฉ ํŽ˜์ด์ง€์— js ์˜ค๋ฅ˜๊ฐ€ ์—†๋‹ค๊ณ  100% ํ™•์‹ ํ•ฉ๋‹ˆ๊นŒ?

@device68 @nikrhes ๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์•ฑ์ด ์ฒ˜์Œ์— ์‹œ์ž‘๋˜์ง€ ์•Š์•˜์„ ๋•Œ onNotificationOpen์ด ์‹คํ–‰๋˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์ด๋ ฅ์„œ ๋ฐ deviceready์—์„œ ํ˜ธ์ถœ๋˜๋Š” onNotificationOpen์„ ์‚ฌ์šฉํ•˜์—ฌ Android์™€ iOS ๋ชจ๋‘์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ์ƒํ™ฉ ๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ๋„ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์—ฐ 137ํ˜ธ๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@chanphillip , ์•„์นจ์— ๋ด์•ผ๊ฒ ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ XCODE๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ฏ€๋กœ iOS 10์„ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ Android์—์„œ ์ •ํ™•ํžˆ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด ์•ฑ์€ ์•Œ๋ฆผ๊ณผ ์ด๋ ฅ์„œ์˜ ํŽ˜์ด๋กœ๋“œ๋กœ ์ฝœ๋“œ ์Šคํƒ€ํŠธ๋ฅผ ๋ชจ๋‘ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

@device68 ๋ชจ๋“  ์ƒํ™ฉ์€ ์•ฑ์ด ๋น„ํ™œ์„ฑ ์ƒํƒœ์ผ ๋•Œ๋งŒ ๊ธฐ๋Šฅ์ด ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  IOS ๋ฐ Android OS์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ž‘๋™์ด ์•ˆ๋˜๋Š”.

์˜ค๋Š˜ Android์—์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ ๊ธฐ์–ต๋‚˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋น„ํ™œ์„ฑ ์•ฑ 1๊ฐœ

์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ํด๋ฆญํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์•ฑ์ด ๋กœ๋“œ๋˜๊ณ  onDeviceReady ๋‚ด์˜ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฝ”๋“œ๊ฐ€ ํ•ด๋‹น ํŽ˜์ด๋กœ๋“œ๋ฅผ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.

Resume ๋‚ด์˜ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํŽ˜์ด๋กœ๋“œ๋ฅผ ์บก์ฒ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ฑ์ด ์—ฌ์ „ํžˆ ํ™œ์„ฑ ์ƒํƒœ์ด๊ณ  ์•„์ง ์ตœ์†Œํ™”๋˜์ง€ ์•Š์€ ๋™์•ˆ์˜ ์ถ”๊ฐ€ ์•Œ๋ฆผ์€ onDeviceReady ๋‚ด๋ถ€์˜ ๊ธฐ๋Šฅ์— ์˜ํ•ด ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค.

2 ์ฒ˜์Œ์œผ๋กœ ์•ฑ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

decice๊ฐ€ ์ด๋ฏธ ์ค€๋น„๋˜์–ด ์žˆ๊ณ  ์ด์ œ ์žฌ๊ฐœ ์ƒํƒœ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์œผ๋กœ ์•ฑ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด onDeviceReady๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ํƒญํ•˜๋ฉด ์•ฑ์ด ์—ด๋ฆฌ๊ณ  Resume ๋‚ด๋ถ€์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฝ”๋“œ๊ฐ€ ์ด์ œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ํ›„์† ์•Œ๋ฆผ์€ Resume์—์„œ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

3 ์ตœ์†Œํ™”๋œ ์•ฑ(์ผ๋ฐ˜์ ์œผ๋กœ ๋งํ•จ)

๋‚ด ์•ฑ์ด ์–ธ์ œ๋“ ์ง€ ์ตœ์†Œํ™”๋˜๊ณ  ์•Œ๋ฆผ์„ ํด๋ฆญํ•˜๋ฉด Resume์ด ์ด๋ฅผ ์บก์ฒ˜ํ•˜์ง€๋งŒ ํด๋ฆญํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์•ฑ์„ ์ˆ˜๋™์œผ๋กœ ์—ด๋ฉด Resume์€ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ onNotificationOpen์ด ๋‚ด ์ฝ”๋“œ์˜ ์–ด๋Š ๊ณณ์—์„œ๋‚˜ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํ™œ๋™์€ iOS 9.3์—์„œ ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

4 ํฌ๊ทธ๋ผ์šด๋“œ ์•ฑ

์žฌ๊ฐœํ•œ ํ›„ ์•ฑ์—์„œ ์•Œ๋ฆผ์„ ๋ฐ›์œผ๋ฉด Resume์ด ํŽ˜์ด๋กœ๋“œ๋ฅผ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.

5 ํ‚ฌ๋ง ์•ฑ

์•ฑ์„ ์ฃฝ์ด๋ฉด #1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

6 ํŽ˜์ด๋กœ๋“œ

GCM์ด Android์—์„œ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์—์„œ ๋‚ด๊ฐ€ ๋ณธ ๋‘ ๊ฐ€์ง€ ์ฐจ์ด์ ์€ ์•Œ๋ฆผ์ด ์•ฑ ์™ธ๋ถ€์—์„œ ํด๋ฆญ๋˜์—ˆ๋Š”์ง€ ๋˜๋Š” ํฌ๊ทธ๋ผ์šด๋“œ์— ์žˆ๋Š” ๋™์•ˆ ์ˆ˜์‹ ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์•Œ๋ฆผ์„ ํƒญํ•˜๋ฉด Google์—์„œ ์‹œ๊ฐ„ ์ฝ”๋“œ, ๋ณด๋‚ธ ์‚ฌ๋žŒ, ๋ฉ”์‹œ์ง€ ID ๋“ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Google์€ ์œ„์˜ ๋‚ด์šฉ์„ ์ œ๊ฑฐํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ชจ๋“  ์ƒํ™ฉ์—์„œ๋Š” tap = false๋งŒ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๋‚ด๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์›น, Android ๋ฐ iOS ๊ฐ„์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ์ธก Curl API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ถ๊ทน์ ์œผ๋กœ Android์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์ž˜๋ชป๋˜๊ณ  ๋น„๋…ผ๋ฆฌ์ ์ธ iOS ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.

iOS์˜ ๋ชจ๋“  ๊ฒƒ์€ onDeviceReady์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ฉฐ onNotificationOpen์€ ์•Œ๋ฆผ์„ ๋ฐ›์€ ํ›„ ์ˆ˜๋™์œผ๋กœ ์•ฑ์„ ์—ด๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€๋ฅผ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ์•ฑ์ด ํฌ๊ทธ๋ผ์šด๋“œ์— ์žˆ๋Š” ๋™์•ˆ ์•Œ๋ฆผ์„ ๋ฐ›์€ ๊ฒฝ์šฐ์—๋„ ์•Œ๋ฆผ์ด ์ˆ˜์‹ ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์บก์ฒ˜ํ•˜๋ ค๋ฉด onDeviceReady ๋ฐ Resume์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ๊ฐ ์•„๋ž˜์— onNotificationOpen ๋ฒ„์ „์„ ๋ฐฐ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@device68 ์ž์„ธํ•œ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์‹ค ๋‚ด๊ฐ€ ์ž˜๋ชป ๋งํ–ˆ๋‹ค. ๋‚˜๋Š” onNotificationOpen์„ ์žฅ์น˜ ์ด๋ ฅ์„œ์™€ ์ค€๋น„ ๋ชจ๋‘์— ๋„ฃ์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ ์œ ์Šค ์ผ€์ด์Šค 1(์•ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์„ ๋•Œ ์•Œ๋ฆผ ํด๋ฆญ)์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ.

ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ ์ด์˜จ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” platform.ready()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‚ด ์ดํ•ด๋กœ๋Š” deviceready์™€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(์•ฑ์ด ์ข…๋ฃŒ๋จ)์—๋„ onNotificationOpen์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ iOS์—์„œ๋„ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@chanphillip ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ์–ด์„œ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. CLI๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ ์›์‹œ phonegap ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ ์•ˆ์— ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ  ์‹ค์ œ๋กœ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  4๊ณณ์—์„œ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋Š” ๋‚ด ์žฅ์น˜์˜ ๋น„๋””์˜ค๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

https://www.youtube.com/watch?v=xrWQH2wE8Fo

์ด๊ฒƒ์€ ๋‹น์‹ ์ด๋ณด๊ณ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. onNotificationOpen์€ ์•ฑ์˜ ์ฝœ๋“œ ๋ถ€ํŒ…์„ ์œ ๋ฐœํ•˜๋Š” ์•Œ๋ฆผ์„ ํƒญํ•  ๋•Œ ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„์—์•ผ ์•Œ๋ฆผ์ด onNotificationOpen ํ•จ์ˆ˜์—์„œ ์ˆ˜์ง‘๋ฉ๋‹ˆ๋‹ค.

๋ฆฌ์Šค๋„ˆ๋Š” ์˜ˆ์ƒ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€๋งŒ onNotificationOpen์€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ ์œ„ํ•ด ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋‚ด๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ๊ทธ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ•œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋‚ด ์•ฑ์— ๋Œ€ํ•œ ํŠน๋ณ„ํžˆ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

Android 4+, 6+ ๋ฐ 7+๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๊ธฐ์—์„œ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ iOS์— ๋Œ€ํ•ด ๋งŽ์€ ๋„์›€์„ ์ค„ ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” Yosemite ๋ฐ XCODE 7.1(iOS 9.3 SDK๋ฅผ ๊ฐ•์ œ๋กœ ํฌํ•จ)๊ณผ ํ•จ๊ป˜ Virtualbox๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•Œ๋ฆผ์ด onDeviceRedy์—์„œ๋งŒ ๋…์ ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๊ณ  Resume์„ ์‚ฌ์šฉํ•  ํ•„์š”์กฐ์ฐจ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ iOS 9+์ด์ง€๋งŒ 10+ ๋ฏธ๋งŒ์˜ ๊ธฐ๊ธฐ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ตœ์ข… ์‚ฌ์šฉ์ž๋Š” ์ „ํ™”๊ธฐ๋ฅผ 10.2๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์œผ๋ฉฐ ์•Œ๋ฆผ์€ ์ž‘๋™ ๊ธฐ๊ฐ„์„ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค. 9.3 SDK๋กœ ๋นŒ๋“œํ•œ XCODE ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Mac์„ ๊ตฌ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜์ƒ์ด ๋„์›€์ด ๋œ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉด ํ•ด์žˆ๋‹ค. ์•ฑ์ด ์—ด๋ฆฌ์ง€๋งŒ ๊ธฐ๋Šฅ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๋น„๋””์˜ค์—์„œ ๋™์ž‘์„ ์žฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ๋ฌผ๋ก  ondeviceready ์ƒํƒœ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์„œ๋“œ๋Š” ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : ๋ผ์ดํŠธ ํ…Œ์ด๋ธ” ์†Œ์ผ“์„ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ํ‰๊ฐ€ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. IDE์—์„œ ํ‰๊ฐ€ํ•  ๋•Œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์„œ๋“œ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „์ด "ํ˜ธ์ถœ๋˜์ง€ ์•Š์Œ"๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜๋Š” ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ํ‰๊ฐ€๊ฐ€ ์ž‘๋™ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์•ˆ๋…•,
๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ฝœ๋“œ ์Šคํƒ€ํŠธ โ€‹โ€‹์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ๋ฌธ์„œ์— onNewIntent๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฝ”๋“œ๊ฐ€ ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

    <strong i="9">@Override</strong>
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        FirebasePlugin.sendNotification(intent.getExtras());
    }

๊ทธ๋Ÿฌ๋‚˜ ํ˜ธ์ถœ๋  ์ด ์ฝœ๋ฐฑ์€ ์•Œ๋ฆผ์ด ํŽ˜์ด๋กœ๋“œ์—์„œ click_action์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋„๋ก ์˜๋„๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

{
  "to": "/topics/news",
  "notification": {
    "title": "Click Action Message",
    "text": "Sample message",
    "click_action": "android.intent.action.MAIN"
  }
}

๊ทธ๋ ‡๊ฒŒํ•˜๋ ค๊ณ ํ•˜์ง€๋งŒ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•˜๋ฉด ํด๋ฆญ ๋™์ž‘์—์„œ ์„ค์ •ํ•ด์•ผํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์„ค์ •ํ•œ ๊ฐ’์ด ๋ฌด์—‡์ด๋“  ์•ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Œ

        <activity android:name="MainActivity" >
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

ํด๋ฆญ ๋™์ž‘ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ ์ดˆ๊ธฐํ™” ์ค‘์— ์ถ”๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ฝ”๋“œ๋กœ ์‹œ๋„ํ•˜๊ณ  ์ด๋ฒˆ์—๋Š” ์•Œ๋ฆผ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

<strong i="21">@Override</strong>
    protected void pluginInitialize() {
        final Context context = this.cordova.getActivity().getApplicationContext();
        final Bundle extras = this.cordova.getActivity().getIntent().getExtras();
        this.cordova.getThreadPool().execute(new Runnable() {
            public void run() {
                Log.d(TAG, "Starting Firebase plugin");
                mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
                if(extras != null && extras.size()>1) {
                    FirebasePlugin.sendNotification(extras);

                }
            }
        });
    }

์–ด์จŒ๋“  ๋”๋Ÿฌ์šด ํ•ดํ‚น์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ข‹์•„, manifest.xml์— ๊ธฐ๋ณธ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ click_action์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ onNewIntent๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

Firebaseํ”Œ๋Ÿฌ๊ทธ์ธ.์ž๋ฐ”

<strong i="6">@Override</strong>
protected void pluginInitialize() {
    final Context context = this.cordova.getActivity().getApplicationContext();
    final Bundle extras = this.cordova.getActivity().getIntent().getExtras();
    this.cordova.getThreadPool().execute(new Runnable() {
        public void run() {
            Log.d(TAG, "Starting Firebase plugin");
            mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
            if(extras != null && extras.size()>1) {
                // FirebasePlugin.sendNotification(extras);
                if (FirebasePlugin.notificationStack == null) {
                    FirebasePlugin.notificationStack = new ArrayList<Bundle>();
                }
                notificationStack.add(extras);

            }
        }
    });
}

์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ์ฃผ๋กœ ์•Œ๋ฆผ์„ ํƒญํ•˜์—ฌ ์•ฑ์„ ์‹œ์ž‘ํ•  ๋•Œ ์•Œ๋ฆผ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. @huny0522๋‹˜ ์˜ ์ œ์•ˆ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿ‘

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์ด๊ฒƒ์€ ํŠน๋ณ„ํžˆ ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์‹œ๋„ํ•ด๋ณด๊ณ  ๊ทธ๊ฒƒ์ด ์ €์—๊ฒŒ ๋งž๋Š”์ง€ ํ™•์ธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ฑ์˜ ์ฝœ๋“œ ๋ถ€ํŒ… ํ›„ ์•Œ๋ฆผ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํฐ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ๋ณ€๊ฒฝ์„ ์–ด๋–ป๊ฒŒ๋“  ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด์ƒ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ˆ˜์ •๋˜์—ˆ๊ฑฐ๋‚˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ˆ˜์ •๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค!?

@huny0522 ์˜ ํŒจ์น˜๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Android ์ฝœ๋“œ ์Šคํƒ€ํŠธ์—์„œ onNotificationReceived ์ฝœ๋ฐฑ์ด ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ๋ชจ๋“  ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ•œ ํ›„ github์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฅด๋„๋ฐ” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€ https://github.com/arnesson/cordova-plugin-firebase.git --save

์–ด๋–ค ์‚ฌ๋žŒ์€ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค

@device68 ์ด ์“ด 3๋‹จ๊ณ„ ??

์ตœ์†Œํ™”๋œ ์•ฑ(์ผ๋ฐ˜์ ์œผ๋กœ ๋งํ•จ)

๋‚ด ์•ฑ์ด ์–ธ์ œ๋“ ์ง€ ์ตœ์†Œํ™”๋˜๊ณ  ์•Œ๋ฆผ์„ ํด๋ฆญํ•˜๋ฉด Resume์ด ์ด๋ฅผ ์บก์ฒ˜ํ•˜์ง€๋งŒ ํด๋ฆญํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์•ฑ์„ ์ˆ˜๋™์œผ๋กœ ์—ด๋ฉด Resume์€ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ onNotificationOpen์ด ๋‚ด ์ฝ”๋“œ์˜ ์–ด๋Š ๊ณณ์—์„œ๋‚˜ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ด์ œ ๋‚˜์˜ ์œ ์ผํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด๋‚ธ ๊ฐœ์ฒด์—์„œ ์ด ์ค„์„ ์ œ๊ฑฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. "click_action":"YOUR_DATA_HERE".

์ด์ œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜์‹ ๋œ ์•Œ๋ฆผ์„ ํ„ฐ์น˜ํ•˜๋ฉด ์•ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ionic/cordova ์•ฑ์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ Android 6.0์ด ์„ค์น˜๋œ ๊ธฐ๊ธฐ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์žฅ์น˜์—์„œ๋Š” ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ๋“  ์ „๊ฒฝ์— ์žˆ๋“ (!) ์ƒํƒœ ํ‘œ์‹œ์ค„์—์„œ ์•Œ๋ฆผ์ด ํ•ญ์ƒ ํŠธ๋ฆฌ๊ฑฐ๋˜๊ณ  ์•Œ๋ฆผ์„ ์—ด ๋•Œ ์ฝœ๋ฐฑ์ด ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ์žฅ์น˜๋Š” ๊ดœ์ฐฎ์•˜์Šต๋‹ˆ๋‹ค(Android 5, iOS 9 ๋ฐ 10). ์ „๊ฒฝ์—์„œ ์ฝœ๋ฐฑ ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ์ด์— ๋ฐ˜์‘ํ•˜๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋ฌธ์„œ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ƒํƒœ ํ‘œ์‹œ์ค„์—์„œ ์ •์ƒ์ ์œผ๋กœ ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

@abhishek-kollipara ๋…ผ์˜๋œ ๋ฌธ์ œ๋Š” ํฌ๊ทธ๋ผ์šด๋“œ/๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ์—์„œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ์•Œ๋ฆผ์„ ํƒญํ•˜๊ณ  ์•Œ๋ฆผ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ์•ฑ์ด ์ฝœ๋“œ ๋ถ€ํŒ…๋  ๋•Œ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜•์„ฑ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํŠนํžˆ ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ฌธ์„œ์— ์„ค๋ช…๋˜์–ด ์žˆ์„ ๋•Œ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ ์ดํ‹€ ๋™์•ˆ ์ถ”์ ์„ ์‹œ์ž‘ํ•œ ์ดํ›„๋กœ ์ฝœ๋“œ ๋ถ€ํŠธ์—์„œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์žก๋Š” ๋ฐ ์ฒ˜์Œ์œผ๋กœ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์˜จ ๋„ค์ดํ‹ฐ๋ธŒ ํ”Œ๋Ÿฌ๊ทธ์ธ '์›น ์˜๋„'๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋ฌธ์„œํ™”๋œ ๋Œ€๋กœ ์„ค์น˜ํ•˜๊ณ  ๋ถ€ํŒ… ์‹œ ๋‚ด์žฅ ํ•จ์ˆ˜ getIntent()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์ด ์•Œ๋ฆผ์— ์˜ํ•ด ๋ถ€ํŒ…๋˜๋Š” ๊ฒฝ์šฐ ์•Œ๋ฆผ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด ๋‚ด๋ถ€ ์–ด๋”˜๊ฐ€์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@heidji ์ด๊ฒƒ์€ IOS์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๋‚ด ๊ฒฝ์šฐ :

๊ธฐ๊ณ„์  ์ธ์กฐ ์ธ๊ฐ„:
-์ฝœ๋“œ ์Šคํƒ€ํŠธ: OnNotificationOpen ์‹คํ–‰
-์ตœ์†Œํ™” ์•ฑ: OnNotificationOpen ์‹คํ–‰
-ํฌ๊ทธ๋ผ์šด๋“œ ์•ฑ: OnNotificationOpen ์‹คํ–‰

IOS:
-์ฝœ๋“œ ์Šคํƒ€ํŠธ: OnNotificationOpen์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ
-์ตœ์†Œํ™” ์•ฑ: OnNotificationOpen ์‹คํ–‰
-ํฌ๊ทธ๋ผ์šด๋“œ ์•ฑ: OnNotificationOpen ์‹คํ–‰

๋„์™€ ์ค˜์„œ ๊ณ ๋งˆ์›Œ

@Hanzofm ์†”์งํžˆ iOS์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. Web Intent ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ถ€ํŒ… ์‹œ ์ฝ˜์†”์— ์ถœ๋ ฅ์„ ๊ธฐ๋กํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@Hanzofm ์ด ์„ค๋ช…ํ•œ iOS์—์„œ ๋™์ผํ•œ ๋™์ž‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

iOS์—์„œ๋„ ๋™์ผํ•œ ๋™์ž‘์ด ์žˆ์Šต๋‹ˆ๋‹ค. onNotificationOpen์€ ์•Œ๋ฆผ์„ ํด๋ฆญํ•  ๋•Œ iOS ์•ฑ์˜ ์ฝœ๋“œ ์Šคํƒ€ํŠธ์—์„œ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „ 0.1.25 ์‚ฌ์šฉ.

์—…๋ฐ์ดํŠธ:
Firebase ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ•จ๊ป˜ "cordova-plugin-local-notifications"๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. "cordova-plugin-local-notifications" ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ฑฐํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ฝœ๋“œ ์Šคํƒ€ํŠธ(iOS) ์‹œ noNotificationOpen์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”

์ œ ๊ฒฝ์šฐ์—๋Š” ๋กœ์ปฌ ์•Œ๋ฆผ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ํ‘ธ์‹œ ์•Œ๋ฆผ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋‚˜๋Š” ๊ทธ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—†์Šต๋‹ˆ๋‹ค :)

์ด๊ฒŒ ์ผœ์ ธ์•ผ ํ•˜๋Š”๊ฑด๊ฐ€์š”?

skjermbilde 2018-04-27 kl 09 22 50

์ฒญ์†Œ๋ฅผ ์œ„ํ•ด ๋‹ซ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ๊ณ„์†๋˜๋ฉด ๋‹ค์‹œ ์—ฌ์‹ญ์‹œ์˜ค.

@heidji ๊ท€ํ•˜์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ƒํ™ฉ์—์„œ ์•Œ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์•ฑ์ด ์™„์ „ํžˆ ๋‹ซํ˜”์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์•Œ๋ฆผ์„ ํด๋ฆญํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์•Œ๋ฆผ ํ‘œ์‹œ์ค„์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‚˜์ค‘์— ์•ฑ์„ ์—ด๊ณ  ์•Œ๋ฆผ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํฌ๊ทธ๋ผ์šด๋“œ์—์„œ ์•Œ๋ฆผ์„ ๋ฐ›์ง€๋„ ์•Š๊ณ  ์•ฑ์„ ์—ด๊ธฐ ์œ„ํ•ด ํด๋ฆญํ•˜์ง€๋„ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์ด ์•Œ๋ฆผ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ionic3์—์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

@akildemir Ionic์—์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์—ด ๋•Œ ์ž์‹ ์˜ ์„œ๋ฒ„์— ์•Œ๋ฆผ์„ ๊ธฐ๋กํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@heidji ์ด ์•Œ๋ฆผ์ด ์กด์žฌํ•˜๋Š”์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ ์•Œ๋ฆผ์„ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด ์„œ๋ฒ„์— ์•Œ๋ฆผ์„ ์–ด๋–ป๊ฒŒ ๊ธฐ๋กํ•ฉ๋‹ˆ๊นŒ?
firebase๋„ ์žฅ์น˜๊ฐ€ ์žˆ๋Š” ๋‚ด ์„œ๋ฒ„์— ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด firebase๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์•Œ๋ฆผ์„ ์œ„ํ•ด ์ž์ฒด ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป์ด์—ˆ์Šต๋‹ˆ๊นŒ?

@akildemir ๋‚ด ๋ง์€ ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ๋งŒ๋“ค ๋•Œ ์ž์‹ ์˜ ์„œ๋ฒ„๋‚˜ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ ์ค‘์ธ ์„œ๋ฒ„์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ณณ์—๋„ ํ‘ธ์‹œ ์•Œ๋ฆผ์˜ ์กด์žฌ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. Firebase๋„ ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์•Œ๋ฆผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด์ง€๋งŒ ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ PHP ์„œ๋ฒ„์—์„œ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด(์˜ˆ: ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋‹น์‹ ์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒˆ์„ ๋•Œ) ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด Firebase์— ์—ฐ๋ฝํ•˜๊ณ  ์ด ์ด๋ฒคํŠธ๋ฅผ "is_read = 0"์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ๋ฆผ์„ ํด๋ฆญํ•˜์ง€ ์•Š์œผ๋ฉด ์›น์‚ฌ์ดํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์•ฑ์—์„œ ์ž์ฒด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์•Œ๋ฆผ์„ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋ฌด์—‡์ด๋“  ํ‘œ์ค€ ๊ฐœ๋ฐœ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@heidji ๋‚ด ์•ฑ์— ๋Œ€ํ•œ ์›น์‚ฌ์ดํŠธ๊ฐ€ ์—†์ง€๋งŒ ๋„ค ๋ง์”€ํ•˜์‹  ๋‚ด์šฉ์€ ๊ฝค ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์•Œ๋ฆผ์„ ์„œ๋ฒ„์— ๋™์‹œ์— ์ €์žฅํ•˜๊ณ  ๋‚˜์ค‘์— ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”! ๊ทธ๋ฆฌ๊ณ  ๋„ค, ์ €๋Š” ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ๋ถ„์•ผ์—์„œ ์ดˆ๋ณด์ž๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ฌผ์–ด๋ด๋„ ๋ ๊นŒ์š”? Firebase๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์— ๋™์ผํ•œ ์•Œ๋ฆผ์„ ๋“ฑ๋กํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”? ๊ทธ๋ฃน ์ฑ„ํŒ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๋ฃน ์ฑ„ํŒ…์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ๋ฃน์˜ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ทธ๊ฒƒ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๋ฆผ์„ ๋“ฑ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชธ = {
"๊ณต๊ณ ":{
"์ œ๋ชฉ":"์ œ๋ชฉ" , "body":"body" ,
},
"๋ฐ์ดํ„ฐ":{
"param1" : "๊ฐ’1"
},
"๋ฐ›๋Š” ์‚ฌ๋žŒ": DeviceId ,
"์šฐ์„ ์ˆœ์œ„": "๋†’์Œ",
"restricted_package_name":""
}

  let options = new HttpHeaders().set('Content-Type','application/json');
  this.http.post("https://fcm.googleapis.com/fcm/send",body,{
    headers: options.set('Authorization', 'key=),
  })

์—ฌ๊ธฐ์—์„œ deviceId๋ฅผ "to" ์„น์…˜์— ์ „๋‹ฌํ•˜๋ฉด ์žฅ์น˜๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์— ์—ฌ๋Ÿฌ deviceId๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@nikrhes ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
window.FirebasePlugin.onNotificationOpen().subscribe((๋ฐ์ดํ„ฐ) => {
if (data.tap) {
// ์•Œ๋ฆผ์„ ํƒญํ•˜๋Š” ์‚ฌ์šฉ์ž
} ๋˜ ๋‹ค๋ฅธ {
// ์•ฑ์ด ํฌ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
}
});

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ํ†ตํ•ด ๋ช‡ ๋‹ฌ ๋™์•ˆ ๋‹ต์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋งํ•ด์„œ, ๋ฌธ์ œ๋Š” ์•ฑ์ด ์™„์ „ํžˆ ์ข…๋ฃŒ/๊บผ์ง/์ข…๋ฃŒ๋œ iOS์˜ ๊ฒฝ์šฐ ํŠนํžˆ onNotification์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•Œ๋ฆผ์ด ์™€์„œ ์•ฑ์„ ์ฝœ๋“œ ๋ถ€ํŒ…ํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@heidji - ์„œ๋ฒ„์— ํ‘ธ์‹œ ์ด๋ฒคํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฝ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์†”๋ฃจ์…˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ์•ฑ์—๋Š” ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋งํ–ˆ๋“ฏ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ์ค‘์š”ํ•œ ํ–‰๋™์œผ๋กœ ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@wwwguy ๋‚ด ์†”๋ฃจ์…˜์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค. ํฌ๋“  ์ž‘๋“  ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค.
์•Œ๋ฆผ ํ”„๋ ˆ์Šค์— ์˜์กดํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ด๋Š” ๋ณด์žฅ๋œ ์ด๋ฒคํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ ๋‚ด xiaomi ์ „ํ™”์—์„œ facebook ์•Œ๋ฆผ์„ ๋ˆ„๋ฅผ ๋•Œ ์•ฑ์ด ์—ด๋ฆฌ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•ด ์ˆ˜์‹ญ ๊ฐœ์˜ ์•ฑ์„ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์•ฑ์—์„œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„์—์„œ ์•Œ๋ฆผ "์ฝ๊ธฐ"๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹จ์ˆœํ•œ ์•Œ๋ฆผ์ด ์•„๋‹ˆ๋ผ ํด๋ฆญํ•˜๋ฉด ์•ฑ ๋‚ด์—์„œ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ง€์‹œํ•˜๋Š” ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์•Œ๋ฆผ์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์Šค๋ถ์€ ์“ฐ๋ ˆ๊ธฐ๋‹ค. ๋ชจ๋‘๊ฐ€ ์ด๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ FB ์•Œ๋ฆผ์€ ๋‹จ์ˆœํ•œ ์•Œ๋ฆผ(์•ฑ ๋‚ด๋ถ€์˜ ์•„์นด์ด๋ธŒ ๋ชฉ๋ก์— ํ‘œ์‹œ๋จ)์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ธฐ๋Šฅ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํŠน์ • ์œ ํ˜•์˜ FB ์•Œ๋ฆผ์„ ํด๋ฆญํ•˜๋ฉด ์•ฑ์„ ์—ด๊ณ  ํŠน์ • ์žฅ์†Œ๋กœ โ€‹โ€‹์•ˆ๋‚ดํ•ด์•ผ ํ•˜๋Š” ํŠน์ • ์œ ํ˜•์ด ์—†์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ ... ์ €๋Š” ํฐ ์ฒ ํ•™์  ํ† ๋ก ์— ์ฐธ์—ฌํ•˜๊ธฐ ์œ„ํ•ด ํฌ์ŠคํŒ… ์„ ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™•์‹คํžˆ ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ์˜คํ”ˆ ์•ฑ = WORKS
iOS ์˜คํ”ˆ ์•ฑ = WORKS
์•ˆ๋“œ๋กœ์ด๋“œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•ฑ = WORKS
iOS ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•ฑ = WORKS
์ข…๋ฃŒ๋œ ์•ฑ์—์„œ Android ์ฝœ๋“œ ๋ถ€ํŒ… = ์ž‘๋™
์ข…๋ฃŒ๋œ ์•ฑ์—์„œ iOS ์ฝœ๋“œ ๋ถ€ํŒ… = ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

...ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์˜๋„๋œ ๋””์ž์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ ๋ฒ„๊ทธ(์•„๋งˆ๋„ ์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ ์Šค๋ ˆ๋“œ์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ง„๋‹จํ•˜๋Š” ํ˜ผ๋ž€์œผ๋กœ ์ธํ•ด) ๋˜๋Š” PUSH ๋ณธ๋ฌธ์— ์ „๋‹ฌ๋œ ๋ณ€์ˆ˜ ๋˜๋Š” xCode์—์„œ ์ปดํŒŒ์ผ๋œ ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋™์ž‘์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์ œ์ณ๋‘๊ณ  ... ์ด์— ๋Œ€ํ•œ ์ˆ˜๋™ ์ฝ”๋“œ ์ˆ˜์ •์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์†”์งํžˆ iOS์˜ ์ฝœ๋“œ ๋ถ€ํŒ… ์•Œ๋ฆผ์€ 100% ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” onNotificationOpen์ด ๊ฑฐ๊ธฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๊ณ  webintent๊ฐ€ iOS์— ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ๋“œ๋กœ์ด๋“œ์šฉ์œผ๋กœ๋งŒ webintent ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์„ค์ •์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰