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.

Hiç yorum yok:

Yorum Gönder