এই গাইডে উল্লেখ করা ফিচারগুলি নিরাপত্তা ম্যানেজমেন্টের ক্ষমতা বর্ণনা করে যা আপনি ডিভাইস নীতি কন্ট্রোলার (DPC) অ্যাপে প্রয়োগ করতে পারবেন। এই ডকুমেন্টে কোডের স্যাম্পেল রয়েছে এবং আপনি Android-এর এন্টারপ্রাইজ ফিচারের জন্য স্যাম্পেল কোডের সোর্স হিসেবে DPC টেস্ট অ্যাপও ব্যবহার করতে পারবেন।
DPC অ্যাপ ব্যক্তিগত ডিভাইসে প্রোফাইল মালিক মোডে অথবা সম্পূর্ণ ম্যানেজ করা ডিভাইসে ডিভাইস মালিক মোডে রান করতে পারে। DPC প্রোফাইল মালিক মোড বা ডিভাইস মালিক মোডে রান করলে কোন কোন ফিচার উপলভ্য থাকে তা এই সারণীতে দেখানো হয়েছে:
অ্যাপে অ্যাক্সেস বন্ধ করুন
যেসব সংস্থা চায় না যে তাদের কর্মীরা দিনের নির্দিষ্ট সময়ে বা সপ্তাহের নির্দিষ্ট দিনে Android-চালিত ডিভাইসে গেম খেলুক বা YouTube দেখুক, তাদের জন্য DPC সাময়িকভাবে অ্যাপের অ্যাক্সেস বন্ধ করে দিতে পারে।
অ্যাপে অ্যাক্সেস বন্ধ করতে, ডিভাইস মালিক বা প্রোফাইল মালিক মোডে চলা DPC
setPackagesSuspended() কনফিগার করে এবং তারপরে বেছে নেওয়া অ্যাপটি এমনভাবে কাজ করে যেন
এটি বন্ধ করা আছে (Google লঞ্চার অ্যাপটিকে ধূসর করে দেয়)। ব্যবহারকারী অ্যাপে ট্যাপ করলে,
তিনি একটি সিস্টেম ডায়ালগ দেখতে পান যেখানে বলা হয় যে অ্যাপটি সাসপেন্ড করা হয়েছে।
কোনও অ্যাপ সাসপেন্ড করা থাকলে, এটি অ্যাক্টিভিটি শুরু করতে পারে না এবং প্যাকেজে বিজ্ঞপ্তি পাঠানো বন্ধ করা হয়। সাসপেন্ড করা প্যাকেজ ওভারভিউ স্ক্রিনে দেখা যায় না, সেগুলি ডায়ালগ (টোস্ট ও স্ন্যাকবার সহ) দেখাতে পারে না এবং সেগুলি অডিও চালাতে বা ডিভাইস ভাইব্রেট করতে পারে না।
isPackageSuspended() মেথড কল করে লঞ্চার জানতে পারে যে কোনও অ্যাপ সাসপেন্ড করা হয়েছে কিনা। অ্যাপ সাসপেনশন কীভাবে কনফিগার করতে হয় সেই সম্পর্কে বিস্তারিত জানতে, setPackagesSuspended দেখুন।
অজানা সোর্স থেকে অ্যাপ ব্লক করুন
Google Play (বা অন্যান্য বিশ্বস্ত অ্যাপ স্টোর) থেকে ইনস্টল করা হয়নি এমন অ্যাপকে অজানা সোর্স থেকে পাওয়া অ্যাপ বলা হয়। এইসব অ্যাপ ইনস্টল করলে ডিভাইস ও ডেটা ঝুঁকির মুখে পড়তে পারে।
অজানা সোর্স থেকে অ্যাপ ইনস্টল করা আটকাতে, সম্পূর্ণভাবে ম্যানেজ করা ডিভাইস ও অফিস প্রোফাইলের অ্যাডমিন কম্পোনেন্ট
DISALLOW_INSTALL_UNKNOWN_SOURCES ব্যবহারকারীর উপর বিধিনিষেধ যোগ করতে পারে।
অফিস প্রোফাইল ডিভাইস-লেভেল বিধিনিষেধ
অফিস প্রোফাইলের অ্যাডমিন DISALLOW_INSTALL_UNKNOWN_SOURCES যোগ করলে,
বিধিনিষেধ শুধু অফিস প্রোফাইলের ক্ষেত্রে প্রযোজ্য হয়। তবে, অফিস প্রোফাইলের অ্যাডমিন Google Play-এর জন্য
ম্যানেজ করা কনফিগারেশন সেট করে
ডিভাইস-জুড়ে বিধিনিষেধ আরোপ করতে পারেন। ডিভাইস-জুড়ে বিধিনিষেধ
Android 8.0 (বা তার পরবর্তী ভার্সন) এবং Google Play অ্যাপের
80812500 বা তার পরবর্তী ভার্সনে উপলভ্য।
Google Play-তে অ্যাপ ইনস্টল করার সুবিধা সীমিত করতে, এইসব ধাপ অনুসরণ করুন:
- Google Play প্যাকেজ
com.android.vending-এর জন্য ম্যানেজ করা কনফিগারেশন বান্ডেল সেট করুন। - বান্ডেলে,
verify_apps:device_wide_unknown_source_blockকী-এর জন্য বুলিয়ান ভ্যালু লিখুন। ENSURE_VERIFY_APPSব্যবহারকারীর উপর বিধিনিষেধ যোগ করুন।
Google Play এই সেটিং সাপোর্ট করে কিনা তা কীভাবে চেক করবেন এবং ভ্যালু true-এ সেট করবেন তা নিম্নলিখিত উদাহরণ থেকে দেখুন:
Kotlin
internal val DEVICE_WIDE_UNKNOWN_SOURCES = "verify_apps:device_wide_unknown_source_block" internal val GOOGLE_PLAY_APK = "com.android.vending" // ... // Add the setting to Google Play's existing managed config. Supported in // Google Play version 80812500 or higher--older versions ignore unsupported // settings. val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager var existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK) val newConfig = Bundle(existingConfig) newConfig.putBoolean(DEVICE_WIDE_UNKNOWN_SOURCES, true) dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig) // Make sure that Google Play Protect verifies apps. dpm.addUserRestriction(adminName, UserManager.ENSURE_VERIFY_APPS) dpm.addUserRestriction(adminName, UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES)
জাভা
static final String DEVICE_WIDE_UNKNOWN_SOURCES = "verify_apps:device_wide_unknown_source_block"; static final String GOOGLE_PLAY_APK = "com.android.vending"; // ... // Add the setting to Google Play's existing managed config. Supported in // Google Play version 80812500 or higher--older versions ignore unsupported // settings. DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); Bundle existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK); Bundle newConfig = new Bundle(existingConfig); newConfig.putBoolean(DEVICE_WIDE_UNKNOWN_SOURCES, true); dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig); // Make sure that Google Play Protect verifies apps. dpm.addUserRestriction(adminName, UserManager.ENSURE_VERIFY_APPS); dpm.addUserRestriction(adminName, UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES);
সিস্টেম সেটিংসে ইউজার ইন্টারফেস অ্যাক্টিভ থাকে কিন্তু সিস্টেম অ্যাপ ইনস্টলেশন ব্লক করে। এই বিধিনিষেধ ভবিষ্যতে ইনস্টল করা অ্যাপের উপর প্রভাব ফেলে—আগে ইনস্টল করা অ্যাপ ডিভাইসে থেকে যায়। ডিভাইস ব্যবহারকারীরা Android ডিবাগ ব্রিজ (adb) ব্যবহার করে ব্যক্তিগত প্রোফাইলে অ্যাপ ইনস্টল করা চালিয়ে যেতে পারবেন।
অজানা সোর্স সম্পর্কে আরও জানতে, বিকল্প ডিস্ট্রিবিউশন বিকল্প পড়ুন।
Google Play-তে অ্যাকাউন্ট সীমাবদ্ধ করা
কখনও কখনও কোনও সংস্থা লোকজনকে ব্যক্তিগত Google অ্যাকাউন্ট যোগ করার অনুমতি দিতে চাইতে পারে (যেমন, Gmail-এ মেল পড়ার জন্য) কিন্তু ব্যক্তিগত অ্যাকাউন্ট থেকে অ্যাপ ইনস্টল করার অনুমতি দিতে নাও চাইতে পারে। আপনার DPC, Google Play-তে লোকজন ব্যবহার করতে পারবেন এমন অ্যাকাউন্টের তালিকা সেট করতে পারে।
সম্পূর্ণভাবে ম্যানেজ করা ডিভাইস বা অফিস প্রোফাইলের অ্যাডমিন কম্পোনেন্ট, Google Play-এর জন্য ম্যানেজ করা কনফিগারেশন সেট করে অ্যাকাউন্ট সীমাবদ্ধ করতে পারে। ইনস্টল করা Google Play অ্যাপের ভার্সন 80970100 বা তার বেশি হলে, অ্যাকাউন্ট সংক্রান্ত বিধিনিষেধ উপলভ্য হয়।
Google Play-তে অ্যাকাউন্টের সংখ্যা সীমিত করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- Google Play প্যাকেজ
com.android.vending-এর জন্য ম্যানেজ করা কনফিগারেশন বান্ডেল সেট করুন। - বান্ডেলে,
allowed_accountsকী-এর জন্য স্ট্রিং ভ্যালু হিসেবে কমা দিয়ে আলাদা করা ইমেল আইডি লিখুন।
আপনি কীভাবে অ্যাকাউন্ট সীমিত করতে পারবেন তা নিম্নলিখিত উদাহরণ থেকে দেখুন:
Kotlin
internal val ALLOWED_ACCOUNTS = "allowed_accounts" internal val GOOGLE_PLAY_APK = "com.android.vending" // ... // Limit Google Play to one work and one personal account. Use // a comma-separated list of account email addresses (usernames). val googleAccounts = "ali@gmail.com,ali.connors@example.com" // Supported in Google Play version 80970100 or higher. val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK) val newConfig = Bundle(existingConfig) newConfig.putString(ALLOWED_ACCOUNTS, googleAccounts) dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig)
জাভা
static final String ALLOWED_ACCOUNTS = "allowed_accounts"; static final String GOOGLE_PLAY_APK = "com.android.vending"; // ... // Limit Google Play to one work and one personal account. Use // a comma-separated list of account email addresses (usernames). String googleAccounts = "ali@gmail.com,ali.connors@example.com"; // Supported in Google Play version 80970100 or higher. Bundle existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK); Bundle newConfig = new Bundle(existingConfig); newConfig.putString(ALLOWED_ACCOUNTS, googleAccounts); dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig);
Google Play-কে শুধু অফিস অ্যাকাউন্টে সীমাবদ্ধ করতে, আপনার DPC অ্যাকাউন্টের ইমেল আইডি জানার সাথে সাথেই allowed_accounts-কে
একক ম্যানেজ করা অ্যাকাউন্ট হিসেবে সেট করুন। একটি
খালি স্ট্রিং Google Play-তে কোনও অ্যাকাউন্ট ব্যবহার করা থেকে লোকজনকে আটকায়।
এন্টারপ্রাইজ ফ্যাক্টরি রিসেট প্রোটেকশন চালু করুন
এন্টারপ্রাইজ ফ্যাক্টরি রিসেট প্রোটেকশন ব্যবহার করে, সংস্থাগুলি নির্দিষ্ট করতে পারে যে কোন Google অ্যাকাউন্টগুলি ফ্যাক্টরি রিসেট করা ডিভাইসকে প্রভিশন করতে পারে।
গ্রাহকের ফ্যাক্টরি রিসেট প্রোটেকশন ডিভাইস চুরি হওয়া আটকানোর জন্য ডিজাইন করা হয়েছে। অননুমোদিত ফ্যাক্টরি রিসেটের (যেমন EMM ব্যবহার করা) পরে কাউকে ডিভাইসটি প্রভিশন করার অনুমতি দেওয়ার আগে, সেট-আপ উইজার্ডের জন্য ব্যবহারকারীকে ডিভাইসের ব্যক্তিগত প্রোফাইলে আগে থেকে থাকা যেকোনও Google অ্যাকাউন্টের মাধ্যমে যাচাই করতে হবে।
এন্টারপ্রাইজ পরিবেশে, কোনও কর্মচারী প্রতিষ্ঠান ছেড়ে চলে গেলে, কর্মচারীর ডিভাইস ম্যানেজ করার জন্য ফ্যাক্টরি রিসেট একটি গুরুত্বপূর্ণ টুল। তবে, সংস্থা যদি কোনও কর্মীর অ্যাকাউন্ট ক্রেডেনশিয়াল না জানে, তাহলে ফ্যাক্টরি রিসেট প্রোটেকশন, সংস্থাকে অন্য কোনও কর্মীকে ডিভাইস ইস্যু করা থেকে ব্লক করতে পারে।
ফ্যাক্টরি রিসেটের পরে প্রভিশনিং নিয়ন্ত্রণ করা
ডিভাইস মালিক মোডে রান করার সময়, ফ্যাক্টরি রিসেটের পরে কোন অ্যাকাউন্টগুলি ডিভাইস
প্রভিশন করার জন্য অনুমোদিত তা নিয়ন্ত্রণ করতে আপনার DPC
setFactoryResetProtectionPolicy() ব্যবহার করতে পারে। এই কনফিগারেশন
null-এ সেট করা থাকলে বা খালি তালিকা হিসেবে সেট করা থাকলে, ফ্যাক্টরি রিসেট করার পরে
ডিভাইস প্রভিশন করার জন্য অনুমোদিত অ্যাকাউন্টগুলি হল ডিভাইসের ব্যক্তিগত প্রোফাইলের
অ্যাকাউন্ট।
সম্পূর্ণ ম্যানেজ করা ডিভাইসের লাইফটাইম জুড়ে DPC এইসব অ্যাকাউন্ট কনফিগার করতে পারে।
- আইটি অ্যাডমিন People API থেকে
people.getপদ্ধতি ব্যবহার করতে পারবেন বিশেষ ভ্যালুme-এর সাথে। এটি লগ-ইন করা অ্যাকাউন্টের জন্যuserIdফিরিয়ে আনে।userID,resourceNameকীতেpeople/[userId]ফর্ম্যাটে ইন্টিজার স্ট্রিং হিসেবে ফেরত দেওয়া হয়। নতুন তৈরি করা অ্যাকাউন্ট ৭২ ঘণ্টার জন্য ফ্যাক্টরি রিসেট করার উদ্দেশ্যে উপলভ্য নাও হতে পারে। - এছাড়াও, আপনি ফ্যাক্টরি রিসেট করার পরে ডিভাইস আনলক করার জন্য এক বা একাধিক আইটি অ্যাডমিনকে অনুমতি দিতে চাইতে পারেন। এইসব আইটি অ্যাডমিনদের প্রত্যেককে তাদের Google অ্যাকাউন্টে লগ-ইন করতে বলুন এবং
এছাড়াও, ধাপ ১ অনুসরণ করে তাদের
userIdআপনার সাথে শেয়ার করতে বলুন, যাতে আপনি পরবর্তী ধাপে তালিকায় এইসবuserIdsযোগ করতে পারেন। - DPC,
setFactoryResetProtectionPolicy()ব্যবহার করে উপযুক্ত অ্যাপ সংক্রান্ত বিধিনিষেধ সেট করে, যাতেuserId-এর তালিকা সেট করা যায়, যা ফ্যাক্টরি রিসেট ডিভাইসকে প্রভিশন করতে পারে। - DPC সেইসব অ্যাকাউন্ট চালু করে যেগুলি ফ্যাক্টরি রিসেটের পরে ডিভাইস প্রভিশন করতে পারে। এটি করার জন্য ব্যাকগ্রাউন্ড সংক্রান্ত বিধিনিষেধের কারণে ড্রপ হওয়া আটকাতে এক্সপ্লিসিট ইনটেন্ট হিসেবে
com.google.android.gms.auth.FRP_CONFIG_CHANGEDব্রডকাস্ট পাঠানো হয়।
Kotlin
const val ACTION_FRP_CONFIG_CHANGED = "com.google.android.gms.auth.FRP_CONFIG_CHANGED" const val GMSCORE_PACKAGE = "com.google.android.gms" // ... // List of userId that can provision a factory reset device. // You can use the value returned calling people/me endpoint. val accountIds = listOf("000000000000000000000") dpm.setFactoryResetProtectionPolicy( adminName, FactoryResetProtectionPolicy.Builder() .setFactoryResetProtectionAccounts(accountIds) .setFactoryResetProtectionEnabled(true) .build() ) val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED) frpChangedIntent.setPackage(GMSCORE_PACKAGE) context.sendBroadcast(frpChangedIntent)
জাভা
static final String ACTION_FRP_CONFIG_CHANGED = "com.google.android.gms.auth.FRP_CONFIG_CHANGED"; static final String GMSCORE_PACKAGE = "com.google.android.gms"; // ... // List of userId that can provision a factory reset device. // You can use the value returned calling people/me endpoint. List<String> accountIds = new ArrayList<String>(); accountIds.add("000000000000000000000"); dpm.setFactoryResetProtectionPolicy( adminName, new FactoryResetProtectionPolicy.Builder() .setFactoryResetProtectionAccounts(accountIds) .setFactoryResetProtectionEnabled(true) .build()); Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED); frpChangedIntent.setPackage(GMSCORE_PACKAGE); context.sendBroadcast(frpChangedIntent);
লিগ্যাসি
API লেভেল ৩০-এর সাথে চালু করা setFactoryResetProtectionPolicy() ব্যবহার করতে পারে না এমন ডিভাইসের জন্য,
আপনার DPC com.google.android.gms প্যাকেজের জন্য factoryResetProtectionAdmin ম্যানেজ করা কনফিগারেশনে
বেছে নেওয়া অ্যাকাউন্ট যোগ করতে setApplicationRestrictions ব্যবহার করতে পারে।
Kotlin
const val GOOGLE_PLAY_APK = "com.android.vending" const val FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin" const val DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin" const val GMSCORE_PACKAGE = "com.google.android.gms" // ... val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK) val newConfig = Bundle(existingConfig) newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, false) newConfig.putString(FACTORY_RESET_PROTECTION_ADMIN, googleAccounts) dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig) val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED) frpChangedIntent.setPackage(GMSCORE_PACKAGE) context.sendBroadcast(frpChangedIntent)
জাভা
static final String GOOGLE_PLAY_APK = "com.android.vending"; static final String FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin"; static final String DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin"; static final String GMSCORE_PACKAGE = "com.google.android.gms"; // ... Bundle existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK); Bundle newConfig = new Bundle(existingConfig); newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, false); newConfig.putStringArray(FACTORY_RESET_PROTECTION_ADMIN, accountIds.toArray(new String[accountIds.size()])); dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig); Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED); frpChangedIntent.setPackage(GMSCORE_PACKAGE); context.sendBroadcast(frpChangedIntent);
এন্টারপ্রাইজ ফ্যাক্টরি রিসেট প্রোটেকশন বন্ধ করুন
ফ্যাক্টরি রিসেট প্রোটেকশন বন্ধ করতে, আপনার DPC
setFactoryResetProtectionPolicy()ভ্যালু পাস করে null ব্যবহার করতে পারে।
Kotlin
const val ACTION_FRP_CONFIG_CHANGED = "com.google.android.gms.auth.FRP_CONFIG_CHANGED" const val GMSCORE_PACKAGE = "com.google.android.gms" // ... dpm.setFactoryResetProtectionPolicy(adminName, null) val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED) frpChangedIntent.setPackage(GMSCORE_PACKAGE) context.sendBroadcast(frpChangedIntent)
জাভা
static final String ACTION_FRP_CONFIG_CHANGED = "com.google.android.gms.auth.FRP_CONFIG_CHANGED"; static final String GMSCORE_PACKAGE = "com.google.android.gms"; // ... dpm.setFactoryResetProtectionPolicy(adminName, null); Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED); frpChangedIntent.setPackage(GMSCORE_PACKAGE); context.sendBroadcast(frpChangedIntent);
লিগ্যাসি
API লেভেল ৩০-এর সাথে চালু করা setFactoryResetProtectionPolicy() ব্যবহার করতে পারে না এমন ডিভাইসের জন্য,
আপনার DPC com.google.android.gms প্যাকেজের জন্য disableFactoryResetProtectionAdmin ম্যানেজ করা
কনফিগারেশনে true-এর কী ভ্যালু সেট করতে
setApplicationRestrictions ব্যবহার করতে পারে।
Kotlin
const val GOOGLE_PLAY_APK = "com.android.vending" const val FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin" const val DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin" const val GMSCORE_PACKAGE = "com.google.android.gms" // ... val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK) val newConfig = Bundle(existingConfig) newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, true) dpm.setApplicationRestrictions( adminName, GOOGLE_PLAY_SERVICES_PACKAGE, restrictions ) val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED) frpChangedIntent.setPackage(GMSCORE_PACKAGE) context.sendBroadcast(frpChangedIntent)
জাভা
static final String GOOGLE_PLAY_APK = "com.android.vending"; static final String FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin"; static final String DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin"; static final String GMSCORE_PACKAGE = "com.google.android.gms"; // ... Bundle existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK); Bundle newConfig = new Bundle(existingConfig); newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, true); dpm.setApplicationRestrictions( adminName, GOOGLE_PLAY_SERVICES_PACKAGE, restrictions); Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED); frpChangedIntent.setPackage(GMSCORE_PACKAGE); context.sendBroadcast(frpChangedIntent);
এন্টারপ্রাইজ প্রসেস লগ ও রিমোট বাগ রিপোর্ট মনিটর করা
আপনার EMM কনসোলে, একজন অ্যাডমিন এন্টারপ্রাইজ প্রসেস লগ এবং রিমোট বাগ রিপোর্ট ব্যবহার করে সম্পূর্ণ ম্যানেজ করা ডিভাইসগুলি মনিটর করতে পারেন।
এন্টারপ্রাইজ ডিভাইসের অ্যাক্টিভিটি লগ করুন
ডিভাইস মালিক মোডে চলা DPC, অ্যাপ লঞ্চ, Android ডিবাগ ব্রিজ (adb) অ্যাক্টিভিটি এবং স্ক্রিন আনলক সহ ডিভাইসের অ্যাক্টিভিটি রিমোটলি ট্র্যাক করে সন্দেহজনক অ্যাক্টিভিটি শনাক্ত করতে পারে। প্রসেস লগের জন্য ব্যবহারকারীর সম্মতির প্রয়োজন হয় না।
লগিং চালু বা বন্ধ করতে, DPC setSecurityLoggingEnabled() কল করে।
লগের নতুন ব্যাচ উপলভ্য হলে, DeviceAdminReceiver
onSecurityLogsAvailable() কলব্যাক পায়। লগ ফিরিয়ে আনতে (কলব্যাক পাওয়ার পরে), DPC retrieveSecurityLogs() কল করে।
এছাড়াও, DPC retrievePreRebootSecurityLogs() কল করে আগের রিবুট সাইকেলে তৈরি হওয়া নিরাপত্তা
লগ আনতে পারে। এটি হল শেষবার ডিভাইস রিবুট করা এবং
তার আগেরবার রিবুট করার মধ্যে সময়ের ব্যবধান। যেসব ডিভাইসে কাজ করে না
retrieveSecurityLogs() null রিটার্ন করে। আপনার অ্যাপ যদি retrievePreRebootSecurityLogs() এবং retrieveSecurityLogs(),
উভয় ব্যবহার করে লগ রিট্রিভ করে, তাহলে আপনাকে
ডুপ্লিকেট এন্ট্রি চেক করতে হবে।
মনে রাখবেন: এই ফিচারটি শুধুমাত্র সম্পূর্ণভাবে ম্যানেজ করা ডিভাইসে অ্যাক্টিভিটি লগ করে যেখানে একজন ব্যবহারকারী
বা ডিভাইসে অ্যাফিলিয়েট করা ব্যবহারকারী আছেন। এই ফিচার ব্যক্তিগত ডিভাইসে কাজ করে না, কারণ এটি ডিভাইস-জুড়ে অ্যাক্টিভিটি লগ করে।
নিরাপত্তা সংক্রান্ত ইভেন্ট-পরবর্তী অডিটিংয়ের ক্ষেত্রে এই সেটিং উপযোগী হতে পারে কারণ এটি নিম্নলিখিত ধরনের অ্যাকশন লগ করে:
- প্রতিবার অ্যাপ নতুন করে চালু করা হলে। এর ফলে, কোনও ম্যালওয়্যার থাকলে তা শনাক্ত করা যেতে পারে যা কোনও আপোস করা অ্যাপের মাধ্যমে শুরু হয়।
- কোনও ডিভাইসে আনলক করার ব্যর্থ চেষ্টা। এটি শনাক্ত করতে পারে যে অল্প সময়ের মধ্যে একাধিকবার আনলক করার চেষ্টা করা হয়েছে কিনা।
- ব্যবহারকারী USB কেবেল ব্যবহার করে কম্পিউটারের সাথে ডিভাইস কানেক্ট করলে সম্ভাব্য ক্ষতিকর adb কমান্ড।
কীভাবে লগ পড়তে হয় সেই সম্পর্কে বিস্তারিত জানতে, SecurityLog দেখুন।
ডেভেলপ ও পরীক্ষা করার সময়, আপনি সিস্টেমকে বাধ্য করতে পারেন যাতে আগে থেকে থাকা যেকোনও নিরাপত্তা লগ আপনার DPC-তে উপলভ্য হয়—আপনাকে পুরো ব্যাচের জন্য অপেক্ষা করতে হবে না। Android 9.0 (API লেভেল 28) বা তার পরবর্তী যেকোনও ভার্সনে, আপনার টার্মিনালে নিম্নলিখিত Android ডিবাগ ব্রিজ (adb) কমান্ড রান করুন:
adb shell dpm force-security-logs
আপনি কত ঘন ঘন টুলটি ব্যবহার করতে পারবেন তা সিস্টেম সীমিত করে এবং টার্মিনাল আউটপুটে ইচ্ছাকৃতভাবে
ধীরগতির রিপোর্ট করে। লগ উপলভ্য থাকলে, আপনার
DPC onSecurityLogsAvailable() কলব্যাক পায়।
রিমোটলি বাগ রিপোর্টের জন্য অনুরোধ করুন
ডিভাইসের মালিক মোডে চলা DPC, শুধুমাত্র একজন ব্যবহারকারী বা অ্যাফিলিয়েটেড ব্যবহারকারী সহ ব্যবহারকারীর ডিভাইসের জন্য রিমোটলি ত্রুটির প্রতিবেদনের অনুরোধ করতে পারে। ত্রুটির প্রতিবেদন ঠিক যে মুহূর্তে ত্রুটির প্রতিবেদন চাওয়া হয় সেই মুহূর্তের ডিভাইসের অ্যাক্টিভিটি ক্যাপচার করে, তবে লগক্যাট বাফার কত ঘন ঘন রিফ্রেশ হয় তার উপর নির্ভর করে আগের কয়েক ঘণ্টার অ্যাক্টিভিটিও অন্তর্ভুক্ত করতে পারে।
রিমোটলি বাগ রিপোর্টের অনুরোধ করতে, DPC requestBugreport() কল করে:
- ব্যবহারকারী ত্রুটির রিপোর্ট শেয়ার করার অনুমতি দিলে, DPC
onBugreportShared()ব্যবহার করে ত্রুটির রিপোর্ট পায়। - কোনও ব্যবহারকারী ত্রুটির রিপোর্ট শেয়ার করার অনুরোধ প্রত্যাখ্যান করলে, DPC
onBugreportSharingDeclined()ব্যবহার করে শেয়ার করার অনুরোধ প্রত্যাখ্যান করা হয়েছে মেসেজ পায়। - বাগ রিপোর্ট ব্যর্থ হলে, DPC
onBugreportFailed()-এর সাথেBUGREPORT_FAILURE_FAILED_COMPLETINGঅথবাBUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLEদেখতে পায়।
ক্লায়েন্ট সার্টিফিকেটে অ্যাক্সেস দেওয়া এবং অ্যাক্সেস সরিয়ে দেওয়া
প্রোফাইল মালিক বা ডিভাইস মালিক মোডে চলা DPC কোনও থার্ড-পার্টি অ্যাপকে
সার্টিফিকেট ম্যানেজ করার ক্ষমতা দিলে, অ্যাপটি ব্যবহারকারীর হস্তক্ষেপ ছাড়াই
নিজের ইনস্টল করা সার্টিফিকেটে নিজেকে অ্যাক্সেস দিতে পারে। কোনও প্রোফাইলের সব অ্যাপ অ্যাক্সেস করতে পারে এমন সার্টিফিকেট ইনস্টল করতে, installKeyPair() ব্যবহার করুন।
কোন প্যারামিটার কনফিগার করতে হবে তা জানতে, installKeyPair() দেখুন। এই ফিচার
সার্টিফিকেট ম্যানেজ করার জন্য আগে থেকে থাকা API-এর সাথে কাজ করে।
ডিপ্লয়মেন্টের পরিস্থিতি
installKeyPair() পদ্ধতি ছাড়া:
- ব্যবহারকারীকে সার্টিফিকেটের নামে ট্যাপ করতে হবে এবং প্রতিবার অনুমতি দিন বিকল্পে ট্যাপ করতে হবে যাতে তিনি সার্টিফিকেটে অ্যাক্সেস দিতে পারেন।
- সার্টিফিকেট ইনস্টল করার সময় ব্যবহারকারীরা একটি প্রম্পট দেখতে পান এবং তাদের সার্টিফিকেটের নাম দিতে হয়।
installKeyPair() পদ্ধতির মাধ্যমে:
- সার্টিফিকেটে অ্যাক্সেস দেওয়ার জন্য ব্যবহারকারীকে প্রতিবার অনুমতি দিন বিকল্পে ট্যাপ করতে হবে না।
- ব্যবহারকারীরা সার্টিফিকেটের নাম পরিবর্তন করতে পারবেন না।
- অ্যাডমিনদের আরও বেশি নিয়ন্ত্রণ থাকে কারণ তারা নির্দিষ্ট সার্টিফিকেটে অ্যাক্সেস থাকা উচিত নয় এমন অ্যাপের জন্য সার্টিফিকেট ব্লক করতে পারেন।
ক্লায়েন্ট সার্টিফিকেট সরানো
ক্লায়েন্ট সার্টিফিকেটে অ্যাক্সেস দেওয়ার পরে, installKeyPair()-এর মাধ্যমে ইনস্টল করা ক্লায়েন্ট সার্টিফিকেট রিমোটলি সরাতে, removeKeyPair()-এ কল করুন।
ডিভাইস মালিক মোড বা প্রোফাইল মালিক মোডে চলা DPC বা ডেলিগেট করা
সার্টিফিকেট ইনস্টলার removeKeyPair() কল করতে পারে। এটি একটি
সার্টিফিকেট এবং ব্যক্তিগত কী পেয়ার সরিয়ে দেয় যা একটি নির্দিষ্ট ব্যক্তিগত কী উপনামের অধীনে ইনস্টল করা আছে।
ডিপ্লয়মেন্টের পরিস্থিতি
কোনও সংস্থা আরও সুরক্ষিত ক্লায়েন্ট সার্টিফিকেট ব্যবহার করতে চাইলে এই ফিচার ব্যবহার করুন। অ্যাডমিন নতুন সার্টিফিকেট প্রকাশ করলে এবং সেটি ডিস্ট্রিবিউট করতে অনেক সময় লাগলে, মাইগ্রেশন সম্পূর্ণ হওয়ার পরে অ্যাডমিন বাতিল করা সার্টিফিকেট প্রত্যাহার করতে পারবেন।
পাসকোড রিসেট করার নিরাপদ পদ্ধতি
আপনার DPC, আগে থেকে রেজিস্টার করা, সুরক্ষিত টোকেন দিয়ে পরিবর্তনটি অনুমোদন করে ব্যবহারকারীর পাসওয়ার্ড রিসেট করতে পারে। ডিভাইসের মালিক এবং প্রোফাইলের মালিকরা যথাক্রমে ডিভাইস এবং অফিস প্রোফাইলের পাসওয়ার্ড পরিবর্তন করতে
নিরাপদ পাসকোড রিসেট API-কে কল করতে পারেন। নিরাপদ পাসকোড রিসেট করার সুবিধা resetPassword()-এর পরিবর্তে
নিম্নলিখিত উন্নতিগুলি নিয়ে আসে:
- ফাইল-ভিত্তিক এনক্রিপশন ব্যবহার করা ডিভাইসে রিবুট করার পরে ব্যবহারকারী ডিভাইস বা প্রোফাইল আনলক করার আগে আপনার DPC পাসকোড রিসেট করতে পারে।
- পাসকোড রিসেট করার পরে Android Keystore ব্যবহারকারী-যাচাইকৃত কী রেখে দেয়।
আপনার DPC বিল্ড Android 8.0 (API লেভেল 26) বা তার পরবর্তী যেকোনও ভার্সনকে টার্গেট করলে, আপনার উচিত সুরক্ষিত পাসকোড রিসেট ব্যবহার করা। Android 8.0 বা তার পরবর্তী যেকোনও ভার্সনকে টার্গেট করা DPC-তে resetPassword() কল করলে
SecurityException থ্রো করে, তাই আপনাকে
DPC আপডেট করতে হতে পারে।
টোকেন সেট ও অ্যাক্টিভেট করা
পাসওয়ার্ড রিসেট করার আগে আপনার DPC-কে টোকেন সেট ও অ্যাক্টিভেট করতে হবে। আপনার DPC টোকেনটি সরাসরি ব্যবহার করতে নাও পারে, তাই আইটি অ্যাডমিনের ব্যবহারের আগেই আপনাকে টোকেনটি সেট করতে হবে।
পাসওয়ার্ড রিসেট টোকেন হল ক্রিপ্টোগ্রাফিক্যালি শক্তিশালী র্যান্ডম ভ্যালু এবং এটি কমপক্ষে ৩২ বাইট দীর্ঘ হতে হবে। প্রতিটি ডিভাইস ও প্রোফাইলের জন্য টোকেন তৈরি করুন—আপনার তৈরি করা টোকেন আবার ব্যবহার বা শেয়ার করবেন না।
আমরা টোকেন বা এনক্রিপ্ট করা টোকেন ডিক্রিপ্ট করার উপায় সার্ভারে স্টোর করার জন্য সাজেস্ট করি। আপনি যদি ক্রেডেনশিয়াল এনক্রিপ্ট করা স্টোরেজে টোকেন স্থানীয়ভাবে স্টোর করেন, তাহলে ব্যবহারকারী ডিভাইস বা প্রোফাইল আনলক না করা পর্যন্ত আপনার DPC পাসওয়ার্ড রিসেট করতে পারবে না। আপনি যদি ডিভাইসের এনক্রিপ্ট করা স্টোরেজে টোকেন স্থানীয়ভাবে স্টোর করেন এবং সেটি যদি হ্যাক হয়ে যায়, তাহলে কোনও অ্যাটাকার টোকেন ব্যবহার করে অফিস প্রোফাইল বা প্রাথমিক ব্যবহারকারীর অ্যাক্সেস পেয়ে যেতে পারে।
আপনি নিজের DPC-তে নতুন টোকেন জেনারেট করতে অথবা সার্ভার থেকে টোকেন আনতে পারবেন। নিচের উদাহরণে দেখানো হয়েছে যে DPC নিজেই টোকেন তৈরি করে এবং সার্ভারে রিপোর্ট করে:
Kotlin
val token = ByteArray(32) // Generate a new token val random = SecureRandom() random.nextBytes(token) // Set the token to use at a later date val success: Boolean success = dpm.setResetPasswordToken(DeviceAdminReceiver.getComponentName(context), token) // Activate the token and update success variable... // Store the token on a server if (success) { sendTokenToServer(token) }
জাভা
byte token[] = new byte[32]; // Minimum size token accepted // Generate a new token SecureRandom random = new SecureRandom(); random.nextBytes(token); // Set the token to use at a later date boolean success; success = dpm.setResetPasswordToken(DeviceAdminReceiver.getComponentName(getContext()), token); // Activate the token and update success variable ... // Store the token on a server if (success) { sendTokenToServer(token); }
বেশিরভাগ ক্ষেত্রে, আপনার DPC-কে টোকেন সেট করার পরে সেটি অ্যাক্টিভেট করতে হয়। তবে, ব্যবহারকারীর
লক স্ক্রিন পাসওয়ার্ড না থাকলে, সিস্টেম সরাসরি টোকেন
অ্যাক্টিভেট করে। টোকেন অ্যাক্টিভেট করতে, ব্যবহারকারীকে তার ক্রেডেনশিয়াল কনফার্ম করতে বলুন।
আপনার DPC, KeyguardManager পদ্ধতি কল করতে পারে
createConfirmDeviceCredentialIntent() যাতে Intent পাওয়া যায় যা কনফার্মেশন
শুরু করে। ইউজার ইন্টারফেসে ডিভাইস ব্যবহারকারীকে ব্যাখ্যা করুন, কেন আপনি
তাকে যাচাই করতে বলছেন। নিচের স্নিপেট থেকে জানতে পারবেন যে আপনার DPC-তে কীভাবে
টোকেন অ্যাক্টিভেট করবেন:
Kotlin
// In your DPC, you'll need to localize the user prompt val ACTIVATE_TOKEN_PROMPT = "Use your credentials to enable remote password reset" val ACTIVATE_TOKEN_REQUEST = 1 // Create or fetch a token and set it in setResetPasswordToken() ... val keyguardManager = context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager val confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent(null, ACTIVATE_TOKEN_PROMPT) if (confirmIntent != null) { startActivityForResult(confirmIntent, ACTIVATE_TOKEN_REQUEST) // Check your onActivityResult() callback for RESULT_OK } else { // Null means the user doesn't have a lock screen so the token is already active. // Call isResetPasswordTokenActive() if you need to confirm }
জাভা
// In your DPC, you'll need to localize the user prompt static final String ACTIVATE_TOKEN_PROMPT = "Use your credentials to enable remote password reset"; static final int ACTIVATE_TOKEN_REQUEST = 1; // Create or fetch a token and set it in setResetPasswordToken() ... KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); Intent confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent( null, ACTIVATE_TOKEN_PROMPT); if (confirmIntent != null) { startActivityForResult(confirmIntent, ACTIVATE_TOKEN_REQUEST); // Check your onActivityResult() callback for RESULT_OK } else { // Null means the user doesn't have a lock screen so the token is already active. // Call isResetPasswordTokenActive() if you need to confirm }
ডিভাইস রিবুট হওয়ার আগে আপনার DPC-এর সেট করা টোকেন অ্যাক্টিভেট করতে হবে। Android মেমরিতে অ্যাক্টিভেট না করা টোকেন স্টোর করে এবং রিবুট করার পরে টোকেন সেভ করে রাখে না। টোকেন অ্যাক্টিভেট করার আগে ব্যবহারকারী ডিভাইস রিবুট করলে, আপনার DPC একই টোকেন আবার সেট করতে বা নতুন টোকেন তৈরি করতে পারে।
আপনার DPC, isResetPasswordTokenActive() কল করে এবং ফলাফল true কিনা তা চেক করে,
কোনও টোকেন অ্যাক্টিভ আছে কিনা তা কনফার্ম করতে পারবে।
আপনার DPC টোকেন সেট ও অ্যাক্টিভেট করার পরে, আপনার DPC টোকেন মুছে না দেওয়া বা পরিবর্তন না করা পর্যন্ত (অথবা ডিভাইস ফ্যাক্টরি রিসেট না করা পর্যন্ত) এটি বৈধ থাকে। টোকেন পাসওয়ার্ডের উপর নির্ভর করে না এবং ব্যবহারকারী পাসওয়ার্ড পরিবর্তন বা মুছে দিলেও টোকেন প্রভাবিত হয় না।
টোকেন মুছে দেওয়া
আপনার DPC আগে সেট করা টোকেন মুছে ফেলতে আপনি clearResetPasswordToken() নম্বরে কল করতে পারেন। আপনাকে হয়ত কোনও চুরি হয়ে যাওয়া টোকেন তুলে নিতে হবে অথবা আপনি হয়ত
পাসওয়ার্ড রিসেট করার ক্ষমতা সরিয়ে দিতে চাইবেন। আপনার DPC-তে কীভাবে এটি করবেন তা নিচের
স্যাম্পেল থেকে জানতে পারবেন:
Kotlin
val dpm = getDpm() val admin = DeviceAdminReceiver.getComponentName(requireActivity()) // Clear the token if (!dpm.clearResetPasswordToken(admin)) { // Report the failure and possibly try later ... }
জাভা
DevicePolicyManager dpm = getDpm(); ComponentName admin = DeviceAdminReceiver.getComponentName(getActivity()); // Clear the token if (!dpm.clearResetPasswordToken(admin)) { // Report the failure and possibly try later ... }
পাসওয়ার্ড রিসেট করুন
আইটি অ্যাডমিনকে পাসওয়ার্ড রিসেট করতে হলে, resetPasswordWithToken()-এ কল করুন এবং আপনার DPC-এর সেট করা ও আগে থেকে অ্যাক্টিভেট করা
টোকেন পাস করুন:
Kotlin
val token: ByteArray = getTokenFromServer() val newPassword = "password" try { val result: Boolean = dpm.resetPasswordWithToken( DeviceAdminReceiver.getComponentName(requireContext()), newPassword, token, 0 ) if (result) { // The password is now 'password' } else { // Using 'password' doesn't meet password restrictions } } catch (e: IllegalStateException) { // The token doesn't match the one set earlier. }
জাভা
byte token[] = getTokenFromServer(); String newPassword = "password"; try { boolean result = dpm.resetPasswordWithToken( DeviceAdminReceiver.getComponentName(getContext()), newPassword, token, 0); if (result) { // The password is now 'password' } else { // Using `password` doesn't meet password restrictions } } catch (IllegalStateException e) { // The token doesn't match the one set earlier. }
resetPasswordWithToken()-এ কল করলে false রিটার্ন করে এবং পাসওয়ার্ড পরিবর্তন হয় না,
যখন নতুন পাসওয়ার্ড নিম্নলিখিত সীমাবদ্ধতা পূরণ করে না:
- অক্ষরের সংখ্যা পাসওয়ার্ডের ন্যূনতম দৈর্ঘ্যের শর্ত পূরণ করে। আইটি অ্যাডমিন পাসওয়ার্ডের দৈর্ঘ্যের উপর কোনও সীমাবদ্ধতা সেট করেছেন কিনা তা জানতে
getPasswordMinimumLength()-এ কল করুন। - পাসওয়ার্ডে অক্ষরের রেঞ্জ ও জটিলতা কম্পোজিশন সংক্রান্ত সীমাবদ্ধতা পূরণ করে। কোনও আইটি অ্যাডমিন কম্পোজিশন সংক্রান্ত সীমাবদ্ধতা সেট করেছেন কিনা তা জানতে
getPasswordQuality()-এ কল করুন।
পাসওয়ার্ড কোয়ালিটি সংক্রান্ত সীমাবদ্ধতার জন্য পাসওয়ার্ড সেট করার প্রয়োজন না হলে, পাসওয়ার্ড সরাতে আপনি null বা একটি খালি স্ট্রিং resetPasswordWithToken()-এ
পাস করতে পারেন।
অফিস প্রোফাইল নিরাপত্তা সংক্রান্ত চ্যালেঞ্জ
প্রোফাইল মালিক মোডে চলা DPC, ব্যবহারকারীদের কর্মস্থলের প্রোফাইলে চলা অ্যাপের জন্য নিরাপত্তা চ্যালেঞ্জ নির্দিষ্ট করতে বলতে পারে। ব্যবহারকারী কোনও অফিসের অ্যাপ খোলার চেষ্টা করলে, সিস্টেম নিরাপত্তা চ্যালেঞ্জ দেখায়। ব্যবহারকারী সফলভাবে নিরাপত্তা চ্যালেঞ্জ সম্পূর্ণ করলে, সিস্টেম ওয়ার্ক প্রোফাইল আনলক করে এবং প্রয়োজন হলে, এটি ডিক্রিপ্ট করে।
অফিস প্রোফাইল নিরাপত্তা চ্যালেঞ্জ কীভাবে কাজ করে
- DPC যদি
ACTION_SET_NEW_PASSWORDইনটেন্ট পাঠায়, তাহলে সিস্টেম ব্যবহারকারীকে নিরাপত্তা চ্যালেঞ্জ সেট-আপ করার জন্য প্রম্পট করে। - এছাড়াও, DPC ব্যবহারকারীকে ডিভাইস লক সেট করার জন্য প্রম্পট করতে
ACTION_SET_NEW_PARENT_PROFILE_PASSWORDইনটেন্ট পাঠাতে পারে।
DPC, অন্যান্য ডিভাইসের পাসওয়ার্ডের জন্য নীতির থেকে আলাদাভাবে ওয়ার্ক চ্যালেঞ্জের জন্য পাসওয়ার্ড নীতি সেট করতে পারে। যেমন, ডিভাইস চ্যালেঞ্জ উত্তরের ন্যূনতম দৈর্ঘ্য অন্যান্য পাসওয়ার্ডের জন্য প্রয়োজনীয় দৈর্ঘ্যের থেকে আলাদা হতে পারে। DPC, DevicePolicyManager-এর মতো সাধারণ পদ্ধতি ব্যবহার করে চ্যালেঞ্জ নীতি সেট করে, যেমন setPasswordQuality() এবং
setPasswordMinimumLength()।
বিবেচ্য বিষয়
- DPC অফিস প্রোফাইলের পাসওয়ার্ড রিসেট করতে পারে, কিন্তু ডিভাইসের (ব্যক্তিগত) পাসওয়ার্ড রিসেট করতে পারে না। কোনও ব্যবহারকারী যদি অফিস ও ব্যক্তিগত পাসওয়ার্ড একই রাখতে চান,
তাহলে অফিস প্রোফাইলে
resetPassword()-এর কারণে পাসওয়ার্ড শুধুমাত্র অফিস প্রোফাইলেই রিসেট হবে এবং পাসওয়ার্ডটি ডিভাইসের লক স্ক্রিনের পাসওয়ার্ডের মতো একই থাকবে না। - DPC,
setOrganizationColor()এবংsetOrganizationName()ব্যবহার করে অফিস চ্যালেঞ্জের জন্য ক্রেডেনশিয়াল স্ক্রিন কাস্টমাইজ করতে পারে। - ডিভাইস অ্যাডমিনরা পাসওয়ার্ড মুছে ফেলতে বা আগে থেকে সেট করা পাসওয়ার্ড পরিবর্তন করতে
resetPassword()ব্যবহার করতে পারবেন না। ডিভাইস অ্যাডমিন এখনও পাসওয়ার্ড সেট করতে পারবেন, তবে শুধুমাত্র ডিভাইসে কোনও পাসওয়ার্ড, পিন বা প্যাটার্ন না থাকলে।
অতিরিক্ত তথ্যের জন্য, getParentProfileInstance() এবং DevicePolicyManager-এর অধীনে রেফারেন্স
ডকুমেন্টেশন দেখুন।