Funkcja ról aplikacji umożliwia administratorowi IT przyznawanie specjalnych uprawnień zarządzanej aplikacji na urządzeniu z Androidem. Przypisanie aplikacji określonej roli może zwolnić ją z ograniczeń dotyczących zasilania i działania w tle, zawieszenia, hibernacji (na Androidzie 14 lub nowszym) oraz wyłączyć kontrolę użytkownika (np. działania użytkownika, takie jak wymuszenie zatrzymania i wyczyszczenie danych aplikacji) (na Androidzie 11 lub nowszym), co pozwoli jej wykonywać kluczowe funkcje bez przerw. Dodatkowo aplikacja może otrzymywać powiadomienia o przypisanych jej rolach, co pozwala jej uruchamiać się bez interwencji użytkownika.
Wymagania wstępne
Urządzenie jest zarządzane przez usługę EMM opartą na interfejsie AMAPI (usługi EMM korzystające z niestandardowego kontrolera zasad urządzenia nie są obsługiwane).
Przygotowanie aplikacji do korzystania z tej funkcji
Integracja z pakietem AMAPI SDK jest wymagana tylko wtedy, gdy aplikacja ma otrzymywać powiadomienia o przypisanych rolach, co umożliwia jej samodzielne uruchamianie (tzn. automatyczne uruchamianie bez interakcji użytkownika).
Integracja z pakietem AMAPI SDK w aplikacji
Więcej informacji o pakiecie SDK AMAPI i sposobie dodawania go do aplikacji znajdziesz w przewodniku po integracji pakietu SDK AMAPI.
Dodawanie wymaganych metadanych do pliku manifestu aplikacji
Aplikacja Android Device Policy (ADP) musi znać ComponentName
Twojej klasy, która implementuje NotificationReceiverService
, aby powiadamiać aplikację o przypisanych rolach. Musisz odpowiednio otagować usługę w AndroidManifest.xml
, aby mogła być automatycznie wykrywana przez ADP.
- Aplikacja musi mieć dokładnie 1 usługę, która jest
enabled
i mameta-data
zandroid:name
równymcom.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES
- W przypadku tej usługi musi być ustawiona wartość
android:exported
natrue
. android:value
wmeta-data
musi być ustawiony na pusty ciąg znaków.
<service
android:name=".MyNotificationReceiverService"
android:exported="true">
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES" android:value="" />
</service>
Jeśli testujesz rolę COMPANION_APP
, dodaj do usługi ten element:meta-data
, aby aplikacja Android Device Policy mogła wysyłać do Twojej aplikacji lokalne aktualizacje stanu poleceń:
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_COMMAND_STATUS" android:value="" />
Utwórz usługę rozszerzającą NotificationReceiverService (lub zaktualizuj istniejącą).
Utwórz lub zaktualizuj istniejący NotificationReceiverService
i wdroż interfejs AppRolesListener
, aby nasłuchiwać ról przypisanych do Twojej aplikacji. Do nasłuchiwania ról przypisanych do aplikacji wymagany jest tylko interfejs getAppRolesListener()
. Jeśli do Twojej aplikacji przypisana jest rola COMPANION_APP
, musisz też wdrożyć interfejs 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"
}
}
Jeśli role aplikacji zmienią się kilka razy, może ona otrzymać powiadomienie kilka razy. Jeśli usuniesz wszystkie role, aplikacja nadal będzie otrzymywać powiadomienia z pustą listą ról. To powiadomienie wyłączy stan zatrzymania aplikacji. Wraz z wyjątkami przyznanymi aplikacji będzie ona mogła uruchomić się samodzielnie bez interakcji użytkownika. Dzięki powiadomieniom o rolach aplikacji i wyjątkom Twoja aplikacja może nasłuchiwać transmisji ACTION_BOOT_COMPLETED
. Jeśli aplikacja zależy od konfiguracji zarządzanych, aby się uruchomić, przeczytaj artykuł Konfigurowanie konfiguracji zarządzanych, aby dowiedzieć się, jak odczytywać zmiany i nasłuchiwać ich.
Aprowizowanie urządzenia za pomocą zasad dotyczących ról aplikacji
Deweloperzy aplikacji mogą testować przypisywanie ról aplikacji do aplikacji za pomocą usługi EMM lub korzystając z krótkiego wprowadzenia do interfejsu Android Management API. Notatnik Colab AMAPI umożliwia rejestrację firmy, tworzenie zasad i wdrażanie urządzenia.
Ustawianie zasad dotyczących aplikacji za pomocą ról aplikacji
Skonfiguruj policy
z rolami aplikacji, które ma mieć Twoja aplikacja, używając ApplicationPolicy.roles
.
Poniższy przykład pokazuje, jak skonfigurować rolę dla aplikacji MTD:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
Przed przypisaniem ról zgodnie z zasadami system sprawdzi, czy odcisk palca certyfikatu klucza podpisywania aplikacji na urządzeniu jest zgodny z odciskiem palca w Sklepie Play.
Jeśli odcisk palca jest inny, role nie zostaną przypisane do aplikacji i NonComplianceReason.APP_SIGNING_CERT_MISMATCH
do systemu EMM zostanie zgłoszona niezgodność.
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"signingKeyCerts": [
{ "signingKeyCertFingerprintSha256": "base64-encoded-sha256" }
],
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
Jeśli aplikacja ma konfigurację zarządzaną, administrator IT może skonfigurować początkową konfigurację odpowiednich restriction
w zasadach aplikacji:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
],
"managedConfiguration": {
"<key>": "<value>"
}
}
]
}