ऐप्लिकेशन की भूमिकाओं की सुविधा की मदद से, आईटी एडमिन किसी Android डिवाइस पर मैनेज किए जा रहे ऐप्लिकेशन को खास अधिकार दे सकता है. किसी ऐप्लिकेशन को कोई खास भूमिका असाइन करने पर, उसे बैटरी और बैकग्राउंड में काम करने से जुड़ी पाबंदियों, निलंबन, और हाइबरनेशन (Android 14 और इसके बाद के वर्शन पर) से छूट मिल सकती है.साथ ही, उपयोगकर्ता के कंट्रोल (जैसे कि ऐप्लिकेशन को बंद करना और ऐप्लिकेशन का डेटा मिटाना) को बंद किया जा सकता है (Android 11 और इसके बाद के वर्शन पर). इससे ऐप्लिकेशन बिना किसी रुकावट के अपना ज़रूरी काम कर पाता है. इसके अलावा, ऐप्लिकेशन को असाइन की गई भूमिकाओं के बारे में सूचना दी जा सकती है. इससे ऐप्लिकेशन, उपयोगकर्ता के हस्तक्षेप के बिना खुद को बूटस्ट्रैप कर सकता है.
ज़रूरी शर्तें
डिवाइस को AMAPI पर आधारित ईएमएम मैनेज करता हो. (कस्टम डीपीसी का इस्तेमाल करने वाले ईएमएम काम नहीं करते).
सुविधा का इस्तेमाल करने के लिए, ऐप्लिकेशन तैयार करना
AMAPI SDK टूल को इंटिग्रेट करना सिर्फ़ तब ज़रूरी होता है, जब ऐप्लिकेशन को अपनी असाइन की गई भूमिकाओं के बारे में सूचना चाहिए होती है.इससे ऐप्लिकेशन खुद को बूटस्ट्रैप कर पाता है. इसका मतलब है कि यह उपयोगकर्ता के इंटरैक्शन के बिना अपने-आप लॉन्च हो जाता है.
अपने ऐप्लिकेशन में AMAPI SDK टूल को इंटिग्रेट करना
AMAPI SDK इंटिग्रेशन गाइड में, AMAPI SDK और इसे अपने ऐप्लिकेशन में जोड़ने के तरीके के बारे में ज़्यादा जानकारी दी गई है.
ऐप्लिकेशन के मेनिफ़ेस्ट में ज़रूरी मेटाडेटा जोड़ना
Android Device Policy (ADP) को आपकी क्लास के ComponentName
की जानकारी चाहिए. यह क्लास, NotificationReceiverService
को लागू करती है, ताकि आपके ऐप्लिकेशन को असाइन की गई भूमिकाओं के बारे में सूचना दी जा सके. आपको अपनी सेवा को AndroidManifest.xml
में सही तरीके से टैग करना होगा, ताकि ADP इसे अपने-आप ढूंढ सके.
- आपके ऐप्लिकेशन में सिर्फ़ एक ऐसी सेवा होनी चाहिए जो
enabled
हो और जिसमेंmeta-data
के साथandroid:name
बराबर होcom.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES
- इस सेवा के लिए,
android:exported
कोtrue
पर सेट किया जाना चाहिए meta-data
केandroid:value
को खाली स्ट्रिंग पर सेट किया जाना चाहिए
<service
android:name=".MyNotificationReceiverService"
android:exported="true">
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES" android:value="" />
</service>
अगर आपको COMPANION_APP
भूमिका की जांच करनी है, तो आपको अपनी सेवा में meta-data
भी जोड़ना चाहिए, ताकि Android Device Policy आपके ऐप्लिकेशन को स्थानीय कमांड की स्थिति के अपडेट भेज सके:
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_COMMAND_STATUS" android:value="" />
NotificationReceiverService को बढ़ाने वाली कोई सेवा बनाएं या मौजूदा सेवा को अपडेट करें
अपना मौजूदा NotificationReceiverService
बनाएं या अपडेट करें. साथ ही, अपने ऐप्लिकेशन को असाइन की गई भूमिकाओं को सुनने के लिए, AppRolesListener
लागू करें. अपने ऐप्लिकेशन को असाइन की गई भूमिकाओं को सुनने के लिए, सिर्फ़ getAppRolesListener()
की ज़रूरत होती है. अगर आपके ऐप्लिकेशन को COMPANION_APP
की भूमिका असाइन की गई है, तो आपको getCommandListener()
भी लागू करना चाहिए:
import android.util.Log
import com.google.android.managementapi.approles.AppRolesListener
import com.google.android.managementapi.approles.model.AppRolesSetRequest
import com.google.android.managementapi.approles.model.AppRolesSetResponse
import com.google.android.managementapi.commands.CommandListener
import com.google.android.managementapi.commands.model.Command
import com.google.android.managementapi.notification.NotificationReceiverService
class MyNotificationReceiverService : NotificationReceiverService() {
// If your app wants to listen for roles assigned
override fun getAppRolesListener(): AppRolesListener =
object : AppRolesListener {
override fun onAppRolesSet(request: AppRolesSetRequest): AppRolesSetResponse {
val roleTypes = request.roles.map { role -> role.roleType }
Log.i(TAG, "onAppRolesSet: $roleTypes")
return AppRolesSetResponse.getDefaultInstance()
}
}
// If your app wants to listen for local command status updates
// Only relevant for COMPANION_APP role
override fun getCommandListener(): CommandListener {
return object : CommandListener {
override fun onCommandStatusChanged(command: Command) {
Log.i(TAG, "onCommandStatusChanged")
}
}
}
private companion object {
const val TAG = "MyNotificationReceiverService"
}
}
अगर आपके ऐप्लिकेशन की भूमिकाएं कई बार बदलती हैं, तो आपको कई बार सूचनाएं मिल सकती हैं. सभी भूमिकाएं हटा दिए जाने पर भी, आपके ऐप्लिकेशन को भूमिकाओं की खाली सूची के साथ सूचना दी जाएगी. इस सूचना से, आपका ऐप्लिकेशन बंद होने की स्थिति से बाहर आ जाएगा. साथ ही, आपके ऐप्लिकेशन को मिली छूट के साथ, आपका ऐप्लिकेशन बिना किसी उपयोगकर्ता इंटरैक्शन के खुद को बूटस्ट्रैप कर सकता है. ऐप्लिकेशन की भूमिकाओं से जुड़ी सूचना और छूट की वजह से, आपका ऐप्लिकेशन ACTION_BOOT_COMPLETED
ब्रॉडकास्ट सुन सकता है. अगर आपका ऐप्लिकेशन बूटस्ट्रैप करने के लिए, मैनेज किए जा रहे कॉन्फ़िगरेशन पर निर्भर करता है, तो मैनेज किए जा रहे कॉन्फ़िगरेशन सेट अप करना लेख पढ़ें. इसमें बदलावों को पढ़ने और सुनने का तरीका बताया गया है.
ऐप्लिकेशन की भूमिकाओं से जुड़ी नीतियों के साथ डिवाइस को उपलब्ध कराना
ऐप्लिकेशन डेवलपर, ईएमएम का इस्तेमाल करके या Android Management API के क्विकस्टार्ट को फ़ॉलो करके, अपने ऐप्लिकेशन को भूमिकाएं असाइन करने की सुविधा की जांच कर सकते हैं. AMAPI Colab notebook की मदद से, किसी एंटरप्राइज़ को रजिस्टर किया जा सकता है, नीति बनाई जा सकती है, और डिवाइस को चालू किया जा सकता है.
ऐप्लिकेशन की भूमिकाओं के हिसाब से, ऐप्लिकेशन के लिए नीति सेट करना
ApplicationPolicy.roles
का इस्तेमाल करके, ऐप्लिकेशन की उन भूमिकाओं के साथ policy
सेट अप करें जो आपके ऐप्लिकेशन के लिए ज़रूरी हैं.
यहां दिए गए उदाहरण में, एमटीडी ऐप्लिकेशन के लिए भूमिका को कॉन्फ़िगर करने का तरीका बताया गया है:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
नीति में बताई गई भूमिकाएं असाइन करने से पहले, सिस्टम यह जांच करेगा कि डिवाइस पर मौजूद ऐप्लिकेशन के साइनिंग की के सर्टिफ़िकेट का फ़िंगरप्रिंट, Play Store पर मौजूद फ़िंगरप्रिंट से मेल खाता हो.
अगर फ़िंगरप्रिंट अलग है, तो ऐप्लिकेशन को भूमिकाएं असाइन नहीं की जाएंगी. साथ ही, NonComplianceReason.APP_SIGNING_CERT_MISMATCH
नीति के उल्लंघन की जानकारी EMM को दी जाएगी.
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"signingKeyCerts": [
{ "signingKeyCertFingerprintSha256": "base64-encoded-sha256" }
],
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
अगर आपके ऐप्लिकेशन में मैनेज किया गया कॉन्फ़िगरेशन है, तो आईटी एडमिन, ऐप्लिकेशन की नीति में restriction
के लिए शुरुआती कॉन्फ़िगरेशन सेट अप कर सकता है:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
],
"managedConfiguration": {
"<key>": "<value>"
}
}
]
}