API de XenMobile para Android

27 de febrero de 2018

La API de XenMobile para Android está basada en Java. En este artículo se resumen las API de XenMobile por característica y se ofrecen las definiciones de cada API.

Administración de aplicaciones:

  • isManaged
  • isWrapped

Directivas MDX:

  • getPoliciesXML
  • getPolicyValue
  • setPolicyChangeMessenger

Caja fuerte compartida:

  • MDXDictionary

Datos del usuario:

  • getUserName

Clase com.citrix.worx.sdk.MDXApplication

Métodos

  • isManaged

    public static boolean isManaged (Context context)

    Comprueba si MDX administra actualmente la aplicación, lo que significa que la aplicación Citrix Secure Hub está instalada en el dispositivo y se aplican las directivas de XenMobile en ella. La infraestructura back-end de XenMobile (cajas fuertes de claves) se consultan para obtener claves parciales de cifrado de datos (secretos) que MDX va a usar para cifrar los datos contenidos en el archivo de aplicación. Devuelve True si la aplicación está administrada.

    Las aplicaciones Premium no administradas usan los valores predeterminados de directivas XenMobile especificados en Applications/Citrix/MDXToolkit/data/MDXSDK_Android/default_sdk_policies.xml. No se aplican las directivas a aplicaciones General no administradas.

    Parámetros

    context. El contexto Android que realiza la llamada.

    Ejemplo

    boolean bIsManaged = MDXApplication.isManaged(context);

  • isWrapped

    public static boolean isWrapped (Context context)

    Devuelve True si la aplicación está empaquetada con el MDX Toolkit.

    Parámetros

    context. El contexto Android que realiza la llamada.

    Ejemplo

    boolean bIsWrapped = MDXApplication.isWrapped(context);

  • getUserName

    public static String getUserName (Context context)

    Devuelve una cadena que contiene el nombre de usuario de un usuario inscrito que ejecuta una aplicación administrada por MDX, independientemente del estado de inicio de sesión del usuario. Devuelve un valor nulo si el usuario no está inscrito, la aplicación no está administrada o no está empaquetada.

    Parámetros

    context. El contexto Android que realiza la llamada.

    Ejemplo

    String userName = MDXApplication.getUserName(context);

Clase com.citrix.worx.sdk.MDXPolicies

Métodos

  • getPoliciesXML

    public static String getPoliciesXML (Context context)

    Devuelve el contenido de default_sdk_policies.xml, que consiste en una línea por directiva con el prefijo (match), para indicar que el valor del archivo XML coincide con el valor devuelto por MDXPolicies.getPolicyValue(). Devuelve una cadena vacía en caso de fallo.

    Parámetros

    context. El contexto Android que realiza la llamada.

    Ejemplo

    String policiesXML = MDXPolicies.getPoliciesXML(context);

  • getPolicyValue

    public static String getPolicyValue (Context context, String policyName)

    Devuelve una cadena que contiene el valor actual de la directiva nombrada. Devuelve null si no se encuentra ningún valor.

    Parámetros

    context. El contexto Android que realiza la llamada.

    policyName. El nombre de la directiva a buscar. Un nombre de directiva es el valor del elemento PolicyName en un archivo XML de directiva.

    Ejemplo

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

  • setPolicyChangeMessenger

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

    Registra al destinatario que recibirá el mensaje cuando se cambie el valor de la directiva. Cuando MDX detecte que un valor de directiva se ha cambiado en la consola de XenMobile, MDX notificará a este destinatario. Tras recibir el mensaje, podrá usar las demás API para volver a leer los valores de directiva y modificar la aplicación. Devuelve el valor null.

    Parámetros

    context. El contexto Android que realiza la llamada.

    policyName. El nombre de la directiva a supervisar. Un nombre de directiva es el valor del elemento PolicyName en un archivo XML de directiva.

    messenger. El mensajero (destinatario) que recibirá mensajes cuando se cambie el valor de la directiva.

    Ejemplo

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

Clase com.citrix.mdx.common.MDXDictionary

MDXDictionary es un contenedor para leer y almacenar paquetes Android cifrados de pares clave/valor. Las XenMobile Apps que se encuentren en el mismo grupo de seguridad MDX comparten el diccionario. Use la API de caja fuerte compartida para compartir contenido administrado entre las aplicaciones que tienen el mismo diccionario MDX. Por ejemplo, puede compartir certificados y claves privadas a través de una aplicación inscrita, de modo que las aplicaciones pueden obtener un certificado de la caja fuerte segura, en lugar de obtenerlo de Secure Hub.

Los diccionarios se almacenan cifrados, independientemente de lo configurado en las directivas “Cifrado de archivos privados” y “Cifrado de archivos públicos”. Los desarrolladores deben desbloquear la caja fuerte antes de obtener diccionarios.

Operaciones constructoras (creadoras)

  • public MDXDictionary( MDXDictionary source )

    Crea una copia de un diccionario MDXDictionary existente.

    Parámetros

    source. El diccionario MDXDictionary que se debe copiar.

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

    Crea un MDXDictionary a partir de un nombre, un paquete y un número de secuencia. Si no conoce el número de secuencia, utilice el método create() factory.

    Parámetros

    name. El nombre del diccionario.

    bundle. El paquete de Android.

    sequence. El número de la secuencia.

Métodos

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

    Crea un diccionario tras comprobar si ya existe un diccionario con el mismo nombre. Si el diccionario no existe, se devuelve un diccionario nuevo. De lo contrario, se devuelve el diccionario existente. Este método nunca devuelve null.

    Parámetros

    context. El contexto Android que realiza la llamada.

    name. El nombre del diccionario.

    Ejemplo

    // Crea una instancia de diccionario.

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

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

    Elimina un diccionario buscado por nombre. Devuelve true en caso de operación correcta; devuelve false en caso de fallo.

    Parámetros

    context. El contexto Android que realiza la llamada.

    name. El nombre del diccionario.

    Ejemplo

    // Crea una instancia de diccionario.

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

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

    Busca un diccionario existente. Devuelve un diccionario existente; devuelve null si no se encuentra ningún diccionario.

    Parámetros

    context. El contexto Android que realiza la llamada.

    name. El nombre del diccionario.

    Ejemplo

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

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

    Comprueba si se trata de un diccionario nuevo o un diccionario existente. Devuelve true si el diccionario aún no existe.

    Ejemplo

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

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

    Almacena un diccionario cifrado. Si ya existe un diccionario con el mismo nombre, se sobrescribirá. Devuelve true en caso de operación correcta; devuelve false en caso de fallo.

    Parámetros

    context. El contexto Android que realiza la llamada.

    Ejemplo

    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 )

    Añade un diccionario cifrado a un diccionario existente. Si no hay ningún diccionario, se guarda el diccionario especificado. Devuelve true en caso de operación correcta; devuelve false en caso de fallo.

    Parámetros

    context. El contexto Android que realiza la llamada.

    Ejemplo

    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 )

    Elimina el diccionario. Devuelve true en caso de operación correcta; devuelve false en caso de fallo.

    Parámetros

    context. El contexto Android que realiza la llamada.

    Ejemplo

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

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

Notas:

  • Las operaciones constructoras (creadoras) iniciarán una excepción IllegalArgumentException si se transfieren parámetros no válidos.
  • La operación create() nunca devolverá el valor null. Si la directiva de cifrado está habilitada, el usuario es el responsable de que se desbloquee antes de llamar a create().
  • La operación append() puede fallar si un objeto almacenado que se puede analizar o serializar no es un tipo de datos conocido de Java o Android. Secure Hub no puede deserializar el diccionario porque no conoce internamente la clase.
  • La operación append() agregará su paquete a un paquete de diccionario existente. Si el paquete almacenado difiere del paquete existente en el diccionario, el paquete local no reflejará el estado del paquete almacenado. Es necesaria una operación find() o create() para consultar el estado del paquete almacenado previamente.