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"; } ?>