7 – Phonegap – Cordova Push Notification Kullanımı

Push notification kullanmak için projemize pushnotification plugini dahil etmeliyiz .

Komut : phonegap local plugin add https://github.com/phonegap-build/PushPlugin.git

Komutu uyguladıkdan sonra kullamamız gereken javasicript dosyasını 

html

<head>

<script type="text/javascript" src="js/PushNotification.js"></script>

</head>

 

taglarının arasında projeye dahil edelim

PushNotification.js dosyasının içeriği şu şekilde : 

 

var PushNotification = function() {
};


// Call this to register for push notifications. Content of [options] depends on whether we are working with APNS (iOS) or GCM (Android)
PushNotification.prototype.register = function(successCallback, errorCallback, options) {
    if (errorCallback == null) { errorCallback = function() {}}

    if (typeof errorCallback != "function")  {
        console.log("PushNotification.register failure: failure parameter not a function");
        return
    }

    if (typeof successCallback != "function") {
        console.log("PushNotification.register failure: success callback parameter must be a function");
        return
    }

    cordova.exec(successCallback, errorCallback, "PushPlugin", "register", [options]);
};

// Call this to unregister for push notifications
PushNotification.prototype.unregister = function(successCallback, errorCallback, options) {
    if (errorCallback == null) { errorCallback = function() {}}

    if (typeof errorCallback != "function")  {
        console.log("PushNotification.unregister failure: failure parameter not a function");
        return
    }

    if (typeof successCallback != "function") {
        console.log("PushNotification.unregister failure: success callback parameter must be a function");
        return
    }

     cordova.exec(successCallback, errorCallback, "PushPlugin", "unregister", [options]);
};

    // Call this if you want to show toast notification on WP8
    PushNotification.prototype.showToastNotification = function (successCallback, errorCallback, options) {
        if (errorCallback == null) { errorCallback = function () { } }

        if (typeof errorCallback != "function") {
            console.log("PushNotification.register failure: failure parameter not a function");
            return
        }

        cordova.exec(successCallback, errorCallback, "PushPlugin", "showToastNotification", [options]);
    }
// Call this to set the application icon badge
PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) {
    if (errorCallback == null) { errorCallback = function() {}}

    if (typeof errorCallback != "function")  {
        console.log("PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function");
        return
    }

    if (typeof successCallback != "function") {
        console.log("PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function");
        return
    }

    cordova.exec(successCallback, errorCallback, "PushPlugin", "setApplicationIconBadgeNumber", [{badge: badge}]);
};

//-------------------------------------------------------------------

if(!window.plugins) {
    window.plugins = {};
}
if (!window.plugins.pushNotification) {
    window.plugins.pushNotification = new PushNotification();
}

if (typeof module != 'undefined' && module.exports) {
  module.exports = PushNotification;
}

 

Sonrasında bize android için registration id , ios device token leri verecek ve notification gonderdiğimizde uygulama açıksa ekrana alert kapalı ise üsttarafa bildirimleri itecek java sicrip kodunu da projenize dahil edin

Kod :

// JavaScript Document
var pushNotification;
 
function onDeviceReady() {
        document.addEventListener("backbutton", function(e) {}, false);
        try {
            pushNotification = window.plugins.pushNotification;
            if (device.platform == 'android' || device.platform == 'Android' || device.platform ==
                'amazon-fireos') {
                pushNotification.register(successHandler, errorHandler, {
                    "senderID": "xxxxxxxx",// buraya googleden aldığınız sender id girilecek
                    "ecb": "onNotification"
                }); // required!
            } else {
                pushNotification.register(tokenHandler, errorHandler, {
                    "badge": "true",
                    "sound": "true",
                    "alert": "true",
                    "ecb": "onNotificationAPN"
                }); // required!
            }
        } catch (err) {
            txt = "There was an error on this page.\n\n";
            txt += "Error description: " + err.message + "\n\n";
            alert(txt);
        }
    }
    // İOS BİLDİRİMLERİNİ İŞLEMEK
 
function onNotificationAPN(e) {
        if (e.alert) {
            //
            navigator.notification.alert(e.alert);
        }
        if (e.sound) {
            //SES  
            var snd = new Media(e.sound);
            snd.play();
        }
        if (e.badge) {
            pushNotification.setApplicationIconBadgeNumber(successHandler, e.badge);

        }
    }
    // Android ayarları
 
function onNotification(e) {
    switch (e.event) {
        case 'registered':
            if (e.regid.length > 0) {
                // Notification gönderebilmek için cihazın reg_id sini bilmemiz gerek
                // Cihazın reg_id sini buradan alabiliriz
                alert("regID = " + e.regid);
         localStorage.setItem('regid',e.regid);// local hafızayada kayıt edebilirsiniz
            }
            break;
        case 'message':
        alert(JSON.stringify(e));
            // uygulama açıkken gönderilen notification ları buradan kontrol edip dialog yada alert yardımıyla ekrana yazabilirsiniz
            if (e.foreground) {
                
                var soundfile = e.soundname || e.payload.sound;
                // iSİZE ÖZEL SES DOSYASI TANIMLAYABİLİRSİNİZ
                // SES DOSYASINI ÇALABİLMEK İÇİN org.apache.cordova.media plugin YÜKLEMENİZ GEREK
                var my_media = new Media("/android_asset/www/" + soundfile);
                my_media.play();
            }
            break;
        case 'error':
            break;
        default:
            break;
    }
}
 
function tokenHandler(result) {
    alert('device token = ' + result);
    // İOS NOTİFİCATİON GÖNDEREBİLMEK İÇİN CİHAZIN TOKEN İD SİNİ BİLMENİZ GEREK
    // BURADAN ÖĞRENEBİLİRSİNİZ
}
 
function successHandler(result) {}
 
function errorHandler(error) {}
document.addEventListener('deviceready', onDeviceReady, true);

 

Google dan ve Apple dan Gerekli izinleri uygulamanız için aldıysanız php yardımı ile uygulamalarınıza notification gönderebilrsiniz .

pHp kodları da Şöyle :

<?php

$deviceToken = $_GET[reg];
$mesaj = $_GET[mesaj];
$deviceType = $_GET[tip];
 
if($deviceType == 'ios'){

$deviceToken = // deviceToken
$sertifikaAnahtari = "xxxx"; // oluşturduğumuz sertifikanın anahtarı
$mesaj = "bu bir notification dur"; // görüntülenecek mesaj
 
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'Prosertifika.pem');// Prosertifika.pem dosyası appleden aldığınız sertifika isteğiyle oluşturulan dosyadır buna daha sonra değineceğiz . 
stream_context_set_option($ctx, 'ssl', 'passphrase', $sertifikaAnahtari);
 
// development için ssl://gateway.sandbox.push.apple.com:2195
// production için ssl://gateway.push.apple.com:2195
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', 
    $hataKodu, 
    $hataMesaji, 
    60, 
    STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, 
    $ctx);
 
if (!$fp)
exit("Bağlantı başarısız: $hataKodu $hataMesaji");
$body['aps'] = array(
    'badge' => 1,
    'alert' => $mesaj,
    'sound' => 'default'
);
$payload = json_encode($body);
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
    echo 'Mesaj iletilemedi';
else
    echo 'Mesaj başarıyla iletildi';
fclose($fp);

}
else if($deviceType == 'android'){
 
 
$registrationIds = array($deviceToken);
 
$msg = array
(
    'message'       => $mesaj,
    'title'         => "Uygulama Adı ",
    'subtitle'      => 'altmetin',
    'tickerText'    => 'Ticker text here...Ticker text here...Ticker text here',
    'vibrate'   => 1,
    'sound'     => 1
);
 
$fields = array
(
    'registration_ids'  => $registrationIds,
    'data'              => $msg
);
 
$headers = array
(
    'Authorization: key=' . 'AIzaSyAlgcbNSrK4LgtrtgrtgIqgrtgrtosGz0hmjmo', //googledan aldığınız Authorization key
    'Content-Type: application/json'
);
 
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
 
echo $result;
}
else {
    echo "Error";
}


?>