EMM ইন্টিগ্রেশন গাইড

এই নির্দেশিকা এন্টারপ্রাইজ মোবিলিটি ম্যানেজমেন্ট (EMM) প্রদানকারীদের তাদের কনসোলে জিরো-টাচ এনরোলমেন্ট ইন্টিগ্রেট করতে সাহায্য করে। এনরোলমেন্ট সম্পর্কে আরও জানতে এবং আপনার DPC (ডিভাইস নীতি কন্ট্রোলার) প্রভিশন ডিভাইসকে সাহায্য করার জন্য সেরা-প্র্যাকটিস পরামর্শ দেখতে পড়া চালিয়ে যান। আপনার DPC থাকলে, ডিভাইস প্রোভিশন করার সময় আপনি পেশাদার পদ্ধতি সম্পর্কে জানতে পারবেন এবং ডেভেলপমেন্ট ও টেস্টিংয়ের ক্ষেত্রে সাহায্য করার জন্য পরামর্শ পাবেন।

আইটি অ্যাডমিনের জন্য ফিচার

আইটি অ্যাডমিনদের আপনার কনসোল থেকে সরাসরি জিরো-টাচ এনরোলমেন্ট সেট-আপ করতে সাহায্য করার জন্য গ্রাহক API ব্যবহার করুন। আপনার কনসোলে আইটি অ্যাডমিন যেসব টাস্ক সম্পূর্ণ করতে পারেন তার কিছু উদাহরণ এখানে দেওয়া হল:

  • আপনার মোবাইল নীতির উপর ভিত্তি করে জিরো-টাচ এনরোলমেন্ট কনফিগারেশন তৈরি, এডিট এবং মুছে ফেলুন।
  • একটি ডিফল্ট কনফিগারেশন সেট করুন যাতে আপনার DPC ভবিষ্যতে সংস্থার কেনা ডিভাইসগুলি প্রভিশন করে।
  • ডিভাইসে আলাদা আলাদা কনফিগারেশন প্রয়োগ করুন অথবা জিরো-টাচ এনরোলমেন্ট থেকে ডিভাইস সরিয়ে দিন।

জিরো-টাচ এনরোলমেন্ট সম্পর্কে আরও জানতে, ওভারভিউ পড়ুন।

পূর্বশর্ত

আপনার EMM কনসোলে জিরো-টাচ এনরোলমেন্ট যোগ করার আগে, আপনার সমাধান নিম্নলিখিত বিষয়গুলি সাপোর্ট করে কিনা তা কনফার্ম করুন:

  • আপনার EMM সলিউশনকে সম্পূর্ণ ম্যানেজ করা মোডে কোম্পানির মালিকানাধীন Android 8.0+ (Pixel 7.1+) ডিভাইস প্রোভিশন করতে হবে। কোম্পানির মালিকানাধীন Android 10+ ডিভাইস সম্পূর্ণভাবে ম্যানেজ করা বা অফিস প্রোফাইল সহ হিসেবে সেট-আপ করা যেতে পারে।
  • জিরো-টাচ এনরোলমেন্ট অটোমেটিক DPC ডাউনলোড ও ইনস্টল করে, তাই আপনার DPC অবশ্যই Google Play-তে উপলভ্য হতে হবে। আমরা মানানসই DPC-এর একটি তালিকা বজায় রাখি যা আইটি অ্যাডমিনরা কাস্টমার API বা পোর্টাল ব্যবহার করে কনফিগার করতে পারেন। আপনার DPC তালিকায় যোগ করতে EMM প্রোভাইডার কমিউনিটি-এর মাধ্যমে প্রোডাক্ট মডিফিকেশনের অনুরোধ জমা দিন।
  • গ্রাহক API কল করার জন্য আপনার গ্রাহকদের জিরো-টাচ এনরোলমেন্ট অ্যাকাউন্ট থাকতে হবে। কোনও প্রতিষ্ঠান ডিভাইস কিনলে, পার্টনার রিসেলার আইটি অ্যাডমিনের প্রতিষ্ঠানের জন্য অ্যাকাউন্ট সেট-আপ করে।
  • ডিভাইসটি অবশ্যই Google Mobile Services (GMS)-এর সাথে মানানসই হতে হবে এবং জিরো-টাচ এনরোলমেন্ট সঠিকভাবে কাজ করার জন্য Google Play পরিষেবা সবসময় চালু থাকতে হবে।

API কল করুন

আপনার কনসোলের ব্যবহারকারীরা (তাদের Google অ্যাকাউন্ট ব্যবহার করে) আপনার API অনুরোধ গ্রাহক API-তে অনুমোদিত করে। অন্যান্য EMM API-এর জন্য আপনি যে অনুমোদন করেন, এই ফ্লো তার থেকে আলাদা। আপনার অ্যাপে কীভাবে এটি করবেন তা জানতে অনুমোদন পড়ুন।

পরিষেবার শর্তাবলী হ্যান্ডেল করুন

API কল করার আগে আপনার ব্যবহারকারীদের লেটেস্ট পরিষেবার শর্তাবলীতে (ToS) সম্মতি জানাতে হবে। 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://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 অনুরোধ) সমর্থন করলে, আপনার অনুরোধে 2 ভ্যালু সহ HTTP হেডার X-GOOG-API-FORMAT-VERSION অন্তর্ভুক্ত করুন। আপনার ক্লায়েন্ট যদি বিস্তারিত ত্রুটি (.NET এবং অন্যান্য) না দেখায়, তাহলে ত্রুটি মেসেজটি মিলিয়ে দেখুন।

ভবিষ্যতে আমরা পরিষেবার শর্তাবলী আপডেট করলে, আপনি এই পদ্ধতি অনুসরণ করলে, আপনার অ্যাপ ব্যবহারকারীকে নতুন পরিষেবার শর্তাবলী আবার গ্রহণ করার জন্য নির্দেশ দেয়।

আইটি অ্যাডমিনরা জিরো-টাচ এনরোলমেন্ট পোর্টাল ব্যবহার করে তাদের প্রতিষ্ঠানের ব্যবহারকারীদের ম্যানেজ করেন—আপনি গ্রাহক API-এর মাধ্যমে এটি অফার করতে পারবেন না। এছাড়াও, আইটি অ্যাডমিনরা পোর্টাল ব্যবহার করে ডিভাইস ও কনফিগারেশন ম্যানেজ করতে পারবেন। আপনার কনসোল বা ডকুমেন্টেশন থেকে পোর্টালের সাথে লিঙ্ক করতে হলে, এই URL ব্যবহার করুন:

https://enterprise.google.com/android/zero-touch/customers

আপনি হয়ত আইটি অ্যাডমিনকে জানাতে চাইবেন যে তাকে Google অ্যাকাউন্ট দিয়ে সাইন-ইন করতে বলা হয়েছে।

ডিভাইস এনরোলমেন্ট

জিরো-টাচ এনরোলমেন্ট হল ডিভাইস এনরোল করার একটি পদ্ধতি এবং এটি NFC এনরোলমেন্ট বা QR-কোড এনরোলমেন্টের মতো। আপনার কনসোলে ম্যানেজ করা ডিভাইস সাপোর্ট করতে হবে এবং আপনার DPC-কে সম্পূর্ণ ম্যানেজ করা ডিভাইস মোডে রান করতে হবে।

Android 8.0 বা তার পরবর্তী ভার্সনে চলে এমন কাজ করে এমন ডিভাইসে জিরো-টাচ এনরোলমেন্ট উপলভ্য। আইটি অ্যাডমিনকে অবশ্যই পার্টনার রিসেলারের থেকে কাজ করে এমন ডিভাইস কিনতে হবে। আপনার কনসোল ট্র্যাক করতে পারে আইটি অ্যাডমিনের কোন ডিভাইস জিরো-টাচ এনরোলমেন্টের জন্য উপলভ্য, customers.devices.list-এ কল করে।

এনরোলমেন্ট কীভাবে কাজ করে তার একটি রূপরেখা এখানে দেওয়া হল:

  1. জিরো-টাচ এনরোলমেন্টের জন্য প্রথমবার চালু করার সময় (বা ফ্যাক্টরি রিসেট করার পরে) ডিভাইস Google সার্ভারের সাথে চেক-ইন করে।
  2. আইটি অ্যাডমিন ডিভাইসে কনফিগারেশন প্রয়োগ করলে, জিরো-টাচ এনরোলমেন্ট সম্পূর্ণরূপে ম্যানেজ করা ডিভাইসের Android সেট-আপ উইজার্ড চালায় এবং কনফিগারেশন থেকে পাওয়া মেটাডেটা দিয়ে স্ক্রিন কাস্টমাইজ করে।
  3. জিরো-টাচ এনরোলমেন্ট Google Play থেকে আপনার DPC ডাউনলোড ও ইনস্টল করে।
  4. আপনার 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()

আপনার DPC রেফারেন্স করা হচ্ছে

আপনার DPC শনাক্ত করতে এবং কনফিগারেশনে এটি ব্যবহার করতে, আমরা API রিসোর্সের নাম customers.dpcs.name ব্যবহার করার সাজেশন দিই। রিসোর্সের নামে DPC-এর জন্য একটি অনন্য এবং অপরিবর্তনীয় শনাক্তকারী থাকে। কাজ করে এমন সব DPC-এর তালিকা পেতে customers.dpcs.list-এ কল করুন। রিসোর্সের নামে কাস্টমার আইডি অন্তর্ভুক্ত থাকে বলে, ম্যাচিং 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 থেকে পাওয়া ভ্যালু ডিসপ্লে করুন।

প্রস্তুতি চলছে

ডিভাইস প্রোভিশনিংয়ের জন্য ব্যবহারকারীকে দুর্দান্ত অভিজ্ঞতা প্রদান করার সুযোগ নিন। ডিভাইসটি প্রভিশন করার জন্য শুধুমাত্র ইউজারনেম এবং পাসওয়ার্ড প্রয়োজন। মনে রাখবেন, রিসেলাররা সরাসরি রিমোট ব্যবহারকারীদের কাছে ডিভাইস পাঠাতে পারেন। 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\"]"
    }
}

জিরো-টাচ এনরোলমেন্ট, Android ইনটেন্ট ব্যবহার করে আপনার DPC ইনস্টল ও লঞ্চ করে। সিস্টেম, ইনটেন্টে অতিরিক্ত হিসেবে android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE JSON প্রপার্টিতে থাকা ভ্যালু আপনার DPC-তে পাঠায়। আপনার DPC একই 'কী' ব্যবহার করে PersistableBundle থেকে প্রভিশনিং সেটিংস পড়তে পারে।

সাজেস্ট করা—আপনার DPC সেট-আপ করতে নিম্নলিখিত ইনটেন্ট এক্সট্রা ব্যবহার করুন:

সাজেস্ট করা হয় না—অন্যান্য এনরোলমেন্ট পদ্ধতিতে আপনি ব্যবহার করতে পারেন এমন নিম্নলিখিত অতিরিক্ত বিষয়গুলি অন্তর্ভুক্ত করবেন না:

আপনার DPC-তে এইসব সেটিংস কীভাবে এক্সট্র্যাক্ট ও ব্যবহার করবেন তা জানতে, গ্রাহকের ডিভাইস প্রভিশন করুন নিবন্ধটি পড়ুন।

ডেভেলপমেন্ট ও টেস্টিং

আপনার কনসোলের জিরো-টাচ এনরোলমেন্ট ফিচার ডেভেলপ ও পরীক্ষা করতে, আপনার নিম্নলিখিতগুলি প্রয়োজন হবে:

  • একটি কাজ করে এমন ডিভাইস
  • গ্রাহকের জিরো-টাচ এনরোলমেন্ট অ্যাকাউন্ট

Google Pixel-এর মতো জিরো-টাচ এনরোলমেন্ট কাজ করে এমন ডিভাইসের সাথে ডেভেলপ ও টেস্ট করুন। আপনাকে রিসেলার পার্টনারের থেকে ডেভেলপমেন্ট ডিভাইস কিনতে হবে না।

একটি টেস্ট গ্রাহক অ্যাকাউন্ট পেতে এবং জিরো-টাচ এনরোলমেন্ট পোর্টাল অ্যাক্সেস করতে আমাদের সাথে যোগাযোগ করুন। আপনার কর্পোরেট ইমেল আইডি থেকে আমাদের ইমেল করুন, যেটি Google অ্যাকাউন্টের সাথে যুক্ত। আমাদের এক বা দুটি ডিভাইসের প্রস্তুতকারক এবং IMEI নম্বর বলুন এবং আমরা সেগুলি আপনার ডেভেলপমেন্ট অ্যাকাউন্টে যোগ করব।

মনে রাখবেন, জিরো-টাচ এনরোলমেন্ট অটোমেটিক DPC ডাউনলোড ও ইনস্টল করে, তাই প্রভিশনিং পরীক্ষা করার আগে আপনার DPC Google Play-তে উপলভ্য থাকতে হবে। আপনার DPC-এর ডেভেলপমেন্ট ভার্সন দিয়ে আপনি পরীক্ষা করতে পারবেন না।

আইটি অ্যাডমিনদের জন্য সহায়তা

আপনার কনসোলের ইন্টারফেস বা ডকুমেন্টেশনে আইটি অ্যাডমিনদের সাহায্য করার প্রয়োজন হলে, নির্দেশনার জন্য আইটি অ্যাডমিনদের জন্য জিরো-টাচ এনরোলমেন্ট দেখুন। এছাড়াও, আপনি কনসোলের ব্যবহারকারীদের সেই সহায়তা কেন্দ্র নিবন্ধে ডাইরেক্ট করতে পারবেন।

আরও পড়ুন

আপনার কনসোলে জিরো-টাচ এনরোলমেন্ট ইন্টিগ্রেট করতে সাহায্য পেতে এইসব ডকুমেন্ট পড়ুন: