Mağaza Bloku

Pek çok kullanıcı yeni bir Android cihaz kurarken kendi kimlik bilgilerini yönetmeye devam etmektedir. Bu manuel işlem zor olabilir ve genellikle kötü bir kullanıcı deneyimine yol açar. Google Play Hizmetleri tarafından desteklenen bir kitaplık olan Block Store API'si, uygulamaların kullanıcı şifrelerini kaydetmenin karmaşıklık veya güvenlik riski olmadan kullanıcı kimlik bilgilerini kaydetmelerine olanak tanıyan bir yöntem sunarak bu sorunu çözmektedir.

Block Store API, uygulamanızın kullanıcı kimlik bilgilerini depolamasını sağlar. Bu kimlik bilgileri daha sonra yeni bir cihazda kullanıcıların kimliğini yeniden doğrulamak amacıyla alınabilir. Böylece, kullanıcılar yeni cihazda ilk kez başlatılırken oturum açma ekranı görmeleri gerekmediğinden, kullanıcı için daha akıcı bir deneyim sağlanır.

Block Store'u kullanmanın avantajlarından bazıları şunlardır:

  • Geliştiriciler için şifrelenmiş kimlik bilgisi depolama çözümü. Kimlik bilgileri mümkün olduğunda uçtan uca şifrelenir.
  • Kullanıcı adları ve şifreler yerine jetonları kaydedin.
  • Oturum açma akışlarındaki zorlukları ortadan kaldırın.
  • Kullanıcıları karmaşık şifreleri yönetme zahmetinden kurtarın.
  • Google, kullanıcının kimliğini doğrular.

Başlamadan önce

Uygulamanızı hazırlamak için aşağıdaki bölümlerde belirtilen adımları uygulayın.

Uygulamanızı yapılandırma

Proje düzeyindeki build.gradle dosyanıza Google's Maven deposunu hem buildscript hem de allprojects bölümlerinize ekleyin:

buildscript {
  repositories {
    google()
    mavenCentral()
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
  }
}

Block Store API için Google Play hizmetleri bağımlılığını, genellikle app/build.gradle olan module's Gradle derleme dosyanıza ekleyin:

dependencies {
  implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}

İşleyiş şekli

Block store, uçtan uca şifrelenmiş, yedekleme ve geri yükleme altyapısının üzerine oluşturulmuş jetona dayalı bir oturum açma mekanizmasıdır. Aşağıdaki adımlarda, Block Store'u kullanan bir uygulamanın nasıl çalıştığı açıklanmaktadır:

  1. Uygulamanızın kimlik doğrulama akışı sırasında veya daha sonra, kullanıcının kimlik doğrulama jetonunu daha sonra alması için Store'da Engelle bölümüne kaydedebilirsiniz.
  2. Jeton yerel olarak depolanır ve mümkün olduğunda uçtan uca şifrelenmiş buluta yedeklenebilir.
  3. Kullanıcı yeni bir cihazda geri yükleme akışı başlattığında veriler aktarılır.
  4. Kullanıcı, geri yükleme akışı sırasında uygulamanızı geri yüklerse uygulamanız yeni cihazdaki Block Store'dan kaydedilen jetonu alabilir.

Jeton kaydediliyor

Bir kullanıcı uygulamanızda oturum açtığında, bu kullanıcının Mağazayı Engellemesi için oluşturduğunuz kimlik doğrulama jetonunu kaydedebilirsiniz. Bunu, kullanıcının kimlik bilgilerini kaynak cihazda depolamak için bir StoreBytesData.Builder örneğinde setBytes() aranarak yapılır. Jetonu Block Store'da kaydettikten sonra jeton şifrelenir ve cihazda yerel olarak depolanır.

Aşağıdaki örnekte, kimlik doğrulama jetonunun yerel cihaza nasıl kaydedileceği gösterilmektedir:

val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)
        .build()
client.storeBytes(data)
        .addOnSuccessListener{ result ->
            Log.d(TAG, "Stored: ${result} bytes")
        }
        .addOnFailureListener { e ->
            Log.e(TAG, “Failed to store bytes”, e)
        }

Jeton alınıyor

Daha sonra, bir kullanıcı yeni bir cihazda geri yükleme akışını tamamladığında Google Play hizmetleri önce kullanıcıyı doğrular, ardından Engelleme Deposu verilerinizi alır. Kullanıcı, geri yükleme akışı kapsamında uygulama verilerinizi geri yüklemeyi zaten kabul etmiş olduğu için başka izin gerekmez. Kullanıcı uygulamanızı açtığında, retrieveBytes() numaralı telefonu arayarak Block Store'dan jeton isteğinde bulunabilirsiniz. Alınan jeton daha sonra kullanıcının yeni cihazda oturumunu açık tutmak için kullanılabilir.

Aşağıdaki örnekte, daha önce Block Store'da depolanan şifrelenmiş jetonun nasıl alınacağı gösterilmektedir:

val client = Blockstore.getClient(this)
client.retrieveBytes()
            .addOnSuccessListener { result ->
                Log.d(TAG, "Retrieved: ${String(result)}")
            }
            .addOnFailureListener { e ->
                Log.e(TAG, "Failed to retrieve bytes", e)
            }
}

Uçtan uca şifreleme

Uçtan uca şifrelemenin kullanılabilmesi için cihazın Android 9 veya sonraki bir sürümü çalıştırıyor olması ve kullanıcının cihazı için bir ekran kilidi (PIN, desen veya şifre) ayarlamış olması gerekir. Şifrelemenin cihazda kullanılabilir olup olmadığını doğrulamak için isEndToEndEncryptionAvailable() numaralı telefonu arayabilirsiniz.

Aşağıdaki örnekte, bulut yedekleme sırasında şifrelemenin kullanılıp kullanılamayacağını nasıl doğrulayacağınız gösterilmektedir:

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { result ->
          Log.d(TAG, "Will Block Store cloud backup be end-to-end encrypted? $result")
        }

Bulut yedeklemeyi etkinleştir

Bulut yedeklemeyi etkinleştirmek için setShouldBackupToCloud() yöntemini StoreBytesData nesnenize ekleyin. Block doğruca, setShouldBackupToCloud() Doğru olarak ayarlandığında depolanan baytları buluta düzenli olarak yedekler.

Aşağıdaki örnekte, yalnızca bulut yedekleme uçtan uca şifrelendiğinde bulut yedeklemenin nasıl etkinleştirileceği gösterilmektedir:

val client = Blockstore.getClient(this)
val storeBytesDataBuilder = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { isE2EEAvailable ->
          if (isE2EEAvailable) {
            storeBytesDataBuilder.setShouldBackupToCloud(true)
            Log.d(TAG, "E2EE is available, enable backing up bytes to the cloud.")

            client.storeBytes(storeBytesDataBuilder.build())
                .addOnSuccessListener { result ->
                  Log.d(TAG, "stored: ${result.getBytesStored()}")
                }.addOnFailureListener { e ->
                  Log.e(TAG, “Failed to store bytes”, e)
                }
          } else {
            Log.d(TAG, "E2EE is not available, only store bytes for D2D restore.")
          }
        }

Test etme

Geri yükleme akışlarını test etmek için geliştirme sırasında aşağıdaki yöntemleri kullanın.

Aynı cihazı kaldırma/yeniden yükleme

Kullanıcı, Yedekleme hizmetlerini etkinleştirirse (Ayarlar > Google > Yedekleme bölümünden kontrol edilebilir), uygulamanın mağazayı kaldırma/yeniden yükleme işlemi sırasında Mağazayı Engelle verileri kalıcıdır.

Test etmek için aşağıdaki adımları uygulayabilirsiniz:

  1. BlockStore API'yi test uygulamanıza entegre edin.
  2. Verilerinizi depolamak amacıyla BlockStore API'yi çağırmak için test uygulamasını kullanın.
  3. Test uygulamanızı kaldırıp uygulamanızı aynı cihazda yeniden yükleyin.
  4. Verilerinizi almak üzere BlockStore API'yi çağırmak için test uygulamasını kullanın.
  5. Alınan baytların kaldırma işleminden önce depolananlarla aynı olduğunu doğrulayın.

Cihazdan cihaza

Çoğu durumda, bu işlem için hedef cihazın fabrika ayarlarına sıfırlanması gerekir. Ardından Android kablosuz geri yükleme akışı veya Google kablo geri yükleme komutunu girebilirsiniz (desteklenen cihazlar için).

Buluta geri yükleme

  1. Blockstore API'yi test uygulamanıza entegre edin. Test uygulamasının Play Store'a gönderilmesi gerekir.
  2. Kaynak cihazda, verilerinizin depolanması için Blockstore API'yi çağıracak test uygulamasını kullanın.
  3. O ve sonraki cihazlar için, Engelle Store bulut yedeklemesini manuel olarak tetikleyebilirsiniz: Ayarlar > Google > Yedekleme'ye gidin, “Şimdi Yedekle” düğmesini tıklayın.
    1. Block Store bulut yedeklemesinin başarılı olduğunu doğrulamak için şunları yapabilirsiniz:
      1. Yedekleme bittikten sonra, “CloudSyncBpTkSvc” etiketine sahip günlük satırlarını arayın.
      2. Aşağıdaki gibi satırlar görürsünüz: "......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., uploaded size: XXX bytes ...”
    2. Block Store bulut yedeğinden sonra 5 dakikalık bir "soğutma" süresi vardır. Bu 5 dakika içinde, "Şimdi Yedekle" düğmesini tıklamak başka bir Block Store bulut yedeklemesini tetiklemez.
  4. Hedef cihazı fabrika ayarlarına sıfırlayın ve bulut geri yükleme akışından geçin. Geri yükleme akışı sırasında test uygulamanızı geri yüklemeyi seçin. Bulut geri yükleme akışları hakkında daha fazla bilgi için Desteklenen bulut geri yükleme akışları başlıklı makaleye bakın.
  5. Hedef cihazda, verilerinizi almak üzere Blockstore API'yi çağırmak için test uygulamasını kullanın.
  6. Alınan baytların kaynak cihazda depolananlarla aynı olduğunu doğrulayın.

Cihaz Gereksinimleri

Uçtan Uca Şifreleme

  • Uçtan Uca şifreleme, Android 9 (API 29) ve sonraki sürümleri çalıştıran cihazlarda desteklenir.
  • Uçtan uca şifrelemenin etkinleştirilmesi için cihazda PIN, desen veya şifre içeren bir ekran kilidi ayarlanmış olmalıdır ve kullanıcının verileri doğru şekilde şifrelenmelidir.

Cihazdan Cihaza Geri Yükleme Akışı

Cihazdan cihaza geri yükleme işlemi için hem kaynak hem de hedef cihazınızın olması gerekir. Bunlar, veri aktaran iki cihaz olacaktır.

Kaynak cihazların yedekleme için Android 6 (API 23) ve sonraki bir sürümü çalıştırıyor olması gerekir.

Android 9 (API 29) ve sonraki sürümleri çalıştıran cihazları geri yükleyebilmek için hedefleyin.

Cihazdan cihaza geri yükleme akışı hakkında daha fazla bilgiyi burada bulabilirsiniz.

Bulutta Yedekleme ve Geri Yükleme Akışı

Bulut yedekleme ve geri yükleme işlemi için bir kaynak cihaz ile bir hedef cihaz gereklidir.

Kaynak cihazların yedekleme için Android 6 (API 23) ve sonraki bir sürümü çalıştırıyor olması gerekir.

Hedef cihazlar, tedarikçilerine bağlı olarak desteklenir. Pixel cihazlarda bu özellik, Android 9 (API 29) tarafından kullanılabilir. Diğer tüm cihazlarda Android 12 (API 31) veya sonraki bir sürüm yüklü olmalıdır.