המדריך הזה יעזור לספקים לניהול ניידות ארגונית (EMM) לשלב את השילוב הם נרשמים דרך המסוף דרך הארגון. בהמשך מפורט מידע נוסף על הרישום ועצות לשיטות מומלצות שיעזרו ל-DPC (בקר מדיניות המכשיר) להקצות מכשירים. אם יש לכם בקר DPC, נלמד שיטות מומלצות בתהליך הקצאת מכשירים ומקבלים עצות לעזרה עם פיתוח ובדיקה.
תכונות לאדמינים ב-IT
שימוש ב-Customer API כדי לעזור לאדמינים ב-IT להגדיר הרשמה דרך הארגון ישירות מ: במסוף. הנה כמה משימות שאדמין ב-IT יכול לבצע במסוף שלך:
- יצירה, עריכה ומחיקה של הגדרות הרשמה דרך הארגון על סמך המדיניות לנייד.
- קובעים הגדרות ברירת מחדל כדי שה-DPC יקצה מכשירים עתידיים רכישות של הארגון.
- אפשר להחיל הגדרות אישיות מסוימות על מכשירים או להסיר מכשירים דרך הארגון ללא מגע להרשמה לקראת השקת אפליקציה.
למידע נוסף על הרשמה דרך הארגון, אפשר לקרוא את סקירה כללית.
דרישות מוקדמות
לפני הוספת הרשמה דרך הארגון למסוף ה-EMM, עליך לאשר את בפתרון הזה:
- בפתרון ה-EMM שלך צריך להקצות מכשיר Android מגרסה 8.0 ואילך בבעלות החברה (Pixel 7.1 ואילך) המכשיר במצב מנוהל באופן מלא. מכשירי Android 10+ בבעלות החברה יכולים להיות מוקצה כמנוהל במלואו או באמצעות פרופיל עבודה.
- מכיוון שההרשמה דרך הארגון כוללת הורדה והתקנה אוטומטיות של DPC, ה-DPC צריך להיות זמין ב-Google Play. יש לנו רשימה של בקרי DPC תואמים שאדמינים ב-IT יכולים להגדיר באמצעות ה-API ללקוח או הפורטל. לשלוח בקשה לשינוי מוצר דרך קהילת ספקי ה-EMM כדי להוסיף את בקר ה-DPC לרשימה.
- כדי שהלקוחות שלך יוכלו לקרוא ל-API של הלקוח, הם צריכים חשבון בהרשמה דרך הארגון. מפיץ שותף מגדיר את החשבון לארגון של אדמין ב-IT כאשר: אנשים רוכשים את המכשירים שלהם.
- המכשיר חייב להיות תואם לשירות Google Mobile Services (GMS) צריך להפעיל את Google Play Services כל הזמן כדי להירשם דרך הארגון כדי לפעול כראוי.
קריאה ל-API
משתמשי המסוף שלך (באמצעות חשבון Google שלהם) מאשרים את בקשות ה-API שלך ל ממשק ה-API ללקוח. התהליך הזה שונה מההרשאה שאליה מבצעים את הפעולה ממשקי API אחרים של EMM. כדי ללמוד איך לעשות זאת באפליקציה, ניתן לקרוא את המאמר הרשאה.
התנאים וההגבלות של הכינוי
המשתמשים שלך צריכים לאשר את התנאים וההגבלות העדכניים (ToS) לפני
קוראים ל-API. אם הקריאה ל-API מחזירה קוד סטטוס 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://partner.android.com/zerotouch' # 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. ועוד), צריך להתאים את הודעת השגיאה.
כשנודאג לעדכן את התנאים וההגבלות בעתיד, אם תבחרו בגישה הזו, האפליקציה שלכם תפנה את המשתמש לאשר מחדש את התנאים וההגבלות החדשים.
קישור לפורטל
אדמינים ב-IT משתמשים בפורטל ההרשמה דרך הארגון כדי לנהל את המשתמשים עבור ארגון - לא תוכלו להציע זאת דרך ממשק ה-API של הלקוח. אדמינים ב-IT יכולים גם לנהל מכשירים והגדרות אישיות באמצעות הפורטל. אם צריך לקשר אל מהמסוף או בתיעוד שלכם, צריך להשתמש בכתובת ה-URL הבאה:
https://partner.android.com/zerotouch
כדאי להודיע לאדמינים ב-IT שהם מתבקשים להיכנס לחשבון חשבון Google.
צירוף מכשיר לתוכנית
הרשמה דרך הארגון היא מנגנון לרישום מכשירים, והוא כמו NFC הרשמה או רישום באמצעות קוד QR. המסוף צריך לתמוך במכשירים מנוהלים ושה-DPC צריך להיות מסוגל לפעול במצב מכשיר מנוהל.
הרשמה דרך הארגון זמינה במכשירים נתמכים עם Android 8.0 או
מאוחר יותר. מנהלי IT ב-IT צריכים לרכוש מכשירים נתמכים משותף של מכשירים נתמכים
מפיץ. המסוף שלך יכול לעקוב
אילו מהמכשירים של האדמין ב-IT זמינים להרשמה דרך הארגון, עד
התקשרות אל customers.devices.list
.
בהמשך מוסבר איך מתבצע הרישום:
- מכשיר מבצע בדיקה באמצעות שרת של Google בהפעלה הראשונה (או לאחר הפעלת היצרן) איפוס) להרשמה דרך הארגון.
- אם האדמין ב-IT החיל הגדרות אישיות על המכשיר, דרך הארגון הרישום מפעיל את אשף ההגדרה של Android למכשיר המנוהל ומתאים אישית את מסכים עם מטא-נתונים מהתצורה.
- באמצעות הרשמה דרך הארגון, מתבצעת הורדה והתקנה של בקר ה-DPC מ-Google Play.
- בקר ה-DPC מקבל
כוונת רכישה
ACTION_PROVISION_MANAGED_DEVICE
וגם מקצה את המכשיר.
אם אין חיבור לאינטרנט, הבדיקה תתבצע כשיתבצע חיבור זמינים. למידע נוסף על הקצאת מכשירים באמצעות הרשמה דרך הארגון, ראו אספקה בהמשך.
הגדרות ברירת המחדל
הרשמה דרך הארגון עוזרת לרוב לאדמינים ב-IT כשהם קובעים הגדרות ברירת מחדל
שמוחל על כל מכשיר חדש שהארגון רכש. מומלץ להגדיר הגדרות ברירת מחדל במסוף, אם הן לא מוגדרות. אפשר לבדוק את
הערך של 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()
הפניה לבקר DPC
מומלץ להשתמש בשם של משאב ה-API customers.dpcs.name
כדי לזהות את בקר ה-DPC ולהשתמש בו בהגדרות. שם המשאב מכיל
מזהה ייחודי ולא משתנה של ה-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
.
ניהול הקצאות (Provisioning)
כדאי לנצל את ההזדמנות הזו כדי לספק חוויית משתמש מעולה לצורך הקצאת מכשירים.
שם משתמש וסיסמה צריכים להיות כל מה שצריך כדי להקצות את המכשיר.
חשוב לזכור שמפיצים עשויים לשלוח מכשירים ישירות למשתמשים מרוחקים. כוללים את כל ההגדרות האחרות, כמו שרת EMM או יחידה ארגונית, ב-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 באמצעות Intent של Android.
המערכת שולחת את הערכים
נכס JSON אחד (android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE
) ל-DPC
בתור תוספות במסגרת כוונה. ה-DPC יכול לקרוא את הגדרות ניהול התצורה בעזרת
PersistableBundle
באמצעות אותם מקשים.
מומלץ – כדי להגדיר את ה-DPC, השתמשו בתוספות הנוספות הבאות של כוונת השימוש:
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
EXTRA_PROVISIONING_LOCALE
EXTRA_PROVISIONING_TIME_ZONE
EXTRA_PROVISIONING_LOCAL_TIME
EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED
EXTRA_PROVISIONING_MAIN_COLOR
EXTRA_PROVISIONING_DISCLAIMERS
לא מומלץ – אין לכלול את הפריטים הבאים תוספות שאפשר להשתמש בהן בשיטות רישום אחרות:
EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION
EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM
במאמר הקצאת מכשירי לקוחות מוסבר איך לחלץ את ההגדרות האלה ולהשתמש בהן ב-DPC.
פיתוח ובדיקה
כדי לפתח ולבדוק את תכונות ההרשמה דרך הארגון: הבאים:
- מכשיר נתמך
- חשבון בהרשמה דרך הארגון של לקוח
פיתוח ובדיקה באמצעות מכשירים שתומכים ב'ללא מגע' הרשמה, כמו Google Pixel. לא חייבים לרכוש את מכשירי הפיתוח שלך משותף של מפיץ.
צרו איתנו קשר כדי לקבל חשבון לקוח לבדיקה וגישה אל פורטל ההרשמה דרך הארגון. שולחים לנו אימייל מכתובת האימייל העסקית משויך לחשבון Google חשבון. מציינים את היצרן ואת מספר ה-IMEI של מכשיר אחד או שניים, ואנחנו נוסיף אותם חשבון.
חשוב לזכור, מאחר שהרשמה דרך הארגון מורידה ומתקינה באופן אוטומטי בקר DPC, בקר ה-DPC צריך להיות זמין ב-Google Play כדי שאפשר יהיה לבדוק הקצאה. אי אפשר לבדוק עם גרסת פיתוח של ה-DPC.
תמיכה לאדמינים ב-IT
אם אתם צריכים לעזור לאדמינים ב-IT בממשק של המסוף או במסמכים, אפשר לקבל הנחיות במאמר הרשמה דרך הארגון לאדמינים ב-IT. שלך יכול גם להפנות את משתמשי המסוף למאמר הזה במרכז העזרה.
קריאה נוספת
קראו את המסמכים האלה כדי לעזור לכם לשלב הרשמה דרך הארגון המסוף:
- הרשמה דרך הארגון למנהלי IT במרכז העזרה של Android Enterprise.
- הקצאת מכשירים של לקוחות מהאתר של Android EMM Developers.