فروشگاه بلوک

بسیاری از کاربران هنوز اعتبار خود را هنگام تنظیم یک دستگاه اندروید جدید مدیریت می کنند. این فرآیند دستی می تواند چالش برانگیز باشد و اغلب منجر به تجربه کاربری ضعیف می شود. Block Store API، کتابخانه‌ای که توسط سرویس‌های Google Play پشتیبانی می‌شود، به نظر می‌رسد این مشکل را با ارائه راهی برای برنامه‌ها برای ذخیره اعتبار کاربر بدون پیچیدگی یا خطر امنیتی مرتبط با ذخیره گذرواژه‌های کاربر، حل کند.

Block Store API به برنامه شما اجازه می‌دهد تا اطلاعات کاربری را ذخیره کند که بعداً می‌تواند برای احراز هویت مجدد کاربران در دستگاه جدید بازیابی کند. این به ارائه تجربه یکپارچه‌تر برای کاربر کمک می‌کند، زیرا هنگام راه‌اندازی برنامه شما برای اولین بار در دستگاه جدید، نیازی به دیدن صفحه ورود به سیستم ندارد.

مزایای استفاده از Block Store شامل موارد زیر است:

  • راه حل ذخیره سازی اعتبار رمزگذاری شده برای توسعه دهندگان. اعتبارنامه ها در صورت امکان رمزگذاری می شوند.
  • به جای نام کاربری و رمز عبور، توکن ها را ذخیره کنید.
  • اصطکاک را از جریان ورود به سیستم حذف کنید.
  • کاربران را از بار مدیریت رمزهای عبور پیچیده نجات دهید.
  • گوگل هویت کاربر را تایید می کند.

قبل از اینکه شروع کنی

برای آماده سازی اپلیکیشن خود، مراحل زیر را انجام دهید.

برنامه خود را پیکربندی کنید

در فایل 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 یک مکانیسم ورود به سیستم مبتنی بر توکن است که رمزگذاری شده و در بالای زیرساخت پشتیبان گیری و بازیابی ساخته شده است. مراحل زیر نحوه عملکرد برنامه‌ای که از Block Store استفاده می‌کند نشان می‌دهد:

  1. در طول جریان احراز هویت برنامه یا هر زمانی پس از آن، می‌توانید رمز تأیید اعتبار کاربر را برای بازیابی بعدی در فروشگاه Block ذخیره کنید.
  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 ابتدا کاربر را تأیید می‌کنند، سپس داده‌های Block Store شما را بازیابی می‌کنند. کاربر قبلاً موافقت کرده است که داده های برنامه شما را به عنوان بخشی از جریان بازیابی بازیابی کند، بنابراین نیازی به رضایت اضافی نیست. هنگامی که کاربر برنامه شما را باز می کند، می توانید با فراخوانی retrieveBytes() توکن خود را از Block Store درخواست کنید. سپس رمز بازیابی شده می تواند برای حفظ ورود کاربر در دستگاه جدید استفاده شود.

نمونه زیر نحوه بازیابی رمز رمزگذاری شده را نشان می دهد که قبلاً با 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)
            }
}

رمزگذاری انتها به انتها

برای اینکه رمزگذاری سرتاسر در دسترس باشد، دستگاه باید دارای اندروید 9 یا بالاتر باشد و کاربر باید قفل صفحه (پین، الگو یا رمز عبور) را برای دستگاه خود تنظیم کرده باشد. با فراخوانی isEndToEndEncryptionAvailable() می توانید بررسی کنید که آیا رمزگذاری در دستگاه موجود است یا خیر.

نمونه زیر نشان می دهد که چگونه می توان تأیید کرد که آیا رمزگذاری در طول پشتیبان گیری ابری موجود است یا خیر:

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

پشتیبان گیری ابری را فعال کنید

برای فعال کردن پشتیبان‌گیری ابری، setShouldBackupToCloud() را به شی StoreBytesData خود اضافه کنید. زمانی که setShouldBackupToCloud() به عنوان true تنظیم شود، Block 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.")
          }
        }

چگونه تست کنیم

از روش های زیر در طول توسعه برای آزمایش جریان های بازیابی استفاده کنید.

همان دستگاه حذف/نصب مجدد

اگر کاربر خدمات پشتیبان‌گیری را فعال کند (می‌توان آن را در تنظیمات > Google > پشتیبان‌گیری بررسی کرد)، داده‌های فروشگاه مسدود کردن در سراسر برنامه حذف نصب/نصب مجدد باقی می‌ماند.

برای تست می توانید مراحل زیر را دنبال کنید:

  1. API BlockStore را در برنامه آزمایشی خود ادغام کنید.
  2. از برنامه آزمایشی برای فراخوانی BlockStore API برای ذخیره داده های خود استفاده کنید.
  3. برنامه آزمایشی خود را حذف نصب کنید و سپس برنامه خود را مجدداً در همان دستگاه نصب کنید.
  4. از برنامه آزمایشی برای فراخوانی API BlockStore برای بازیابی اطلاعات خود استفاده کنید.
  5. بررسی کنید که بایت های بازیابی شده مشابه بایت های ذخیره شده قبل از حذف هستند.

دستگاه به دستگاه

در بیشتر موارد، این به بازنشانی کارخانه ای دستگاه مورد نظر نیاز دارد. سپس می توانید جریان بازیابی بی سیم Android یا بازیابی کابل Google (برای دستگاه های پشتیبانی شده) را وارد کنید.

بازیابی ابر

  1. Blockstor API را در برنامه آزمایشی خود ادغام کنید. برنامه آزمایشی باید به Play Store ارسال شود.
  2. در دستگاه مبدأ، از برنامه آزمایشی برای فراخوانی API Blockstore برای ذخیره داده‌های خود استفاده کنید، در حالی که بایدBackUpToCloud روی true تنظیم شود.
  3. برای دستگاه‌های O و بالاتر، می‌توانید به صورت دستی یک پشتیبان‌گیری ابری Block Store را راه‌اندازی کنید: به تنظیمات > Google > پشتیبان‌گیری بروید ، روی دکمه «اکنون پشتیبان‌گیری» کلیک کنید.
    1. برای تأیید موفقیت آمیز بودن پشتیبان‌گیری ابری Block Store، می‌توانید:
      1. پس از اتمام پشتیبان‌گیری، خطوط گزارش را با برچسب «CloudSyncBpTkSvc» جستجو کنید.
      2. شما باید خطوطی مانند این را ببینید: "......، CloudSyncBpTkSvc: نتیجه همگام سازی: SUCCESS، ...، اندازه آپلود شده: XXX بایت ..."
    2. پس از پشتیبان‌گیری ابری Block Store، یک دوره 5 دقیقه‌ای «سرد شدن» وجود دارد. در عرض این 5 دقیقه، با کلیک بر روی دکمه "Backup Now" یک نسخه پشتیبان دیگر از Block Store ابری راه اندازی نمی شود.
  4. دستگاه مورد نظر را به حالت کارخانه بازنشانی کنید و از یک جریان بازیابی ابری عبور کنید. برای بازیابی برنامه آزمایشی خود در طول جریان بازیابی، انتخاب کنید. برای اطلاعات بیشتر درباره جریان‌های بازیابی ابر، به جریان‌های بازیابی ابر پشتیبانی‌شده مراجعه کنید.
  5. در دستگاه مورد نظر، از برنامه آزمایشی برای فراخوانی API Blockstore برای بازیابی اطلاعات خود استفاده کنید.
  6. بررسی کنید که بایت های بازیابی شده مشابه بایت های ذخیره شده در دستگاه مبدا باشد.

الزامات دستگاه

رمزگذاری End to End

  • رمزگذاری End to End در دستگاه‌های دارای Android 9 (API 29) و بالاتر پشتیبانی می‌شود.
  • دستگاه باید دارای قفل صفحه با پین، الگو یا رمز عبور باشد تا رمزگذاری سرتاسر فعال شود و داده‌های کاربر به درستی رمزگذاری شود.

جریان بازیابی دستگاه به دستگاه

بازیابی دستگاه به دستگاه به شما نیاز دارد که یک دستگاه منبع و یک دستگاه هدف داشته باشید. این دو دستگاهی هستند که داده ها را منتقل می کنند.

برای پشتیبان‌گیری، دستگاه‌های منبع باید دارای Android 6 (API 23) و بالاتر باشند.

دستگاه‌های دارای Android 9 (API 29) و بالاتر را هدف قرار دهید تا قابلیت بازیابی داشته باشند.

اطلاعات بیشتر در مورد جریان بازیابی دستگاه به دستگاه را می توانید در اینجا بیابید .

Cloud Backup and Restore Flow

پشتیبان گیری و بازیابی ابری به یک دستگاه منبع و یک دستگاه هدف نیاز دارد.

برای پشتیبان‌گیری، دستگاه‌های منبع باید دارای Android 6 (API 23) و بالاتر باشند.

دستگاه های هدف بر اساس فروشندگانشان پشتیبانی می شوند. دستگاه‌های پیکسل می‌توانند از Android 9 (API 29) از این ویژگی استفاده کنند و همه دستگاه‌های دیگر باید از Android 12 (API 31) یا بالاتر استفاده کنند.