allowBackup özelliği

Android 6 ile gelen bu yenilik sayesinde uygulamanın verisini otomatik olarak yedeklemek mümkün oluyor. Tabi bunun da kendine göre güvenlik kaygısı ve bazı güçlükler yarattığını söyleyebiliriz.

Uygulama verisini otomatik yedekleyebilmek için iki seçeneğimiz var, ya Google Drive’ı kullanırız ya da seçtiğimiz başka bir bulut hizmetini kullanırız.

Google Drive için çok basit, şu kodu manifest dosyası içerisinde android:allowBackup=”true” değerini girdikten sonra tamamdır.

Otomatik yedeklemenin başlaması için telefon içerisinde şu şartlar gerekiyor:

  • Aygıt bir WiFi hizmetine bağlanmış olmalı
  • Aygıt şarj’da olmalı ( / boşta olmalı)
  • Son yedekleme üzerinden 24 veya daha fazla saat geçmiş olmalı
  • Kullanıcı Ayarlar->Yedekleme üzerinden otomatik yedeklemeyi etkin kılmalı

Bir geliştirici olarak bize avantajı servisin güvenliği açısından kaygı duymaya gerek yok, gerekli ayarlamaları yaptık mı kafamız rahat olacaktır.

Otomatik yedeklemenin dezavantajı ise her bir aygıtta en fazla 25MB yedekleyebilme hakkı vardır. Ben sadece kullanıcı ayarlarını saklayacağım diyorsanız zaten fazlasıyla yeter de artar bu boyut.

Başka bir bulut servisi kullanmak istiyorsak ilk önce manifest dosyası içerisinde tanıtmamız gerekiyor:

<application
  android:allowBackup=”true”
  android:backupAgent=”MyBackupService”>
  <meta-data
     android:name=”com.google.android.backup.api_key”
     android:value=”GGdPqrEGHJIErlxFByGgNz2ywB1Qb6TsmLpp5Ksh1PW-OSg0y” />
</application>

Ardından BackupAgentHelper sınıfını miras aldıktan sonra yedekleme işlemi için aşağıdaki metotları kullanabiliriz:

  • onFullBackup(FullBackupDataOutput data)
  • public void onRestoreFile (ParcelFileDescriptor data, long size, File destination, int type, long mode, long mTime)

Şimdi de yedekleme durumları için birkaç örnek vereyim. Aşağıdaki kullanıcı ayarlarını yedeklemek iyi olacaktır:

  • Kullanıcı tarafından değiştirilen tüm ayarlar
  • Kullanıcının bildirimi ve zil seslerini açıp açmadığı
  • Kullanıcının karşılama ekranı veya tanıtım ipuçlarını görüp görmediğini gösteren boolean bayrakları
    gibi…

Otomatik yedekleme, aşağıdaki sistem tarafından sağlanan verileri yedekleyebilecek şekilde programlanmıştır:

Normalde otomatik yedekleme, uygulamanıza sistem tarafından atanan dizinlerin çoğundaki dosyaları içermektedir:

  • Shared pref. dosyaları
  • getFilesDir() veya getDir(String, int) tarafından erişilebilen uygulamanızın dahili deposundaki dosyalar
  • SQLiteOpenHelper sınıfı ile oluşturulan dosyaları da içeren getDatabasePath(String) tarafından sağlanan dizindeki dosyalar
  • getExternalFilesDir(String) ile erişilen harici dizindeki dosyalar

getCacheDir(), getCodeCacheDir(), getNoBackupFilesDir() gibi metotlar tarafından erişilen geçici dizindeki dosyalar yedeklenmez.

Bu belirlenen dizinlerin bazılarını devre dışı bırakmak isteyebilirsiniz, veya başka dizinleri de yedeklemeye eklemek isteyebilirsiniz. Bunun için buradaki resmi döküman örneğine bakmanızı tavsiye ediyorum.

Tabii bu yedekleme olayı geliştiriciler için büyük kolaylıklar sağlıyor, fakat bir yandan da potansiyel güvenlik açığı doğuruyor. Android yedekleme servisi Android Debug Service (ADB) komutlarına bağlı olarak çalışır. Fakat bilindiği gibi ADB hackerlar için açık bir hedef, yani yedekleme verilerine başka birileri kod enjekte ederek kullanıcı verilerini çekebilir. Bunu engellemek için ise giden verileri şifreleyebilir, gelen verilerin de şifreleme testinden geçirerek kabul edebiliriz.