התכונה 'תפקידים באפליקציה' מאפשרת לאדמין IT להעניק הרשאות מיוחדות לאפליקציה מנוהלת במכשיר עם Android. הקצאת תפקיד ספציפי מאפשרת להחריג אפליקציה מהגבלות על צריכת חשמל ופעילות ברקע, מהשעיה, מתרדמה (ב-Android 14 ואילך) ומהשבתה של אמצעי בקרה למשתמשים (כלומר, כולל פעולות משתמש כמו עצירה בכוח ומחיקת נתוני אפליקציה) (ב-Android 11 ואילך), וכך לאפשר לאפליקציה לבצע את הפונקציה הקריטית שלה ללא הפרעה. בנוסף, האפליקציה יכולה לקבל הודעה על התפקידים שהוקצו לה, מה שמאפשר לה לבצע אתחול ללא התערבות המשתמש.
דרישות מוקדמות
המכשיר מנוהל על ידי EMM שמבוסס על AMAPI (אין תמיכה ב-EMM שמשתמשים ב-DPC בהתאמה אישית).
הכנת האפליקציה לשימוש בתכונה
שילוב עם 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
- השירות הזה צריך להיות מוגדר עם הערך
true
ל-android:exported
- הערך
android:value
שלmeta-data
צריך להיות מחרוזת ריקה
<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
. אם האפליקציה שלכם מסתמכת על ההגדרות המנוהלות שלה כדי להפעיל את עצמה, במאמר הגדרת הגדרות מנוהלות מוסבר איך לקרוא שינויים ולהאזין להם.
הקצאת הרשאות למכשיר באמצעות מדיניות של תפקידי אפליקציות
מפתחי אפליקציות יכולים לבדוק את ההקצאה של תפקידים באפליקציה לאפליקציה שלהם באמצעות EMM או באמצעות מדריך למתחילים בנושא Android Management API. ה-notebook של Colab של AMAPI מאפשר לרשום ארגון, ליצור מדיניות ולספק מכשיר.
הגדרת המדיניות לאפליקציה באמצעות תפקידים באפליקציה
מגדירים policy
עם תפקידי האפליקציה שהאפליקציה אמורה לקבל באמצעות ApplicationPolicy.roles
.
בדוגמה הבאה מוצג איך להגדיר את התפקיד לאפליקציות MTD:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
לפני הקצאת התפקידים שצוינו במדיניות, המערכת תבדוק אם טביעת האצבע של אישור מפתח החתימה של האפליקציה במכשיר זהה לזו שבחנות Play.
אם טביעת האצבע שונה, התפקידים לא יוקצו לאפליקציה ותישלח אל ה-EMM הודעה על אי-תאימות של NonComplianceReason.APP_SIGNING_CERT_MISMATCH
.
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"signingKeyCerts": [
{ "signingKeyCertFingerprintSha256": "base64-encoded-sha256" }
],
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
אם לאפליקציה יש הגדרה מנוהלת, אדמין ה-IT יכול להגדיר הגדרה ראשונית לrestriction
הרלוונטיים במדיניות האפליקציה:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
],
"managedConfiguration": {
"<key>": "<value>"
}
}
]
}