Blok Mağaza

Birçok kullanıcı, yeni bir Android cihazı kurarken hala kendi kimlik bilgilerini yönetir. Bu manuel süreç zorlu hale gelebilir ve genellikle kötü bir kullanıcı deneyimiyle sonuçlanır. Google Play hizmetleri tarafından desteklenen bir kitaplık olan Block Store API, uygulamaların kullanıcı şifrelerini kaydetmeyle ilgili karmaşıklık veya güvenlik riski olmadan kullanıcı kimlik bilgilerini kaydetmesi için bir yol sağlayarak bu sorunu çözmeye çalışıyor.

Block Store API, uygulamanızın, kullanıcıları yeni bir cihazda yeniden doğrulamak için daha sonra alabileceği kullanıcı kimlik bilgilerini depolamasına olanak tanır. Bu, uygulamanızı yeni cihazda ilk kez başlatırken bir oturum açma ekranı görmeleri gerekmediğinden, kullanıcı için daha sorunsuz bir deneyim sağlamaya yardımcı olur.

Block Store kullanmanın faydaları şunları içerir:

  • Geliştiriciler için şifreli kimlik bilgileri depolama çözümü. Kimlik bilgileri, mümkün olduğunda uçtan uca şifrelenir.
  • Kullanıcı adları ve şifreler yerine belirteçleri kaydedin.
  • Oturum açma akışlarından kaynaklanan sürtünmeyi ortadan kaldırın.
  • Kullanıcıları karmaşık parolaları yönetme yükünden kurtarın.
  • Google, kullanıcının kimliğini doğrular.

Sen başlamadan önce

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

Uygulamanızı yapılandırın

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

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

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

Block Store API'si için Google Play hizmetleri bağımlılığını, modülünüzün genellikle app/build.gradle olan Gradle derleme dosyasına ekleyin:

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

Nasıl çalışır

Blok deposu, uçtan uca şifrelenmiş ve yedekleme ve geri yükleme altyapısının üzerine kurulmuş, belirteç tabanlı bir oturum açma mekanizmasıdır. Aşağıdaki adımlar, Block Store'u kullanan bir uygulamanın nasıl çalışacağını özetlemektedir:

  1. Uygulamanızın kimlik doğrulama akışı sırasında veya daha sonra herhangi bir zamanda, daha sonra almak için kullanıcının kimlik doğrulama jetonunu Block Store'da saklayabilirsiniz.
  2. Belirteç yerel olarak depolanacak ve mümkün olduğunda uçtan uca şifrelenerek buluta yedeklenebilecek.
  3. Kullanıcı yeni bir cihazda bir 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, kaydedilen jetonu yeni cihazdaki Block Store'dan alabilir.

Belirteci kaydetme

Bir kullanıcı uygulamanızda oturum açtığında, o kullanıcı için oluşturduğunuz kimlik doğrulama jetonunu Block Store'a kaydedebilirsiniz. Bu, kullanıcının kimlik bilgilerini kaynak cihazda depolamak için StoreBytesData.Builder örneğinde setBytes() çağrılarak yapılır. Belirteci Block Store ile kaydettikten sonra belirteç şifrelenir ve cihazda yerel olarak depolanır.

Aşağıdaki örnek, kimlik doğrulama belirtecinin yerel cihaza nasıl kaydedileceğini gösterir:

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

Belirteci alma

Daha sonra, bir kullanıcı yeni bir cihazda geri yükleme akışından geçtiğinde, Google Play hizmetleri önce kullanıcıyı doğrular, ardından Block Store verilerinizi alır. Kullanıcı, geri yükleme akışının bir parçası olarak uygulama verilerinizi geri yüklemeyi zaten kabul etti, bu nedenle ek onay gerekmez. Kullanıcı uygulamanızı açtığında, retrieveBytes() Block Store'dan isteyebilirsiniz. Alınan belirteç daha sonra kullanıcının yeni cihazda oturum açmasını sağlamak için kullanılabilir.

Aşağıdaki örnek, daha önce Block Store ile depolanan şifreli jetonun nasıl alınacağını gösterir:

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ünü çalıştırıyor olması ve kullanıcının cihazı için bir ekran kilidi (PIN, desen veya şifre) ayarlamış olması gerekir. isEndToEndEncryptionAvailable() çağırarak cihazda şifrelemenin olup olmayacağını doğrulayabilirsiniz.

Aşağıdaki örnek, bulut yedeklemesi sırasında şifrelemenin kullanılabilir olup olmayacağının nasıl doğrulanacağını gösterir:

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

Bulut yedeklemeyi etkinleştir

Bulut yedeklemesini etkinleştirmek için StoreBytesData nesnenize setShouldBackupToCloud() yöntemini ekleyin. Block Store, setShouldBackupToCloud() true olarak ayarlandığında depolanan baytları buluta periyodik olarak yedekler.

Aşağıdaki örnek, yalnızca bulut yedeklemesi uçtan uca şifrelendiğinde bulut yedeklemenin nasıl etkinleştirileceğini gösterir:

val client = Blockstore.getClient(this)
val storeBytesDataBuilder = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)
        .build()
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.")
          }
        }

nasıl test edilir

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), Blok Mağaza verileri, uygulamanın kaldırılması/yeniden yüklenmesi boyunca kalıcı olur.

Test etmek için şu adımları takip edebilirsiniz:

  1. BlockStore API'sini test uygulamanıza entegre edin.
  2. Verilerinizi depolamak üzere BlockStore API'sini çağırmak için test uygulamasını kullanın.
  3. Test uygulamanızı kaldırın ve ardından uygulamanızı aynı cihaza yeniden yükleyin.
  4. Verilerinizi almak üzere BlockStore API'sini ç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, hedef cihazın fabrika ayarlarına sıfırlanmasını gerektirir. Ardından Android kablosuz geri yükleme akışına veya Google kablo geri yüklemesine (desteklenen cihazlar için) girebilirsiniz.

Bulut geri yükleme

  1. Blockstore API'sini test uygulamanıza entegre edin. Test uygulamasının Play Store'a gönderilmesi gerekiyor.
  2. Kaynak cihazda, mustBackUpToCloud true olarak ayarlanmış olarak verilerinizi depolamak için Blockstore API'sini çağırmak için test uygulamasını kullanın.
  3. O ve üzeri cihazlar için, bir Block Store bulut yedeklemesini manuel olarak tetikleyebilirsiniz: Ayarlar > Google > Yedekle seçeneğine 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 tamamlandıktan sonra, “CloudSyncBpTkSvc” etiketli günlük satırlarını arayın.
      2. Şuna benzer satırlar görmelisiniz: “......, CloudSyncBpTkSvc: senkronizasyon sonucu: BAŞARI, ..., yüklenen boyut: XXX bayt ..."
    2. Block Store bulut yedeklemesinden sonra 5 dakikalık bir "soğuma" süresi vardır. Bu 5 dakika içinde, “Şimdi Yedekle” düğmesine tıklamak başka bir Block Store bulut yedeklemesini tetiklemeyecektir.
  4. Hedef cihazı fabrika ayarlarına sıfırlayın ve bir bulut geri yükleme akışından geçin. Geri yükleme akışı sırasında test uygulamanızı geri yüklemek için seçin. Bulut geri yükleme akışları hakkında daha fazla bilgi için, bkz. Desteklenen bulut geri yükleme akışları .
  5. Hedef cihazda, verilerinizi almak üzere Blockstore API'sini çağırmak için test uygulamasını kullanın.
  6. Alınan baytların kaynak cihazda depolananlarla aynı olduğunu doğrulayın.