يساعد هذا الدليل موفّري إدارة الخدمات الجوّالة للمؤسسات (EMM) في دمج برنامج "التسجيل بدون لمس" في وحدة التحكّم الخاصة بهم. يمكنك مواصلة القراءة لمعرفة المزيد حول التسجيل والاطّلاع على نصائح حول أفضل الممارسات لمساعدة وحدة التحكّم في سياسة الجهاز (DPC) على توفير الأجهزة. إذا كان لديك DPC، ستتعرّف على أفضل الممارسات عند توفير الأجهزة وستحصل على نصائح للمساعدة في التطوير والاختبار.
ميزات لمشرفي تكنولوجيا المعلومات
استخدِم واجهة برمجة التطبيقات الخاصة بالعملاء لمساعدة مشرفي تكنولوجيا المعلومات في إعداد برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" مباشرةً من وحدة التحكّم. في ما يلي بعض المهام التي يمكن لمشرف تكنولوجيا المعلومات إكمالها في وحدة التحكّم:
- إنشاء إعدادات برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" وتعديلها وحذفها استنادًا إلى سياسات الأجهزة الجوّالة
- اضبط إعدادًا تلقائيًا لكي يوفّر تطبيق DPC الأجهزة المستقبلية التي تشتريها المؤسسة.
- تطبيق إعدادات فردية على الأجهزة أو إزالة الأجهزة من برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة"
لمزيد من المعلومات عن برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة"، يُرجى الاطّلاع على نظرة عامة.
المتطلبات الأساسية
قبل إضافة برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" إلى وحدة تحكّم إدارة الخدمات الجوّالة للمؤسسات (EMM)، تأكَّد من أنّ الحلّ الذي تستخدمه يتيح ما يلي:
- يجب أن يوفّر حلّ إدارة الخدمات الجوّالة للمؤسسات جهاز Android 8.0+ (Pixel 7.1+) مملوكًا للشركة في وضع الإدارة الكاملة. يمكن توفير أجهزة Android 10 والإصدارات الأحدث المملوكة للشركة كمُدارة بالكامل أو مع ملف عمل.
- بما أنّ برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" ينزّل تطبيقًا لإدارة الأجهزة الجوّالة (MDM) ويثبّته تلقائيًا، يجب أن يكون تطبيق إدارة الأجهزة الجوّالة متاحًا على Google Play. نحتفظ بقائمة من سياسات DPC المتوافقة التي يمكن لمشرفي تكنولوجيا المعلومات إعدادها باستخدام واجهة برمجة التطبيقات الخاصة بالعملاء أو البوابة. أرسِل طلبًا لتعديل المنتج من خلال منتدى موفّري خدمة إدارة الأجهزة الجوّالة للمؤسسات (EMM) لإضافة رمز سياسة الجهاز إلى القائمة.
- يحتاج العملاء إلى حساب على برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" لاستدعاء واجهة برمجة التطبيقات الخاصة بالعملاء. يتولّى أحد مورّدي الشركاء إعداد حساب لمؤسسة مشرف تكنولوجيا المعلومات عندما تشتري المؤسسة أجهزتها.
- يجب أن يكون الجهاز متوافقًا مع خدمات Google للأجهزة الجوّالة (GMS) ويجب تفعيل "خدمات Google Play" في جميع الأوقات ليعمل برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" بشكل صحيح.
استدعاء واجهة برمجة التطبيقات
يمنح مستخدمو وحدة التحكّم (باستخدام حساباتهم على Google) الإذن لطلبات واجهة برمجة التطبيقات بالوصول إلى واجهة برمجة التطبيقات الخاصة بالعملاء. يختلف هذا المسار عن عملية منح الإذن التي تجريها لواجهات برمجة التطبيقات الأخرى الخاصة بإدارة الخدمات الجوّالة للمؤسسات. اطّلِع على مقالة تفويض لمعرفة كيفية إجراء ذلك في تطبيقك.
بنود خدمة الاسم المعرِّف
على المستخدمين قبول أحدث بنود الخدمة قبل استدعاء واجهة برمجة التطبيقات. إذا عرض طلب البيانات من واجهة برمجة التطبيقات رمز حالة HTTP 403 Forbidden وكان نص الرد يتضمّن TosError، اطلب من المستخدم قبول بنود الخدمة من خلال تسجيل الدخول إلى بوابة التسجيل بدون لمس. يعرض المثال أدناه إحدى الطرق التي يمكنك اتّباعها لإجراء ذلك:
Java
// Authorize this method call as a user that hasn't yet accepted the ToS. final String googleApiFormatHttpHeader = "X-GOOG-API-FORMAT-VERSION"; final String googleApiFormatVersion = "2"; final String tosErrorType = "type.googleapis.com/google.android.device.provisioning.v1.TosError"; try { // Send an API request to list all the DPCs available including the HTTP header // X-GOOG-API-FORMAT-VERSION with the value 2. Import the exception: // from googleapiclient.errors import HttpError AndroidProvisioningPartner.Customers.Dpcs.List request = service.customers().dpcs().list(customerAccount); request.getRequestHeaders().put(googleApiFormatHttpHeader, googleApiFormatVersion); CustomerListDpcsResponse response = request.execute(); return response.getDpcs(); } catch (GoogleJsonResponseException e) { // Get the error details. In your app, check details exists first. ArrayList<Map> details = (ArrayList<Map>) e.getDetails().get("details"); for (Map detail : details) { if (detail.get("@type").equals(tosErrorType) && (boolean) detail.get("latestTosAccepted") != true) { // Ask the user to accept the ToS. If they agree, open the portal in a browser. // ... } } return null; }
NET.
// Authorize this method call as a user that hasn't yet accepted the ToS. try { var request = service.Customers.Dpcs.List(customerAccount); CustomerListDpcsResponse response = request.Execute(); return response.Dpcs; } catch (GoogleApiException e) { foreach (SingleError error in e.Error?.Errors) { if (error.Message.StartsWith("The user must agree the terms of service")) { // Ask the user to accept the ToS. If they agree, open the portal in a browser. // ... } } }
Python
# Authorize this method call as a user that hasn't yet accepted the ToS. tos_error_type = ('type.googleapis.com/' 'google.android.device.provisioning.v1.TosError') portal_url = 'https://enterprise.google.com/android/zero-touch/customers' # Send an API request to list all the DPCs available including the HTTP # header X-GOOG-API-FORMAT-VERSION with the value 2. Import the exception: # from googleapiclient.errors import HttpError try: request = service.customers().dpcs().list(parent=customer_account) request.headers['X-GOOG-API-FORMAT-VERSION'] = '2' response = request.execute() return response['dpcs'] except HttpError as err: # Parse the JSON content of the error. In your app, check ToS exists first. error = json.loads(err.content) tos_error = error['error']['details'][0] # Ask the user to accept the ToS (not shown here). If they agree, then open # the portal in a browser. if (tos_error['@type'] == tos_error_type and tos_error['latestTosAccepted'] is not True): if raw_input('Accept the ToS in the zero-touch portal? y|n ') == 'y': webbrowser.open(portal_url)
إذا كان عميل Google API يتيح عرض أخطاء مفصّلة (Java أو Python أو طلبات HTTP)، أدرِج عنوان HTTP X-GOOG-API-FORMAT-VERSION مع القيمة 2 في طلباتك. إذا كان برنامجك لا يتيح عرض أخطاء مفصّلة (مثل .NET وغيرها)، يجب أن تكون رسالة الخطأ مطابقة.
عندما نعدّل بنود الخدمة في المستقبل، إذا اتّبعت هذا النهج، سيوّجه تطبيقك المستخدم إلى إعادة قبول بنود الخدمة الجديدة.
رابط إلى البوابة
يستخدم مشرفو تكنولوجيا المعلومات بوابة برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" لإدارة المستخدمين في مؤسساتهم، ولا يمكنك تقديم هذه الخدمة من خلال واجهة برمجة التطبيقات الخاصة بالعملاء. يمكن لمشرفي تكنولوجيا المعلومات أيضًا إدارة الأجهزة والإعدادات باستخدام البوابة. إذا كنت بحاجة إلى إنشاء رابط يؤدي إلى البوابة من وحدة التحكّم أو في مستنداتك، استخدِم عنوان URL التالي:
https://enterprise.google.com/android/zero-touch/customers
ننصحك بإبلاغ مشرفي تكنولوجيا المعلومات بأنّه سيُطلب منهم تسجيل الدخول باستخدام حساباتهم على Google.
تسجيل الجهاز
برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" هو آلية لتسجيل الأجهزة، وهو يشبه عملية التسجيل باستخدام NFC أو رمز الاستجابة السريعة. يجب أن تتوافق وحدة التحكّم مع الأجهزة المُدارة، ويجب أن تكون وحدة التحكّم بسياسة الجهاز (DPC) قادرة على العمل في وضع الجهاز المُدار بالكامل.
يتوفّر برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" على الأجهزة المتوافقة التي تعمل بالإصدار Android 8.0 أو الإصدارات الأحدث. على مشرفي تكنولوجيا المعلومات شراء الأجهزة المتوافقة من مورّد معتمد. يمكن لوحدة التحكّم تتبُّع الأجهزة التي يملكها مشرف تكنولوجيا المعلومات والمتاحة لبرنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" من خلال طلب customers.devices.list.
في ما يلي ملخّص لطريقة التسجيل:
- يسجّل الجهاز الدخول إلى أحد خوادم Google عند بدء التشغيل لأول مرة (أو بعد إعادة الضبط على الإعدادات الأصلية) للاستفادة من برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة".
- إذا طبَّق مشرف تكنولوجيا المعلومات إعدادًا على الجهاز، سيشغِّل برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" معالج إعداد Android للأجهزة المُدارة بالكامل، وسيخصّص الشاشات باستخدام البيانات الوصفية من الإعداد.
- ينزّل برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" تطبيق DPC ويثبّته من Google Play.
- يتلقّى تطبيق DPC الغرض
ACTION_PROVISION_MANAGED_DEVICEويوفّر الجهاز.
في حال عدم توفّر اتصال بالإنترنت، يتم إجراء عملية التحقّق عند توفّر اتصال. لمزيد من المعلومات حول توفير الأجهزة باستخدام برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة"، يُرجى الاطّلاع على توفير الأجهزة أدناه.
الإعدادات التلقائية
يساعد برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" مشرفي تكنولوجيا المعلومات بشكل أفضل عندما يضبطون إعدادًا تلقائيًا مطبّقًا على أي أجهزة جديدة تشتريها مؤسستهم. ننصحك بضبط إعدادات تلقائية من وحدة التحكّم إذا لم يتم ضبطها. يمكنك التحقّق من قيمة customers.configurations.isDefault لمعرفة ما إذا كانت إحدى المؤسسات قد ضبطت إعدادًا تلقائيًا.
يوضّح المثال أدناه كيفية ضبط إعداد حالي كإعداد تلقائي:
Java
// Send minimal data with the request. Just the 2 required fields. // targetConfiguration is an existing configuration that we want to make the default. Configuration configuration = new Configuration(); configuration.setIsDefault(true); configuration.setConfigurationId(targetConfiguration.getConfigurationId()); // Call the API, including the FieldMask to avoid setting other fields to null. AndroidProvisioningPartner.Customers.Configurations.Patch request = service .customers() .configurations() .patch(targetConfiguration.getName(), configuration); request.setUpdateMask("isDefault"); Configuration results = request.execute();
NET.
// Send minimal data with the request. Just the 2 required fields. // targetConfiguration is an existing configuration that we want to make the default. Configuration configuration = new Configuration { IsDefault = true, ConfigurationId = targetConfiguration.ConfigurationId, }; // Call the API, including the FieldMask to avoid setting other fields to null. var request = service.Customers.Configurations.Patch(configuration, targetConfiguration.Name); request.UpdateMask = "IsDefault"; Configuration results = request.Execute();
Python
# Send minimal data with the request. Just the 2 required fields. # target_configuration is an existing configuration we'll make the default. configuration = { 'isDefault': True, 'configurationId': target_configuration['configurationId']} # Call the API, including the FieldMask to avoid setting other fields to null. response = service.customers().configurations().patch( name=target_configuration['name'], body=configuration, updateMask='isDefault').execute()
الإشارة إلى وحدة التحكّم بسياسة الجهاز
ننصحك باستخدام اسم مصدر واجهة برمجة التطبيقات customers.dpcs.name
لتحديد وحدة التحكّم بسياسة الجهاز واستخدامها في عمليات الإعداد. يحتوي اسم المورد على معرّف فريد وثابت لوحدة التحكّم بسياسة الجهاز (DPC). اتّصِل بالرقم
customers.dpcs.list للحصول على قائمة بجميع
سياسات DPC المتوافقة. بما أنّ اسم المورد يتضمّن أيضًا معرّف العميل، يمكنك فلترة القائمة باستخدام آخر مكوّن في المسار للعثور على مثيل Dpc مطابق. يوضّح المثال أدناه كيفية مطابقة DPC والاحتفاظ به لاستخدامه لاحقًا في عملية إعداد:
Java
// Return a customer Dpc instance for the specified DPC ID. String myDpcIdentifier = "AH6Gbe4aiS459wlz58L30cqbbXbUa_JR9...xMSWCiYiuHRWeBbu86Yjq"; final int dpcIdIndex = 3; final String dpcComponentSeparator = "/"; // ... for (Dpc dpcApp : dpcs) { // Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, check the // fourth component matches the DPC ID. String dpcId = dpcApp.getName().split(dpcComponentSeparator)[dpcIdIndex]; if (dpcId.equals(myDpcIdentifier)) { System.out.format("My DPC is: %s\n", dpcApp.getDpcName()); return dpcApp; } } // Handle the case when the DPC isn't found...
NET.
// Return a customer Dpc instance for the specified DPC ID. var myDpcIdentifer = "AH6Gbe4aiS459wlz58L30cqbbXbUa_JR9...fE9WdHcxMSWCiYiuHRWeBbu86Yjq"; const int dpcIdIndex = 3; const String dpcComponentSeparator = "/"; // ... foreach (Dpc dpcApp in dpcs) { // Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, check the // fourth component matches the DPC ID. String dpcId = dpcApp.Name.Split(dpcComponentSeparator)[dpcIdIndex]; if (dpcId.Equals(myDpcIdentifer)) { Console.WriteLine("Matched DPC is: {0}", dpcApp.DpcName); return dpcApp; } } // Handle the case when the DPC isn't found...
Python
# Return a customer Dpc instance for the specified DPC ID. my_dpc_id = 'AH6Gbe4aiS459wlz58L30cqb...fE9WdHcxMSWCiYiuHRWeBbu86Yjq' # ... for dpc_app in dpcs: # Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, # check the fourth component matches the DPC ID. dpc_id = dpc_app['name'].split('/')[3] if dpc_id == my_dpc_id: return dpc_app # Handle the case when the DPC isn't found...
إذا كنت بحاجة إلى عرض اسم سياسة إدارة الجهاز (DPC) في واجهة مستخدم وحدة التحكّم، اعرض القيمة التي تم إرجاعها من customers.dpcs.dpcName.
إدارة الحسابات
اغتنم الفرصة لتقديم تجربة مستخدم رائعة عند توفير الأجهزة.
يجب أن يكون اسم المستخدم وكلمة المرور هما كل ما يلزم لتوفير الجهاز.
تذكَّر أنّ المورّدين قد يشحنون الأجهزة مباشرةً إلى المستخدمين البعيدين. أدرِج جميع الإعدادات الأخرى، مثل خادم إدارة الخدمات الجوّالة للمؤسسات أو الوحدة التنظيمية، في customers.configuration.dpcExtras.
يعرض مقتطف JSON أدناه جزءًا من مثال على الإعداد:
{
"android.app.extra.PROVISIONING_LOCALE": "en_GB",
"android.app.extra.PROVISIONING_TIME_ZONE": "Europe/London",
"android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED": true,
"android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE": {
"workflow_type": 3,
"default_password_quality": 327680,
"default_min_password_length": 6,
"company_name": "XYZ Corp",
"organizational_unit": "sales-uk",
"management_server": "emm.example.com",
"detail_tos_url": "https://www.example.com/policies/terms/",
"allowed_user_domains": "[\"example.com\", \"example.org\", \"example.net\"]"
}
}
يعمل برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" على تثبيت أداة التحكّم في سياسة الجهاز (DPC) وتشغيلها باستخدام Android Intent.
يرسل النظام القيم في السمة android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE بتنسيق JSON إلى وحدة التحكّم بسياسة الجهاز (DPC) كبيانات إضافية في الغرض. يمكن لوحدة التحكّم بسياسة الجهاز قراءة إعدادات التوفير من
PersistableBundle باستخدام المفاتيح نفسها.
يُفضّل استخدام إضافات الغرض التالي لإعداد وحدة التحكّم بسياسة الجهاز:
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLEEXTRA_PROVISIONING_LOCALEEXTRA_PROVISIONING_TIME_ZONEEXTRA_PROVISIONING_LOCAL_TIMEEXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLEDEXTRA_PROVISIONING_MAIN_COLOREXTRA_PROVISIONING_DISCLAIMERS
لا يُنصح بتضمين الإضافات التالية التي قد تستخدمها في طرق التسجيل الأخرى:
EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAMEEXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUMEXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADEREXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATIONEXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM
للتعرّف على كيفية استخراج هذه الإعدادات واستخدامها في وحدة التحكّم بسياسة الجهاز، يمكنك الاطّلاع على مقالة توفير أجهزة للعملاء.
التطوير والاختبار
لتطوير ميزات برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" في وحدة التحكّم واختبارها، يجب توفُّر ما يلي:
- جهاز متوافق
- حساب العميل المخصّص لعملية "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة"
يمكنك تطوير التطبيقات واختبارها باستخدام الأجهزة المتوافقة مع برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة"، مثل Google Pixel. ليس عليك شراء أجهزة التطوير من أحد شركاء المورّدين.
تواصَل معنا للحصول على حساب عميل تجريبي وإمكانية الوصول إلى بوابة برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة". أرسِل إلينا رسالة إلكترونية من عنوان بريدك الإلكتروني الخاص بالشركة والذي يكون مرتبطًا بحساب على Google. أخبرنا بالشركة المصنّعة ورقم IMEI لجهاز واحد أو جهازَين، وسنضيفهما إلى حسابك كمطوّر.
يُرجى العِلم أنّه بما أنّ برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" يتيح تنزيل وتثبيت وحدة تحكّم في سياسة الجهاز (DPC) تلقائيًا، يجب أن تكون وحدة التحكّم هذه متاحة على Google Play قبل أن تتمكّن من اختبار عملية الإعداد. لا يمكنك إجراء الاختبار باستخدام إصدار تطويري من تطبيق "سياسة الجهاز".
الدعم لمشرفي تكنولوجيا المعلومات
إذا كنت بحاجة إلى مساعدة مشرفي تكنولوجيا المعلومات في واجهة وحدة التحكّم أو مستنداتك، يمكنك الاطّلاع على إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة لمشرفي تكنولوجيا المعلومات للحصول على إرشادات. يمكنك أيضًا توجيه مستخدمي وحدة التحكّم إلى مقالة مركز المساعدة هذه.
محتوى إضافي للقراءة
اطّلِع على هذه المستندات لمساعدتك في دمج برنامج "إعداد الأجهزة الجوّالة للمؤسسات دفعةً واحدة" في وحدة التحكّم:
- برنامج "إعداد الأجهزة الجوّالة للمؤسّسات دفعةً واحدة" لمشرفي تكنولوجيا المعلومات في Android Enterprise مساعدة
- توفير أجهزة العملاء من موقع "مطوّرو إدارة الخدمات الجوّالة للمؤسسات (EMM) على Android"