חסימת החנות

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

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

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

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

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

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

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

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

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

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

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

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

איך זה עובד

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

  1. בתהליך האימות של האפליקציה או בכל שלב לאחר מכן, אפשר לאחסן את אסימון האימות של המשתמש ל-Store כדי לאחזר אותו מאוחר יותר.
  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() לאחר מכן ניתן להשתמש באסימון שאוחזרה כדי למנוע מהמשתמש להיכנס לחשבון במכשיר החדש.

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

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.

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

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

איך מבצעים בדיקה?

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

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

אם המשתמש מפעיל את 'שירותי גיבוי' (ניתן לבדוק זאת בהגדרות > Google > גיבוי), נתוני 'חנות' נשמרים בהסרת התקנה/התקנה מחדש של האפליקציה.

אפשר לבצע את השלבים הבאים כדי לבדוק:

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

מכשיר למכשיר

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

שחזור בענן

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

דרישות ביחס למכשירים

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

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

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

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

על מנת לגבות אותם, מכשירי מקור חייבים לפעול באמצעות Android 6 (API 23) ומעלה.

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

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

תהליך הגיבוי והשחזור בענן

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

על מנת לגבות אותם, מכשירי מקור חייבים לפעול באמצעות Android 6 (API 23) ומעלה.

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