חסימת החנות

משתמשים רבים עדיין מנהלים את פרטי הכניסה שלהם כשהם מגדירים מכשיר Android חדש. התהליך הידני הזה יכול להיות מאתגר ולרוב פוגע בחוויית המשתמש. ה-API של חסימת החנויות הוא ספרייה שמופעלת על ידי שירותי Google Play. כך היא מאפשרת לאפליקציות לשמור פרטי כניסה של משתמשים, ללא המורכבות או הסיכון לאבטחה הכרוכות בשמירת סיסמאות של משתמשים.

ה-Block Store API מאפשר לאפליקציה לאחסן פרטי כניסה של המשתמש כדי שתהיה לו אפשרות מאוחר יותר לאמת אותם מחדש במכשיר חדש. כך ניתן לספק למשתמש חוויה חלקה יותר מפני שהם לא צריכים לראות מסך כניסה בהפעלה הראשונה של האפליקציה במכשיר החדש.

יתרונות השימוש ב-Block Store כוללים את היתרונות הבאים:

  • פתרון מוצפן לאחסון פרטי הכניסה למפתחים. כשפרטי הכניסה מוצפנים, הם מוצפנים.
  • שמירת אסימונים במקום שמות משתמשים וסיסמאות.
  • מניעת חיכוך מתהליכי הכניסה.
  • חוסכים משתמשים בנטל הניהול של סיסמאות מורכבות.
  • Google מאמתת את זהות המשתמש.

לפני שמתחילים

כדי להכין את האפליקציה, יש לבצע את השלבים המפורטים בקטעים הבאים.

הגדרת האפליקציה

בקובץ build.gradle ברמת הפרויקט, יש לכלול את מאגר Maven Google&#39 בקטעים buildscript ו-allprojects:

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

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

אפשר להוסיף את התלות ב-Google Play Services ל-Block Store API ל-module's build Gradle, שהוא בדרך כלל app/build.gradle:

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

איך זה עובד

'חסימת חנות' היא מנגנון כניסה מבוסס-הצפנה עם הצפנה מקצה לקצה שנבנה מעל תשתית הגיבוי והשחזור. בשלבים הבאים מוסבר איך אפליקציה שמשתמשת ב-Block Store תפעל:

  1. במהלך תהליך האימות של האפליקציה או בכל שלב לאחר מכן, תוכלו לשמור את אסימון האימות של המשתמש כדי לחסום את החנות לאחזור במועד מאוחר יותר.
  2. האסימון יאוחסן באופן מקומי ואפשר יהיה לגבות אותו בענן, אם זה אפשרי.
  3. הנתונים מועברים כשהמשתמש מתחיל את תהליך השחזור במכשיר חדש.
  4. אם המשתמש ישחזר את האפליקציה במהלך תהליך השחזור, האפליקציה תוכל לאחזר את האסימון השמור מ-Block Store במכשיר החדש.

האסימון נשמר

כשמשתמש נכנס לאפליקציה שלכם, אתם יכולים לשמור את אסימון האימות שנוצר עבור אותו משתמש כדי לחסום אותו. לשם כך, קוראים ל-setBytes() במופע של StoreBytesData.Builder כדי לאחסן את פרטי הכניסה של המשתמש למכשיר המקור. אחרי ששומרים את האסימון ב-Block Store, האסימון מוצפן ומאוחסן באופן מקומי במכשיר.

הדוגמה הבאה מראה איך לשמור את אסימון האימות במכשיר המקומי:

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)
        }

מתבצע אחזור של האסימון

מאוחר יותר, כשמשתמש עובר את תהליך השחזור במכשיר חדש, פלטפורמת Google Play Services מאמתת קודם את המשתמש ואז מאחזרת את הנתונים של חסימת החנות. המשתמש כבר הסכים לשחזר את נתוני האפליקציה כחלק מתהליך השחזור, ולכן לא נדרשת הסכמה נוספת. כשהמשתמש פותח את האפליקציה, אפשר לבקש מהאסימון את האפשרות לחסום את החנות באמצעות התקשרות retrieveBytes(). לאחר מכן, ניתן להשתמש באסימון המאוחזר כדי להשאיר את המשתמש מחובר במכשיר החדש.

הדוגמה הבאה מראה איך לאחזר את האסימון המוצפן שמאוחסן בעבר ב-Block Store:

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)
            }
}

הצפנה מקצה לקצה

כדי שההצפנה תהיה זמינה מקצה לקצה, במכשיר צריכה להיות מותקנת מערכת Android בגרסה 9 ואילך והמשתמש צריך להגדיר נעילת מסך במכשיר (קוד אימות, קו ביטול נעילה או סיסמה). תוכלו לבדוק אם ההצפנה תהיה זמינה במכשיר באמצעות התקשרות למספר isEndToEndEncryptionAvailable().

הדוגמה הבאה מראה איך לבדוק אם ההצפנה תהיה זמינה במהלך גיבוי בענן:

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

הפעלת הגיבוי בענן

כדי להפעיל את הגיבוי בענן, הוסיפו את השיטה setShouldBackupToCloud() לאובייקט StoreBytesData. אם מדי פעם מוגדר setShouldBackupToCloud() כ-True, תתבצע גיבוי מדי פעם ל-Store.

הדוגמה הבאה ממחישה איך מפעילים גיבוי בענן רק כשגיבוי בענן מוצפן.

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.")
          }
        }

איך בודקים?

השתמשו בשיטות הבאות במהלך הפיתוח כדי לבדוק את זרימות השחזור.

אותו התקנה או התקנה מחדש של המכשיר

אם המשתמש מפעיל את שירותי הגיבוי (ניתן לבדוק אותם בהגדרות ו-gt; Google > גיבוי), הנתונים של ה-Block Store קבועים בכל ההתקנה או ההתקנה מחדש של האפליקציה.

כך בודקים:

  1. משלבים את ה-API של BlockStore באפליקציית הבדיקה.
  2. משתמשים באפליקציית הבדיקה כדי להפעיל את ה-API של BlockStore כדי לאחסן את הנתונים.
  3. מסירים את האפליקציה לבדיקה ומתקינים אותה מחדש באותו מכשיר.
  4. יש להשתמש באפליקציית הבדיקה כדי להפעיל את ה-API של BlockStore כדי לאחזר את הנתונים.
  5. ודאו שהבייטים שאוחזרו זהים לנתונים המאוחסנים לפני הסרת ההתקנה.

מכשיר למכשיר

ברוב המקרים, פעולה זו תדרוש איפוס להגדרות המקוריות של מכשיר היעד. לאחר מכן, תוכלו להזין את תהליך השחזור האלחוטי של Android או את שחזור הכבלים של Google (למכשירים נתמכים).

שחזור בענן

  1. משלבים את ה-API של Blockstore באפליקציית הבדיקה. צריך לשלוח את האפליקציה לבדיקה לחנות Play.
  2. במכשיר המקור, השתמשו באפליקציית הבדיקה כדי להפעיל את ה-API של Blockstore כדי לאחסן את הנתונים שלכם, כאשר הפרמטר BackBackToCloud מוגדר ל-True.
  3. למכשירי O ומעלה, אפשר להפעיל גיבוי בענן באופן ידני: עוברים אל הגדרות > Google > גיבוי, לוחצים על הלחצן "גיבוי עכשיו".
    1. כדי לוודא שהגיבוי בענן של Store Store הסתיים, אפשר:
      1. אחרי שהגיבוי מסתיים, מחפשים את שורות היומן עם התג "CloudSyncBpTkSvc".
      2. אתם אמורים לראות שורות כמו אלה: "......, CloudSyncBpTkSvc: Sync Result: SUCCESS, ..., upload size: XXX bytes ..."
    2. אחרי גיבוי בענן של חנות בענן, יש תקופה של 5 דקות "קירור". בתוך 5 דקות, לחיצה על הלחצן 'גיבוי עכשיו' לא תפעיל גיבוי נוסף בענן של חנות ה-בלוק.
  4. מאפסים את מכשיר היעד להגדרות המקוריות ועוברים בתהליך של שחזור בענן. בוחרים אם לשחזר את האפליקציה לבדיקה במהלך תהליך השחזור. כאן תוכלו לקרוא מידע נוסף על תהליכי שחזור ענן נתמכים.
  5. במכשיר היעד, השתמשו באפליקציית הבדיקה כדי להפעיל את ה-API של Blockstore כדי לאחזר את הנתונים.
  6. ודאו שהבייטים שאוחזרו זהים לאלה המאוחסנים במכשיר המקור.

דרישות למכשיר

הצפנה מקצה לקצה

  • הצפנה מקצה לקצה נתמכת במכשירים עם Android מגרסה 9 (API 29) ואילך.
  • כדי להפעיל הצפנה מקצה לקצה, יש להגדיר במכשיר נעילת מסך עם קוד אימות, קו ביטול נעילה או סיסמה.

תהליך שחזור מכשיר למכשיר

כדי לבצע שחזור ממכשיר למכשיר, יש צורך במכשיר מקור ובמכשיר יעד. אלה יהיו שני המכשירים שמעבירים נתונים.

כדי לגבות, מכשירי מקור צריכים להיות Android 6 (API 23) ואילך.

אפשר לטרגט מכשירי Android 9 (API 29) ואילך כדי שיוכלו לשחזר אותם.

כאן אפשר למצוא מידע נוסף על תהליך שחזור המכשיר למכשיר.

תהליך הגיבוי והשחזור של Cloud

כדי לגבות ולשחזר בענן, יש צורך במכשיר מקור ובמכשיר יעד.

כדי לגבות, מכשירי מקור צריכים להיות Android 6 (API 23) ואילך.

מכשירי Target נתמכים בהתאם לספקים שלהם. אפשר להשתמש בתכונה הזו במכשירי Android מגרסה 9 (API 29) ומערכת הפעלה Android מגרסה 12 (API 31) ומעלה.