Guide du développeur de l’application Microsoft Intune pour Android

Le SDK d’application Microsoft Intune pour Android vous permet d’incorporer des stratégies de protection des applications Intune (également appelées stratégies MAM) dans votre application Android Java/Kotlin native. Une application gérée par Intune est une application intégrée au Kit de développement logiciel (SDK) Intune App. Intune administrateurs peuvent facilement déployer des stratégies de protection des applications sur votre application gérée par Intune lorsque Intune gère activement l’application.

Importante

Intune publie régulièrement des mises à jour du Kit de développement logiciel (SDK) d’application Intune. Nous vous recommandons de vous abonner aux référentiels du Kit de développement logiciel (SDK) d’application Intune pour les mises à jour, afin de pouvoir intégrer la mise à jour dans votre cycle de lancement de développement logiciel et de vous assurer que vos applications prennent en charge les derniers paramètres de stratégie de protection des applications.

Prévoyez de prendre les mises à jour obligatoires du SDK de l’application Intune avant chaque version majeure du système d’exploitation pour vous assurer que votre application continue de fonctionner correctement, car les mises à jour du système d’exploitation peuvent entraîner des changements cassants. Si vous ne mettez pas à jour vers la dernière version avant une version majeure du système d’exploitation, vous risquez de rencontrer une modification cassante et/ou de ne pas pouvoir appliquer des stratégies de protection des applications à votre application.

Flux de processus

Le diagramme suivant fournit le flux de processus du Kit de développement logiciel (SDK) d’application Intune pour Android :

Diagramme architectural général pour Microsoft Intune.

Objectifs de la scène

Le guide contient plus de détails sur l’architecture du kit de développement logiciel (SDK) d’application Intune, des informations sur les étapes d’intégration inhabituelles et d’autres contenus utiles.

Le SDK plus en détail

Remplacements de classes et de méthodes

À l’aide des outils de génération, le Kit de développement logiciel (SDK) d’application Intune tente de minimiser la charge d’intégration des développeurs Android. Avant la création des outils de génération, les développeurs devaient effectuer tous les remplacements manuellement.

Remarque

Les applications doivent maintenant s’intégrer aux outils de génération du Kit de développement logiciel ( SDK), qui effectueront tous ces remplacements automatiquement.

Les classes de base Android sont remplacées par leurs équivalents MAM respectifs afin de permettre la gestion d’Intune. Les classes SDK résident entre la classe de base Android et la propre version dérivée de cette classe de l’application. Par exemple, une activité d’application peut se retrouver avec une hiérarchie d’héritage semblable à celle de : AppSpecificActivity extends MAMActivity extends .Activity La couche MAM filtre les appels aux opérations système afin de fournir de manière transparente à votre application une vue gérée du monde.

Outre les classes de base, certaines classes que votre application peut utiliser sans dériver de (par exemple MediaPlayer) ont également requis des équivalents MAM et certains appels de méthode doivent également être remplacés. Le tableau ci-dessous répertorie de nombreux remplacements MAM.

Classe de base Android Remplacement du SDK de l’application Intune
android.app.Activité MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActivity
android.app.Application MAMApplication
android.app.Dialogue Journal MAMDialog
android.app.AlertDialog.Builder MAMAlertDialogBuilder
android.app.DialogFragment MAMDialogFragment
android.app.ExpandableListActivity MAMExpandableListActivity
android.app.Fragment MAMFragment
android.app.IntentService MAMIntentService
android.app.LauncherActivity MAMLauncherActivity
android.app.ListActivity MAMListActivity
android.app.ListFragment MAMListFragment
android.app.NativeActivity MAMNativeActivity
android.app.PendingIntent MAMPendingIntent
android.app.Service MAMService
android.app.TabActivity MAMTabActivity
android.app.TaskStackBuilder MAMTaskStackBuilder
android.app.backup.BackupAgent MAMBackupAgent
android.app.backup.BackupAgentHelper MAMBackupAgentHelper
android.app.backup.FileBackupHelper MAMFileBackupHelper
android.app.backup.SharePreferencesBackupHelper MAMSharedPreferencesBackupHelper
android.app.job.JobService MAMJobService
android.content.BroadcastReceiver MAMBroadcastReceiver
android.content.ContentProvider MAMContentProvider
android.os.Binder MAMBinder (uniquement nécessaire si le classeur n’est pas généré à partir d’une interface AIDL (Android Interface Definition Language))
android.media.MediaPlayer MAMMediaPlayer
android.media.MediaMetadataRetriever MAMMediaMetadataRetriever
android.media.MediaRecorder MAMMediaRecorder
android.provider.DocumentsProvider Fournisseur MAMDocumentsProvider
android.preference.PreferenceActivity MAMPreferenceActivity
android.widget.PopupWindow MAMPopupMenu
android.widget.PopupWindow MAMPopupWindow
android.widget.ListPopupWindow MAMListPopupWindow
android.widget.TextView MAMTextView
android.widget.AutoCompleteTextView MAMAutoCompleteTextView
android.widget.CheckedTextView MAMCheckedTextView
android.widget.EditText MAMEditText
android.inputmethodservice.ExtractEditText MAMExtractEditText
android.widget.MultiAutoCompleteTextView MAMMultiAutoCompleteTextView
android.view.LayoutInflater MAMLayoutInflater
android.view.viewGroup MAMViewGroup
android.view.SurfaceView MAMSurfaceView
android.opengl.GLSurfaceView MAMGLSurfaceView
android.widget.VideoView MAMVideoView

Méthodes renommées

Dans de nombreux cas, une méthode disponible dans la classe Android a été marquée comme finale dans la classe de remplacement MAM. Dans ce cas, la classe de remplacement MAM fournit une méthode portant le même nom (généralement avec MAM) que vous devez remplacer à la place. Par exemple, lors de la dérivation de MAMActivity, au lieu de remplacer onCreate() et d’appeler super.onCreate(), Activity doit remplacer onMAMCreate() et appeler super.onMAMCreate(). Le compilateur Java doit appliquer les restrictions finales pour empêcher le remplacement accidentel de la méthode d’origine au lieu de l’équivalent MAM.

Services système encapsulés

Pour certaines classes de service système, il est nécessaire d’appeler une méthode statique sur une classe de wrapper MAM au lieu d’invoquer directement la méthode souhaitée sur l’instance de service. Par exemple, un appel à getSystemService(ClipboardManager.class).getPrimaryClip() doit devenir un appel à MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class). Encore une fois, le plug-in de construction requis effectue automatiquement ces remplacements.

Classe Android Remplacement du SDK de l’application Intune
android.content.ClipboardManager MAMClipboard
android.content.ContentProviderClient MAMContentProviderClientManagement
android.content.ContentResolver MAMContentResolverManagement
android.content.pm.PackageManager Gestion MAMPackage
android.app.DownloadManager MAMDownloadManagement
android.print.PrintManager Gestion MAMPrintManagement
android.view.view Gestion MAMViewManagement
android.view.DragEvent MAMDragEventManagement
android.view.LayoutInflater MAMLayoutInflaterManagement
android.app.NotificationManager MAMNotificationManagement
android.app.blob.BlobStoreManager MAMBlobStoreManager
android.app.blob.BlobStoreManager.Session MAMBlobStoreManager.Session

Certaines classes ont la plupart de leurs méthodes encapsulées, par exemple, ClipboardManager, ContentResolverContentProviderClientet PackageManager tandis que d’autres classes n’ont qu’une ou deux méthodes encapsulées, par exemple, DownloadManager, PrintManager, PrintHelperDragEventViewNotificationManager , , et .NotificationManagerCompat

Inscription GPM et GAM

Comme nous l’avons vu à l’étape 4 Inscription vs inscription, le Kit de développement logiciel (SDK) d’application Intune « inscrit » les comptes inscrits par votre application afin que ce compte soit protégé par la stratégie. Une fois l’inscription réussie, le compte est géré. Les stratégies GAM doivent maintenant être appliquées à ce compte.

Le terme « inscription » peut également faire référence au processus initié par l’utilisateur final pour activer la Gestion des appareils (GPM). L’inscription GPM est entièrement distincte de l’inscription Stratégie de protection des applications.

Une application SDK intégrée peut avoir un compte inscrit pour la stratégie de protection des applications sans que ce compte soit inscrit pour Gestion des appareils. De même, un utilisateur peut avoir inscrit un appareil pour Gestion des appareils sans avoir d’applications intégrées au SDK avec des comptes inscrits pour la stratégie de protection des applications.

En règle générale, lorsque les développeurs et les administrateurs font référence à l’inscription, ils font référence à l’inscription GPM, car l’inscription de la stratégie de protection des applications est en grande partie invisible pour les développeurs et les utilisateurs finaux. Pour plus d’informations sur l’inscription GPM, consultez Inscrire des appareils Android .

Conseils d’intégration

Présentation des journaux du portail d’entreprise

Les journaux du portail d’entreprise contiennent des informations que les ingénieurs Microsoft utilisent pour examiner les problèmes. Certains des journaux peuvent également être utiles pour les développeurs qui intègrent le Kit de développement logiciel (SDK).

En particulier, le fichier DiagnosticsInfo-scrubbed.log contient des informations sur les applications gérées par GAM et les détails de la stratégie GAM dans la PolicyDB Information section. Chaque application gérée a une entrée dans la PolicyDB Information section. Vous devez rechercher ici le nom du package de votre application pour vérifier que la stratégie GAM est correctement ciblée sur votre application. Si vous ne voyez pas le nom du package de votre application ici, cela signifie que la stratégie GAM n’est pas appliquée au compte connecté.

Pour obtenir une description de chaque paramètre de stratégie MAM, consultez Paramètres de stratégie de protection des applications Android dans Microsoft Intune. Pour obtenir une description de la façon dont ces paramètres s’afficheront dans les journaux du Portail d’entreprise, reportez-vous à Examiner les journaux de protection des applications clientes. Lorsque la stratégie GAM n’est pas appliquée comme prévu, nous vous recommandons de case activée Portail d'entreprise les journaux ou l’interface utilisateur de diagnostic, de vérifier que votre application est gérée par la stratégie GAM et de vérifier que les paramètres de stratégie ont les valeurs attendues.

Vous pouvez collecter les journaux du Portail d’entreprise de l’une des manières suivantes :

  • Via le Portail d’entreprise
    • Ouvrez l’application Portail d’entreprise
    • Sélectionnez le menu à trois points dans le coin supérieur droit
    • Sélectionnez Paramètres
    • Sous Journaux de diagnostic, sélectionnez Enregistrer les journaux
    • Suivez l’invite pour choisir le répertoire de sortie afin d’enregistrer les journaux du portail d’entreprise.
    • Utilisez adb shell pull la commande pour extraire les journaux de votre appareil Android vers votre ordinateur local.
  • [Utilisez Microsoft Edge pour Android pour accéder aux journaux d’application gérés]. L’interface utilisateur pour collecter les journaux du Portail d’entreprise et afficher les diagnostics MAM s’affiche.
  • Appelez MAMPolicyManager.showDiagnostics(context) pour afficher la même interface utilisateur pour collecter les journaux du portail d’entreprise.

Tests rapides avec une stratégie changeante

Lorsque vous développez et testez l’intégration du Kit de développement logiciel (SDK) d’application Intune par votre application, vous pouvez fréquemment modifier les paramètres de stratégie de protection des applications pour votre utilisateur test.

Par défaut, les applications intégrées sont case activée au service Intune pour la stratégie mise à jour toutes les 30 minutes, lorsqu’elles sont actives. Vous pouvez éviter cette attente et forcer une case activée via le Portail d’entreprise :

  1. Lancez le Portail d’entreprise. Vous n’avez pas besoin de vous connecter.
  2. Sélectionnez l’onglet ... icône de menu.
  3. Sélectionnez Paramètres.
  4. Faites défiler jusqu’au paramètre appelé « Stratégie de gestion ».
  5. Appuyez sur le bouton Synchroniser.

Cela planifiera immédiatement une case activée et récupérera la stratégie à jour ciblée sur votre application et votre compte.

Résolution des problèmes de migration AndroidX

Si vous avez intégré le Kit de développement logiciel (SDK) de l’application Intune avant d’utiliser AndroidX, vous pouvez rencontrer une erreur comme celle-ci lors de la migration vers AndroidX :

incompatible types: android.support.v7.app.ActionBar cannot be converted to androidx.appcompat.app.ActionBar

Ces erreurs peuvent se produire, car votre application fait référence aux classes de prise en charge héritées du Kit de développement logiciel (SDK). Les classes de prise en charge MAM enveloppent les classes de prise en charge Android qui ont été déplacées dans AndroidX. Pour lutter contre ces erreurs, remplacez toutes les références de classe de prise en charge de MAM par leurs équivalents AndroidX. Vous pouvez y parvenir en supprimant d’abord les dépendances de la bibliothèque de support MAM de vos fichiers de build Gradle. Les lignes en question ressembleront à ce qui suit :

implementation "com.microsoft.intune.mam:android-sdk-support-v4:$intune_mam_version"
implementation "com.microsoft.intune.mam:android-sdk-support-v7:$intune_mam_version"

Ensuite, corrigez les erreurs de compilation résultantes en remplaçant toutes les références aux classes MAM dans les com.microsoft.intune.mam.client.support.v7 packages et com.microsoft.intune.mam.client.support.v4 par leurs équivalents AndroidX. Par exemple, les références à MAMAppCompatActivity devraient être remplacées par AndroidX’s AppCompatActivity. Comme indiqué ci-dessus, le plug-in/outil de construction MAM réécrira automatiquement les classes dans les bibliothèques AndroidX avec les équivalents MAM appropriés au moment de la compilation.

Limitations et cas particuliers

Inscription par défaut

Votre application peut également s’inscrire aux stratégies de protection des applications via un processus simplifié appelé inscription par défaut. Cette fonctionnalité est principalement destinée à prendre en charge les applications métier privées qui n’ont pas intégré MSAL.

Avertissement

L’inscription par défaut comporte des inconvénients importants et n’est pas recommandée. Les applications utilisant l’inscription par défaut ne prennent pas en charge l’accès conditionnel, ne bénéficient pas de l’authentification unique avec les services Microsoft et ne peuvent pas être utilisées par des comptes non-Intune. Si votre application est livrée à un magasin d’applications public, l’inscription par défaut n’est pas prise en charge.

L’inscription par défaut force l’utilisateur final à installer le Portail d’entreprise et à effectuer un flux d’inscription MAM avant d’autoriser les utilisateurs à accéder à votre application.

Remarque

L’inscription par défaut prend en charge le cloud souverain.

Activez l’inscription par défaut en procédant comme suit :

  1. Si votre application intègre MSAL ou si vous avez besoin d’activer l’authentification unique, configurez MSAL. Si ce n’est pas le cas, vous pouvez ignorer cette étape.

  2. Activez l’inscription par défaut en ajoutant la valeur suivante dans le manifeste sous l’étiquette <application> :

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Activez la stratégie GAM requise en ajoutant la valeur suivante dans le manifeste sous l’étiquette <application> :

    <meta-data android:name="com.microsoft.intune.mam.MAMPolicyRequired" android:value="true" />
    

Processus isolés

Le SDK d’application Intune ne peut pas appliquer de protections à des processus isolés. La prise en charge des processus isolés (android:isolatedProcess) nécessite l’ajout de la balise de métadonnées ci-dessous.

Avertissement

En ajoutant ces métadonnées, votre application déclare que le processus isolé ne peut pas exposer les données de l’organisation. Votre application est responsable de la garantie de cela.

<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />

Restrictions de capture d’écran personnalisé

Si votre application contient une fonctionnalité de capture d’écran personnalisée qui contourne la restriction au niveau FLAG_SECURE d’Android, vous devez vérifier la stratégie de capture d’case activée avant d’autoriser l’accès Windowcomplet à la fonctionnalité. Par exemple, si votre application utilise un moteur de rendu personnalisé pour afficher la vue actuelle dans un fichier PNG, vous devez d’abord vérifier la case activéeAppPolicy.getIsScreenCaptureAllowed().

Si votre application ne contient aucune fonctionnalité de capture d’écran personnalisée ou tierce, vous n’êtes pas obligé de prendre des mesures pour restreindre les captures d’écran. La stratégie de capture d’écran est automatiquement appliquée au Window niveau pour toutes les applications intégrées MAM.

Toute tentative du système d’exploitation ou d’une autre application de capturer un Window dans votre application sera bloquée si nécessaire. Par exemple, si un utilisateur tente de capturer l’écran de votre application via les fonctionnalités intégrées de capture d’écran ou d’enregistrement d’écran, la capture sera automatiquement restreinte sans participation de votre application.

Limitations de l’application des stratégies

  • Utilisation de résolveurs de contenu : La stratégie Intune « Transférer ou recevoir » peut bloquer ou bloquer partiellement l’utilisation d’un résolveur de contenu pour accéder au fournisseur de contenu dans une autre application. Les méthodes renvoient ContentResolver la valeur nulle ou lèvent une valeur d’échec (par exemple, openOutputStream elles sont levées FileNotFoundException si elles sont bloquées). L’application peut déterminer si un échec d’écriture de données via un résolveur de contenu a été causé par la stratégie (ou serait causé par la stratégie) en effectuant l’appel :

    MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
    

    ou s’il n’y a aucune activité associée :

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    Dans ce second cas, les applications multi-identités doivent veiller à définir l’identité du thread de manière appropriée (ou à transmettre une identité explicite à un getPolicyForIdentity appel).

Services exportés

Le fichier AndroidManifest.xml inclus dans le SDK d’application Intune contient MAMNotificationReceiverService, qui doit être un service exporté pour permettre à l’Portail d'entreprise d’envoyer des notifications à une application gérée. Le service vérifie l’appelant pour s’assurer que seul le Portail d’entreprise est autorisé à envoyer des notifications.

Limitations de la réflexion

Certaines des classes de base MAM (par exemple, MAMActivityMAMDocumentsProvider, ) contiennent des méthodes (basées sur les classes de base Android d’origine) qui utilisent des types de paramètre ou de retour uniquement présents au-dessus de certains niveaux d’API. Pour cette raison, il n’est pas toujours possible d’utiliser la réflexion pour énumérer toutes les méthodes des composants de l’application. Cette restriction ne se limite pas à MAM, c’est la même restriction qui s’appliquerait si l’application elle-même implémentait ces méthodes à partir des classes de base Android.

Robolectric

Test du SDK d’application Intune Le comportement sous Robolectric n’est pas pris en charge. Il existe des problèmes connus lors de l’exécution du SDK sous Robolectric en raison de comportements présents sous Robolectric qui n’imitent pas avec précision ceux des appareils ou émulateurs réels.

Si vous avez besoin de tester votre application sous Robolectric, la solution de contournement recommandée est de déplacer votre logique de classe d’application vers un helper et de produire votre apk de test unitaire avec une classe d’application qui n’hérite pas de MAMApplication.