חסימת החנות

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

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

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

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

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

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

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

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

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

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

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

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

איך זה עובד

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

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

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

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

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

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. משלבים את BlockStore API באפליקציית הבדיקה.
  2. משתמשים באפליקציית הבדיקה כדי להפעיל את ה-BlockStore API לצורך אחסון הנתונים שלכם.
  3. מסירים את האפליקציה לבדיקה ומתקינים אותה מחדש באותו מכשיר.
  4. משתמשים באפליקציית הבדיקה כדי להפעיל את ה-API של BlockStore כדי לאחזר את הנתונים שלכם.
  5. חשוב לוודא שהבייטים שאוחזרו זהים לנתונים המאוחסנים לפני הסרת ההתקנה.

מכשיר למכשיר

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

שחזור בענן

  1. משלבים את ה-API של Blockstore באפליקציית הבדיקה. צריך לשלוח את אפליקציית הבדיקה לחנות Play.
  2. במכשיר המקור, משתמשים באפליקציית הבדיקה כדי להפעיל את ה-Blockstore API כדי לאחסן את הנתונים שלכם, כאשר הערך BackBackToCloud מוגדר ל-True.
  3. במכשירים O ודגמים אחרים, ניתן להפעיל באופן ידני גיבוי של Cloud Store בענן: עוברים אל Settings (הגדרות) > Google > Backup (גיבוי > גיבוי) ולוחצים על הלחצן "Backup Now" (גיבוי עכשיו).
    1. כדי לוודא שהגיבוי בענן של Cloud Store בוצע בהצלחה, תוכלו:
      1. אחרי שהגיבוי מסתיים, מחפשים שורות ביומן עם התג 'CloudSyncBpTkSvc'.
      2. אתם אמורים לראות קווים כאלה: '......, CloudSyncBpTkSvc: תוצאה סנכרון: SUCCESS, ..., גודל העלאה: XXX בייטים ...'
    2. לאחר גיבוי בענן של 'חנות בענן', יש תקופת 'קירור' של 5 דקות. תוך 5 דקות, אם תלחצו על הלחצן 'להפעלת הגיבוי' לא יופעל גיבוי נוסף של Cloud Store בענן.
  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) ומעלה.