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

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

আইটি প্রশাসকদের জন্য বৈশিষ্ট্য

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

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

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

পূর্বশর্ত

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

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

API-তে কল করুন

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

পরিষেবার শর্তাবলী পরিচালনা করুন

API কল করার আগে আপনার ব্যবহারকারীদের সর্বশেষ পরিষেবার শর্তাবলী (ToS) গ্রহণ করতে হবে। যদি API কলটি HTTP 403 Forbidden স্ট্যাটাস কোড ফেরত দেয় এবং প্রতিক্রিয়ার অংশে একটি TosError থাকে, তাহলে zero-touch enrollment পোর্টালে সাইন ইন করে ব্যবহারকারীকে ToS গ্রহণ করতে বলুন। নীচের উদাহরণে আপনি এটি কীভাবে করতে পারেন তার একটি উপায় দেখানো হয়েছে:

জাভা

// 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;
}

.নেট

// 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.
            // ...
        }
    }
}

পাইথন

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

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

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

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

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

ডিভাইস নথিভুক্তকরণ

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

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

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

  1. একটি ডিভাইস প্রথম স্টার্টআপে (অথবা ফ্যাক্টরি রিসেট করার পরে) জিরো-টাচ এনরোলমেন্টের জন্য গুগল সার্ভারের সাথে চেক ইন করে।
  2. যদি আইটি অ্যাডমিন ডিভাইসে কোনও কনফিগারেশন প্রয়োগ করে থাকেন, তাহলে জিরো-টাচ এনরোলমেন্ট সম্পূর্ণরূপে পরিচালিত ডিভাইস অ্যান্ড্রয়েড সেটআপ উইজার্ড চালায় এবং কনফিগারেশন থেকে মেটাডেটা দিয়ে স্ক্রিনগুলিকে ব্যক্তিগতকৃত করে।
  3. জিরো-টাচ এনরোলমেন্ট গুগল প্লে থেকে আপনার ডিপিসি ডাউনলোড এবং ইনস্টল করে।
  4. আপনার DPC ACTION_PROVISION_MANAGED_DEVICE ইন্টেন্ট গ্রহণ করে এবং ডিভাইসটি সরবরাহ করে।

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

ডিফল্ট কনফিগারেশন

জিরো-টাচ এনরোলমেন্ট আইটি অ্যাডমিনদের সবচেয়ে বেশি সাহায্য করে যখন তারা একটি ডিফল্ট কনফিগারেশন সেট করে যা তাদের প্রতিষ্ঠানের কেনা যেকোনো নতুন ডিভাইসে প্রয়োগ করা হয়। যদি সেট না করা থাকে তবে আপনার কনসোল থেকে একটি ডিফল্ট কনফিগারেশন সেট করার প্রচার করুন। কোনও প্রতিষ্ঠান ডিফল্ট কনফিগারেশন সেট করেছে কিনা তা জানতে আপনি customers.configurations.isDefault এর মান পরীক্ষা করতে পারেন।

নিচের উদাহরণটি দেখায় কিভাবে আপনি একটি বিদ্যমান কনফিগারেশনকে ডিফল্ট করতে পারেন:

জাভা

// 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();

.নেট

// 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();

পাইথন

# 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-এর সাথে মিল রাখবেন এবং পরবর্তীতে কনফিগারেশনে এটি ব্যবহার করে তা বজায় রাখবেন:

জাভা

// 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...

.নেট

// 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...

পাইথন

# 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 এ অন্যান্য সমস্ত সেটিংস, যেমন EMM সার্ভার বা সাংগঠনিক ইউনিট অন্তর্ভুক্ত করুন।

নীচের 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.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE JSON প্রপার্টির মানগুলি আপনার DPC-তে ইনটেন্টে অতিরিক্ত হিসেবে পাঠায়। আপনার DPC একই কী ব্যবহার করে PersistableBundle থেকে প্রভিশনিং সেটিংস পড়তে পারে।

প্রস্তাবিত — আপনার DPC সেট আপ করতে নিম্নলিখিত অভিপ্রায় অতিরিক্ত ব্যবহার করুন:

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

আপনার DPC-তে এই সেটিংসগুলি কীভাবে বের করে ব্যবহার করবেন তা শিখতে, Provision customer devices পড়ুন।

উন্নয়ন এবং পরীক্ষা

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

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

গুগল পিক্সেলের মতো জিরো-টাচ এনরোলমেন্ট সমর্থন করে এমন ডিভাইসগুলি দিয়ে ডেভেলপ এবং পরীক্ষা করুন। আপনাকে আপনার ডেভেলপমেন্ট ডিভাইসগুলি কোনও রিসেলার পার্টনারের কাছ থেকে কিনতে হবে না।

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

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

আইটি প্রশাসকদের জন্য সহায়তা

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

আরও পড়া

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