پیاده سازی حساب های کاربری

دو نوع هویت کاربر اصلی برای ثبت‌نام‌های شرکتی Android وجود دارد: حساب‌های Google Play مدیریت‌شده و حساب‌های مدیریت‌شده Google. حساب‌های مدیریت‌شده Google Play دستگاه محور هستند، به این معنی که به هویت Google کاربر خاصی وابسته نیستند. در مقابل، حساب‌های مدیریت‌شده Google به هویت Google شرکتی کاربر پیوند داده می‌شود، که تجربه کاربر را با وارد نگه داشتن آنها در دستگاه‌هایشان بهبود می‌بخشد.

حساب‌های مدیریت‌شده Google Play قبلاً استاندارد بودند. با این حال، Google اکنون همه توسعه‌های جدید را تشویق می‌کند تا از جریان ثبت‌نام بهبودیافته استفاده کنند، که پیش‌فرض ایجاد حساب‌های مدیریت‌شده Google است.

در حالی که راهنمایی برای اجرای قدیمی‌تر در انتهای این سند برای زمینه ارائه شده است، همه توسعه‌های جدید باید از جریان ثبت نام جدید که در اینجا شرح داده شده است پیروی کنند.

نمای کلی

جریان ثبت نام بهبودیافته دستگاه، راه‌اندازی دستگاه را با استفاده از چندین مؤلفه جدید و تغییر نحوه پیاده‌سازی کنترل‌کننده‌های خط مشی دستگاه (DPC) ساده می‌کند. این رویکرد جدید به راه‌حل‌های سفارشی DPC برای ادغام با Android Management API (AMAPI) SDK و Android Device Policy برای انجام عملیات آماده‌سازی دستگاه و ثبت‌نام کاربر نیاز دارد.

AMAPI SDK API های لازم را برای تعامل با سیاست دستگاه Android در خود دستگاه فراهم می کند. در سمت سرور، راه‌حل‌های Enterprise Mobility Management (EMM) از Play EMM API برای تولید نشانه‌های ثبت‌نام مورد نیاز برای شروع فرآیند ثبت‌نام دستگاه استفاده می‌کنند.

برنامه Android Device Policy اکنون نقش اصلی را در مدیریت عملیات سمت دستگاه بر عهده می گیرد. AMAPI SDK برای مدیریت نصب و به روز رسانی های لازم در دستگاه استفاده می شود. Android Device Policy جریان احراز هویت کاربر را نیز در اختیار می گیرد و مستقیماً احراز هویت کاربر را مدیریت می کند و هویت کاربر را در اختیار EMM قرار می دهد. اگر گوگل به هر دلیلی نتواند کاربر را احراز هویت کند، یک حساب Google Play مدیریت شده جدید ایجاد می شود و به عنوان بازگشتی به دستگاه اضافه می شود.

یکپارچه سازی API

قبل از شروع، بررسی کنید که از آخرین نسخه کلاینت Play EMM API و AMAPI SDK استفاده می‌کنید.

راهنمای اجرای ثبت نام

این راهنما مراحل لازم برای اجرای ثبت نام را ارائه می دهد. این شامل آماده سازی محیط، مدیریت روش های مختلف ثبت نام و مدیریت چرخه عمر دستگاه می شود.

محیط را آماده کنید

قبل از شروع تنظیمات حساب، لازم است محیط دستگاه را آماده کنید. این آماده‌سازی مستلزم به‌روزرسانی فروشگاه Play به آخرین نسخه آن و نصب بی‌صدا خط‌مشی دستگاه Android ( com.google.android.apps.work.clouddpc ) بر روی دستگاه است. نصب خط مشی دستگاه Android ضروری است زیرا اجزای حیاتی فرآیند تنظیم حساب را در خود جای داده است. EMM ها نیازی به آماده سازی محیط دستی ندارند. در عوض، آنها باید از EnvironmentClient استفاده کنند، همانطور که در نمونه های کد ارائه شده مستند شده و به آن پایبند باشند.

کد نمونه

قبل از اینکه بتوانید از AccountSetup API برای اضافه کردن حساب کاری روی دستگاه استفاده کنید، DPC باید ابتدا بررسی کند که محیط دستگاه آماده است.

  • از EnvironmentClientFactory برای نمونه سازی EnvironmentClient و فراخوانی prepareEnvironment یا prepareEnvironmentAsync استفاده کنید.

    val notificationReceiverServiceName = ComponentName(context,
    NotificationReceiver::class.java)
    
    // An EMM should implement android.app.admin.DeviceAdminReceiver and use that
    // class to instantiate a ComponentName
    
    val admin = ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java)
    
    EnvironmentClientFactory.create(context)
        .prepareEnvironment(
            PrepareEnvironmentRequest.builder()
                .setRoles(
                    listOf(
                        Role.builder().setRoleType(
                            Role.RoleType.DEVICE_POLICY_CONTROLLER
                        ).build()
                    )
                )
        .setAdmin(admin)
                .build(),
              notificationReceiverServiceName,
            )
    
    [Proceed with AccountSetup]
    
    

این عملیات ممکن است چند ثانیه یا چند دقیقه طول بکشد، زیرا ممکن است برنامه‌ها برای تأیید یک محیط کاری مناسب نصب یا به‌روزرسانی شوند. گوگل توصیه می‌کند این فرآیند را هر چه زودتر در پس‌زمینه شروع کنید و در زمانی که کاربر منتظر است، رابط کاربری مناسب را نشان دهید. پس از اتمام عملیات، دستگاه برای DPC برای استفاده از AccountSetup API آماده است.

جریان ثبت نام

EMM ها باید استفاده از users.generateAuthenticationToken() و users.insert() را برای همه دستگاه ها متوقف کنند. درعوض، EMM ها باید API روی دستگاه را برای احراز هویت کاربر نهایی فراخوانی کنند. API جدید userId و email به DPC برمی گرداند. اگر Google نتواند کاربر را احراز هویت کند، یک حساب Google Play مدیریت شده ایجاد و به دستگاه اضافه می شود. در این صورت گوگل userId آن حساب را برمی گرداند.

گوگل اکنون استفاده از توکن های ثبت نام را معرفی می کند که باید به API احراز هویت منتقل شوند. EMM ها زمان و نحوه ایجاد رمز را تعیین می کنند و می تواند بخشی از بار ثبت نام موجود باشد (مثلاً یک کد QR یا پیکربندی Zero-touch).

با این حال، گوگل توصیه می‌کند که توکن در صورت تقاضا ایجاد کنید و API موجود برای حساب‌های مدیریت‌شده Google Play را با API جدید جایگزین کنید تا تغییرات را به حداقل برسانید.

ادغام DPC معمولی با APIهای قبلی
شکل 1. ادغام معمولی DPC با APIهای قبلی
نمونه ادغام DPC با API های جدید برای دستگاه های بدون کاربر
شکل 2. مثال ادغام DPC با API های جدید برای دستگاه های بدون کاربر
مثال ادغام DPC با API های جدید برای دستگاه های کاربر
شکل 3. مثال ادغام DPC با API های جدید برای دستگاه های کاربر

جریان ثبت نام DPC سفارشی بهبود یافته شامل مراحل زیر است:

  1. ایجاد رمز ثبت نام: EMM یک رمز ثبت نام با استفاده از Play EMM API ایجاد می کند.
  2. Prepare Environment: DPC سفارشی از جریان Prepare Environment برای تأیید اینکه دستگاه برای ثبت نام آماده است استفاده می کند.
  3. شروع ثبت نام: DPC سفارشی API startAccountSetup را در AMAPI SDK فراخوانی می کند و رمز ثبت نام را ارسال می کند. توجه: قبل از تماس با این API، DPC باید یا مالک دستگاه یا مالک نمایه باشد.
  4. راه‌اندازی فعالیت احراز هویت Google: در صورت لزوم، DPC سفارشی API launchAuthenticationActivity را در AMAPI SDK فراخوانی می‌کند و AccountSetupAttempt ارسال می‌کند. این یک فعالیت احراز هویت Google را شروع می‌کند و پس از احراز هویت موفق، کاربر را به DPC سفارشی برمی‌گرداند. کاربر همچنین می تواند از این فرآیند صرف نظر کند. در این صورت یک حساب Google Play مدیریت شده به دستگاه اضافه می شود. این گزینه را می توان با استفاده از googleAuthenticationOptions پیکربندی کرد.
  5. نهایی کردن ثبت نام: AMAPI SDK نتیجه ثبت نام را به DPC سفارشی اطلاع می دهد.
  6. فعال کردن سرویس‌های Google: هنگامی که دستگاه کاربر دارای حساب مدیریت‌شده Google با خط‌مشی‌های سازمانی مطابقت دارد، EMM باید Devices.setState() فراخوانی کند. این عمل دسترسی به خدمات Google را برای حساب موجود در دستگاه امکان پذیر می کند. بدون این تماس، فروشگاه Play و سایر سرویس‌های Google کار نمی‌کنند.

راه اندازی حساب - کد نمونه

  1. برای شروع تلاش برای راه‌اندازی حساب، برنامه تماس‌گیرنده می‌تواند از AccountSetupClient استفاده کند و روش startAccountSetup() یا startAccountSetupFuture() فراخوانی کند. برای اجرای نمونه، نمونه کد زیر را ببینید:

    // Create AccountSetupClient
    val client = AccountSetupClientFactory.create(
        this,
        activityResultRegistry
    )
    lifecycle.addObserver(client.lifecycleObserver)
    
    // Create adminComponent
    val notificationReceiver = ComponentName(this, AccountSetupNotificationReceiver::class.java)
    // Helper method to get enrollment token created with Play EMM API
    val enrollmentToken = getEnrollmentToken()
    val request =
              StartAccountSetupRequest.builder()
                  .setEnrollmentToken(enteredText)
                  .setNotificationReceiverServiceComponentName(notificationReceiver)
                  .setAdminComponentName(
                      ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java))
                  .build()
    try {
        val accountSetupAttempt = client.startAccountSetup(request)
        // handle attempt
    } catch (e: Exception) {
        // handle exception
    }
      ```
    
  2. رابط AccountSetupListener را پیاده سازی کنید و یک پیاده سازی برای نحوه مدیریت به روز رسانی های وضعیت دریافتی ارائه دهید.

  3. NotificationReceiverService گسترش دهید و نمونه AccountSetupListener ایجاد شده در مرحله 2 را با لغو getAccountSetupListener() ارائه دهید.

    // Handles account setup changes
    class AccountSetupNotificationReceiver :
          NotificationReceiverService(),
          AccountSetupListener {
    
        override fun getAccountSetupListener(): AccountSetupListener = this
    
        override fun onAccountSetupChanged(accountSetupAttempt:
      AccountSetupAttempt) {
    
            when (accountSetupAttempt.state.kind) {
                StateCase.ADDED_ACCOUNT -> {
                    val enterpriseAccount = state.addedAccount()
                    val userId = enterpriseAccount.userId
                    val deviceId = enterpriseAccount.deviceId
                    // Handle account added state.
    
                }
                StateCase.AUTHENTICATION_ACTIVITY_LAUNCH_REQUIRED -> {
                    val request = LaunchAuthenticationActivityRequest.builder()
                .setAccountSetupAttempt(accountSetupAttempt)
                .build();
                    // Send the attempt to the foreground activity to call:
                    accountSetupClient.launchAuthenticationActivity(request)
                }
                StateCase.ACCOUNT_SETUP_ERROR -> {
                    // Handle error state.
                    val failureReason = state.accountSetupError().failureReason
                }
                else -> {
                    // Handle unknown account setup attempt state.
                }
            }
        }
    }
    
      ```
    
  4. کلاس توسعه یافته NotificationReceiverService را به AndroidManifest.xml خود اضافه کنید و تأیید کنید که صادر شده است.

      <application>
        <service
            android:name = ".accountsetup.AccountSetupNotificationReceiver"
            android:exported = "true" />
      </application>
    

    اگر برنامه شما SDK 30 یا بالاتر را هدف قرار می‌دهد، یک عنصر query در AndroidManifest.xml مورد نیاز است تا مشخص کند که با ADP تعامل داشته باشد.

      <queries>
        <package android:name="com.google.android.apps.work.clouddpc" />
      </queries>
    

راهنمای تست

این بخش مجموعه ای از دستورالعمل ها و بهترین روش ها را برای آزمایش پیاده سازی شما ارائه می دهد.

Test PrepareEnvironment

  1. دریافت وضعیت فعلی دستگاه: EMM اجرا می شود

    adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionName
    

    برای دریافت نسخه خط مشی دستگاه Android موجود در دستگاه. اگر خط مشی دستگاه Android نصب نشده باشد، خروجی خالی انتظار می رود.

  2. یکپارچه سازی PrepareEnvironment: DPC سفارشی API prepareEnvironment در AMAPI SDK فراخوانی می کند و درخواست صحیح را ارسال می کند.

  3. Await PrepareEnvironment نتیجه: DPC سفارشی منتظر می ماند تا prepareEnvironment کامل شود.

  4. تأیید موفقیت PrepareEnvironment: پس از تکمیل، EMM دوباره اجرا می شود

    adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionName
    

    این بار نسخه Android Device Policy باید بالاتر از مرحله 1 باشد.

احراز هویت حساب Google را آزمایش کنید

  1. ایجاد شرکت آزمایشی: EMM یک دامنه آزمایشی شرکت Google ایجاد می‌کند که به یک EMM آزمایشی مرتبط است، با enterprises.generateSignupUrl .
  2. فعال کردن احراز هویت Google: EMM احراز هویت Google را برای شرکت آزمایشی با پیروی از این دستورالعمل‌ها در کنسول Google Admin فعال می‌کند.
  3. ایجاد رمز ثبت نام: EMM با استفاده از Play EMM API با نوع userDevice یک رمز ثبت نام ایجاد می کند.
  4. شروع ثبت نام: DPC سفارشی API startAccountSetup را در AMAPI SDK فراخوانی می کند و رمز ثبت نام را ارسال می کند.
  5. فعالیت راه‌اندازی مورد نیاز: AMAPI SDK به DPC سفارشی اطلاع می‌دهد که یک فعالیت باید برای احراز هویت کاربر راه‌اندازی شود.
  6. احراز هویت کاربر: DPC سفارشی برای شروع فعالیت، launchAuthenticationActivity فراخوانی می کند. کاربر با یک حساب Google مدیریت شده (بخشی از شرکت ایجاد شده در مرحله 1) احراز هویت می کند.
  7. نهایی کردن ثبت نام: AMAPI SDK نتیجه ثبت نام را به DPC سفارشی اطلاع می دهد.

رد شدن از احراز هویت Google را آزمایش کنید

ما از تنظیمات قبلی استفاده خواهیم کرد.

این بار، در مرحله 7، کاربر به جای احراز هویت با حساب Google خود، Skip را فشار می دهد. ثبت نام با یک حساب سرویس در دستگاه (یعنی AuthenticationType ناشناس است) با موفقیت کامل شد.

دستگاه های بدون کاربر را تست کنید

هنگامی که احراز هویت Google غیرفعال است، جریان ثبت نام سفارشی DPC بهبود یافته از مراحل زیر استفاده می کند:

  1. ایجاد یک شرکت آزمایشی: این می تواند همان شرکتی باشد که قبلا ایجاد شده بود.
  2. ایجاد رمز ثبت نام: EMM با استفاده از Play EMM API با نوع userlessDevice یک رمز ثبت نام ایجاد می کند.
  3. شروع ثبت نام: DPC سفارشی API startAccountSetup را در AMAPI SDK فراخوانی می کند و رمز ثبت نام را ارسال می کند.
  4. نهایی کردن ثبت نام: AMAPI SDK نتیجه ثبت نام را به DPC سفارشی اطلاع می دهد.