22 Ağustos 2015 Cumartesi

Cordova Uygulama boyutunu düşürme

Uygulamanızın çok boyut kaplayan ve apk'yı büyüten ek dosyalarını ( assets ) uygulama indikten sonra yükletebilirsiniz.

İlk adım ek dosyalarınızı zipleyip server'a kopyalamak. İkinci adım ise uygulama tarafında başlangıçta kontrollerin yapılıp ek dosyalar indirilmediyse indirilmesini başlatmak.

Bu iş için 2 plugine ihtiyaç var:

$ cordova plugin add cordova-plugin-zip
$ cordova plugin add cordova-plugin-file-transfer

İlk plugini zip dosyalarını çıkartması, ikinci plugini dosya transferini sağlaması için kullanacağız.


Bu iki plugini kurduktan sonra, sırada uygulama tarafında deviceready olayına bir listener atamak ve dosya bilgilerini gireceğimiz değişkenleri tanımlamak var.

// ek dosya ya da klasörün kopyalanacağı dosya yolu
var filePath = "/sdcard/";
            
//İndirelecek dosyanın URL yolu
var zipURL = "http://www.site.com/assets.zip";
            
//İndirilen dosyanın alacağı isim.
var fileName = "assets.zip";

document.addEventListener("deviceready", init, false);

init metodu assets'in inip inmediğini kontrol edip inmediyse indirilmesini indiyse uygulamanın başlatılmasını sağlar.
function init(){
               
    // eğer indirilmediyse..
    if(localStorage.getItem('downloaded') != "yes") {
        // zip dosyasını indir
        downloadZip();
                    
    } else {
        // uygulamayı başlatan metod
        appReady();
    }      
            
}

downloadZip metodu ise zip dosyasını indirip filePath değişkeniyle belirtilen dosya yoluna dosyaları aktarır.
function downloadZip() {
    var options = new FileUploadOptions();
    var fileTransfer = new FileTransfer();

    fileTransfer.download(
        encodeURI(zipURL),
        filePath + fileName,
        function(entry) {
            zip.unzip(filePath + fileName, filePath, appReady, null);
            console.log("download complete: " + entry.fullPath);
        },
        function(error) {
            console.log(error);
            console.log("download error source " + error.source);
            console.log("download error target " + error.target);
            console.log("upload error code" + error.code);
        },
        false, {

        }
    );

}

Zip dosyası indirilip çıkartıldıktan sonra uygulamayı başlattığını varsaydığım appReady metodu çağrılıyor. Sonraki açılışlarda assets'in tekrar indirilmesini engellemek için metot şu şekilde olmalı:
function appReady() {
    localStorage.setItem('downloaded', 'yes');

    // Uygulama başlatan kodlar.....
}

İndirilme sırasında progressbar'da gösterilebilir. Bunun için şu linke göz atabilirsiniz.

21 Ağustos 2015 Cuma

CodeIgniter & Nginx konfigürasyonu


Bu yazıda Nginx Server ve CodeIgniter framework'ü hakkında görüşlerimi ve konfigürasyon ayarlarlarını paylaşacağım.

Nginx?

Nginx yüksek eş zamanlılığa(concurrency) ve düşük hafıza tüketimine odaklanan bir web server'idir. Özellikle işlem hızı ve çok sayıda bağlantıyla başa çıkma yeteneği gerektiği zamanlarda Nginx ideal bir seçenek olarak önümüze çıkar.


CodeIgniter?

CodeIgniter'a gelecek olursak, yüksek performanslı, düşük ayakizine(hafıza kullanımı) sahip  tatmin edici bir dökümantasyona sahip olan PHP web framework'üdür.


İçinde bulunduğum son projede bu iki teknolojiyi tercih ettim. Kullanma sebeplerimi sayacak olursam:
  • Üzerinde çalıştığımız mobil uygulamanın yüksek performansa sahip bir web servise ihtiyaç duyması
  • Bağımlılığı minimum olan bir framework'e ihtiyaç duymam (PEAR ve benzeri büyük ölçekli kütüphaneler olmaksızın PHP5.4+ yüklü her sunucuda çalışacak şekilde olması)
  • Web servisin yanında mobil uygulama verilerinin yönetimi ve monitör edilmesini sağlayacak bir yönetim panelini hızlıca yapmamı sağlaması

Özellikle 3. seçenek slim gibi bir micro framework kullanmama sebebim sayılabilir.

Kurulum

Nginx ve PHP

Nginx ve PHP kurulumunu henüz yapmadıysanız bu makaleyi okumanızı öneririm.

CodeIgniter

CodeIgniter kurulumu çok kolay! Son versiyonunu(3.0.1) resmi websitesinden indirip server'inize kopyalamanız yeterli.

Konfigürasyon

Nginx

Nginx, Apache'deki Virtual Host mantığında çalışan server blokları kullanır. Server bloklarını websitenizin tarifini yapan dosyalar olarak görebilirsiniz.

Varsayılan olarak nginx websitenin tanımının yapıldığı server blokları
etc/nginx/sites-available/ yolunda bulunur. Bu klasör default dosyasına sahiptir.  Bu dosya bir website ile ilgili tüm gerekli bilgileri bulundurur.

Şimdi default adlı dosyaya girip CodeIgniter kullanan websitemiz için gerekli konfigürasyonu yapalım. 

server {
        #server'in dinleyeceği port
        listen       80;

        #server'in hizmet vereceği adres bu örnekte http://localhost
        server_name  localhost;

        #CodeIgniter projenizin adresi
        root   /var/www/html/ci;
        autoindex on;
        index index.php;
 
        location / {
 
           try_files $uri $uri/ /index.php;
 
           location = /index.php {
 
              fastcgi_pass   127.0.0.1:6969;
              fastcgi_param  SCRIPT_FILENAME /var/www/html/ci$fastcgi_script_name;
              include        fastcgi_params;
           }
        }
 
        location ~ \.php$ {
            return 444;
        }
}

Dosyayı kaydettikten sonra ayarları devreye sokmak için aşağıdaki komutu terminalden çalıştırıyoruz:

$ sudo service nginx restart

CodeIgniter

Son olarak application/config/config.php 'yi aşağıdaki gibi düzenliyoruz:

...

$config['base_url'] = "";
$config['index_page']  = "";
$config['uri_protocol'] = "AUTO";

...


Evet kurulum bu kadar. :)  İlerleyen yazılarda bu projede kullandığım kütüphanelerden bahsetmeyi planlıyorum.

Sağlıcakla kalın.