API XenMobile pour Android

27 février 2018

L’API XenMobile pour Android est basée sur Java. Cet article décrit les API XenMobile par fonctionnalité et fournit les définitions de l’API.

Gestion des applications :

  • isManaged
  • isWrapped

Stratégies MDX :

  • getPoliciesXML
  • getPolicyValue
  • setPolicyChangeMessenger

Coffre partagé :

  • MDXDictionary

Données utilisateur :

  • getUserName

Class com.citrix.worx.sdk.MDXApplication

Méthodes

  • isManaged

    public static boolean isManaged (Context context)

    Vérifie si l’application est actuellement gérée par MDX, ce qui signifie que l’application Citrix Secure Hub est installée sur l’appareil et que les stratégies XenMobile sont appliquées sur l’application. L’infrastructure principale de XenMobile (coffres de clés) est interrogée pour obtenir les clés partielles de cryptage des données (secrets) que MDX utilisera pour crypter les données de fichier de l’application. Renvoie true si l’application est gérée.

    Les applications Premium non gérées utilisent les valeurs par défaut de stratégie XenMobile spécifiées dans Applications/Citrix/MDXToolkit/data/MDXSDK_Android/default_sdk_policies.xml. Les stratégies ne sont pas appliquées pour les applications General non gérées.

    Parameters

    context – contexte Android qui effectue cet appel.

    Exemple

    boolean bIsManaged = MDXApplication.isManaged(context);

  • isWrapped

    public static boolean isWrapped (Context context)

    Renvoie true si l’application est encapsulée avec le MDX Toolkit.

    Parameters

    context – contexte Android qui effectue cet appel.

    Exemple

    boolean bIsWrapped = MDXApplication.isWrapped(context);

  • getUserName

    public static String getUserName (Context context)

    Renvoie une chaîne contenant le nom d’utilisateur de l’utilisateur inscrit exécutant une application gérée par MDX, quel que soit l’état de connexion de l’utilisateur. Ne renvoie aucune valeur si l’utilisateur n’est pas inscrit, l’application n’est pas gérée, ou l’application n’est pas encapsulée.

    Parameters

    context – contexte Android qui effectue cet appel.

    Exemple

    String userName = MDXApplication.getUserName(context);

Class com.citrix.worx.sdk.MDXPolicies

Méthodes

  • getPoliciesXML

    public static String getPoliciesXML (Context context)

    Renvoie le contenu de default_sdk_policies.xml, avec une ligne par stratégie, précédé de (match) pour indiquer que la valeur dans le fichier XML de données correspond à la valeur renvoyée par MDXPolicies.getPolicyValue(). Renvoie une chaîne vide en cas d’échec.

    Parameters

    context – contexte Android qui effectue cet appel.

    Exemple

    String policiesXML = MDXPolicies.getPoliciesXML(context);

  • getPolicyValue

    public static String getPolicyValue (Context context, String policyName)

    Renvoie une chaîne qui contient la valeur courante de la stratégie nommée. Renvoie null si aucune valeur n’est trouvée.

    Parameters

    context – contexte Android qui effectue cet appel.

    policyName – nom de la stratégie à rechercher. Le nom de la stratégie correspond à la valeur de l’élément PolicyName dans un fichier XML de stratégie.

    Exemple

    String value = MDXPolicies.getPolicyValue(context"DisableCamera");

  • setPolicyChangeMessenger

    public static String setPolicyChangeMessenger (Context context, String policyName. Messenger messenger)

    Enregistre une messagerie pour recevoir un message lorsque la valeur de la stratégie donnée est modifiée. Lorsque MDX détecte qu’une valeur de stratégie a été modifiée dans la console XenMobile, MDX avertit cette messagerie. Vous pouvez utiliser les autres API pour relire les valeurs de stratégie et modifier l’application. Renvoie null.

    Parameters

    context – contexte Android qui effectue cet appel.

    policyName – nom de stratégie à contrôler. Le nom de la stratégie correspond à la valeur de l’élément PolicyName dans un fichier XML de stratégie.

    messenger – messagerie qui recevra des messages lorsque la valeur de stratégie sera modifiée.

    Exemple

    MDXPolicies.setPolicyChangeMessenger(context, "DisableCamera", messenger);

Classe com.citrix.mdx.common.MDXDictionary

MDXDictionary est un conteneur qui lit et stocke les bundles Android cryptés de paires clé-valeur. Les applications XenMobile dans le même groupe de sécurité MDX partagent un dictionnaire. Utilisez l’API de coffre sécurisé pour partager le contenu géré entre les applications qui ont le même dictionnaire MDX. Par exemple, vous pouvez partager des certificats et des clés privées par le biais d’une application inscrite de façon à ce que les applications puissent obtenir un certificat depuis le coffre sécurisé plutôt que depuis Secure Hub.

Les dictionnaires sont stockés sans cryptage quels que soient les paramètres de stratégie de cryptage de fichiers privés et de stratégie de cryptage de fichiers publics. Les développeurs doivent déverrouiller le coffre avant de récupérer les dictionnaires.

Constructeurs

  • public MDXDictionary( MDXDictionary source )

    Construit une copie d’un MDXDictionary existant.

    Parameters

    source – MDXDictionary qui doit être copié.

  • public MDXDictionary( String name, Bundle bundle, long sequence )

    Construit un MDXDictionary à partir d’un nom, d’un bundle et d’un numéro de séquence. Si vous ne connaissez pas le numéro de séquence, utilisez la méthode create() factory.

    Parameters

    name – nom du dictionnaire.

    bundle – bundle Android.

    sequence – numéro de séquence.

Méthodes

  • public static MDXDictionary create( Context context, String name )

    Crée un dictionnaire en commençant par vérifier si un dictionnaire avec le même nom existe déjà. Si le dictionnaire n’existe pas, un nouveau dictionnaire est renvoyé. Sinon, le dictionnaire existant est renvoyé. Cette méthode ne renvoie jamais la valeur null.

    Parameters

    context – contexte Android qui effectue cet appel.

    name – nom du dictionnaire.

    Exemple

    // Crée une instance d’un dictionnaire.

    MDXDictionary dict = MDXDictionary.create(getContext(), "app-settings");

  • public static boolean delete( Context context, String name )

    Supprime un dictionnaire par nom. Renvoie true en cas de succès ; renvoie false en cas d’échec.

    Parameters

    context – contexte Android qui effectue cet appel.

    name – nom du dictionnaire.

    Exemple

    // Crée une instance d’un dictionnaire.

    MDXDictionary.delete(getContext(), "app-settings");

  • public static MDXDictionary find( Context context, String name )

    Recherche un dictionnaire existant. Renvoie un dictionnaire existant ; renvoie une valeur null si aucun dictionnaire n’est trouvé.

    Parameters

    context – contexte Android qui effectue cet appel.

    name – nom du dictionnaire.

    Exemple

    MDXDictionary dict = MDXDictionary.find(getContext(),"app-settings");

     if( dict != null )
         {
             // Use dictionary
         }
    
  • public boolean isNew( )

    Vérifie s’il s’agit d’un nouveau dictionnaire ou d’un dictionnaire existant. Renvoie true si un dictionnaire n’existe pas déjà.

    Exemple

    MDXDictionary dict = MDXDictionary.create(getContext(), "app-settings");

     if (dict.isNew())
         {
             // Dictionary was not found.
         }
     else
         {
             // Existing dictionary was found.
         }
    
  • public boolean save( Context context )

    Stocke un dictionnaire crypté. Si un dictionnaire avec le même nom existe, il sera remplacé. Renvoie true en cas de succès ; renvoie false en cas d’échec.

    Parameters

    context – contexte Android qui effectue cet appel.

    Exemple

    MDXDictionary dict = MDXDictionary.find(getContext(), "app-settings");

     if( dict != null )
         {
             String certificate = getCertificate();
             dict.bundle.putString( "secret-certificate", certificate );
             // Update bundle by overwriting the existing bundle.
             dict.save( getContext() );
         }
    
  • public boolean append( Context context )

    Ajoute un dictionnaire crypté à un dictionnaire existant. Si aucun dictionnaire n’existe, le dictionnaire spécifié est stocké. Renvoie true en cas de succès ; renvoie false en cas d’échec.

    Parameters

    context – contexte Android qui effectue cet appel.

    Exemple

    MDXDictionary dict = MDXDictionary.find(getContext(), ";app-settings");

     if( dict != null )
         {
             String certificate = getCertificate();
             Bundle bundle = new Bundle();
             bundle.putString( "secret-certificate", certificate );
             dict.bundle = bundle;
             dict.append( getContext() );
             // Note that dict.bundle may not match the state of the
             // bundle that was stored. The stored bundle could be
             // larger.
         }
    
  • public boolean delete( Context context )

    Supprime le dictionnaire. Renvoie true en cas de succès ; renvoie false en cas d’échec.

    Parameters

    context – contexte Android qui effectue cet appel.

    Exemple

    MDXDictionary dict = MDXDictionary.find(getContext(), "app-settings");

     if( dict != null )
         {
             dict.delete( getContext() );
         }
    

Remarques :

  • Les constructeurs renvoient une exception IllegalArgumentException lorsque des paramètres incorrects sont transmis.
  • L’opération create() ne renvoie jamais la valeur null. Si la stratégie de cryptage est activée, l’utilisateur doit s’assurer qu’elle est déverrouillée avant l’appel de create().
  • L’opération append() peut échouer si un objet stocké qui peut être analysé ou sérialisé n’est pas un type de données Java ou Android connu. Secure Hub ne peut pas rétablir le dictionnaire car la classe n’est pas connue en interne par Secure Hub.
  • L’opération append() ajoute son bundle à un bundle de dictionnaire existant. Si le bundle stocké est différent du bundle du dictionnaire, le bundle local ne reflète pas l’état du bundle stocké. Une opération find() ou create() est nécessaire pour interroger l’état du bundle stocké précédemment.