API para iOS
La API de XenMobile para iOS se basa en Objective-C. Este artículo resume las API de Citrix Endpoint Management™ por característica y proporciona las definiciones de la API.
Administración de aplicaciones
- isAppManaged
Interacción con Secure Hub
- isMDXAccessManagerInstalled
- logonMdxWithFlag
-
isAppLaunchedByWorxHome
-
Políticas MDX
-
getValueOfPolicy
-
Almacén compartido
- getVaultDataFromVault
- saveVaultData
- updateAndSynchronizeVaultItem
- updateAndSynchronizeVaultItems
- deleteVault
- deleteVaultWithError
Datos de usuario
-
managedUserInformation
-
Clase MdxManager
Métodos
-
getValueOfPolicy
-
+(NSString*) getValueOfPolicy:(NSString*)policyName error:(NSError **) error;Para las aplicaciones administradas, devuelve el valor de la política establecido por los administradores de Citrix Endpoint Management. Para las aplicaciones Premium no administradas, devuelve el valor de la política establecido en Applications/Citrix/MDXToolkit/data/MDXSDK/default_policies.xml. Para las aplicaciones Generales no administradas, devuelve nil.
Parámetros:
policyName – El nombre de la política que buscar en default_policies.xml.
Ejemplo:
+(NSString*) getValueOfPolicy:(NSString*)DisableCamera error:(NSError **) error;-
isMDXAccessManagerInstalled
-
+(BOOL) isMDXAccessManagerInstalled: (NSError **) error;
Comprueba si Secure Hub está instalado, lo que significa que el control MDX de la aplicación está habilitado incluso si la aplicación no está administrada. Devuelve true si Secure Hub está instalado.
- isAppManaged
+(BOOL) isAppManaged; -
-
Comprueba si la aplicación está actualmente administrada por MDX, lo que significa que el paquete de políticas MDX está incrustado en la aplicación como un archivo XML. La infraestructura de backend de Citrix Endpoint Management (almacenes de claves) se consulta para obtener claves parciales de cifrado de datos (secretos), que MDX usará para cifrar los datos de la base de datos de la aplicación (iOS 9 y posteriores). Devuelve true si la aplicación está administrada.
-
logonMdxWithFlag
+(BOOL) logonMdxWithFlag:(BOOL)force error:(NSError**) error;Inicia una solicitud de inicio de sesión MDX con Secure Hub.
-
isAppLaunchedByWorxHome
+(BOOL) isAppLaunchedByWorxHome;Comprueba si una solicitud de URL entre aplicaciones proviene de Secure Hub o de alguna otra aplicación en el dispositivo, lo cual es necesario si una aplicación necesita estar al tanto de la comunicación de control MDX. En iOS, las aplicaciones pueden registrarse para esquemas de URL específicos. Un esquema de URL es la primera parte de una URL, hasta el signo de dos puntos, pero sin incluirlo. Si una URL comienza con
http://, el esquema es http.Las aplicaciones habilitadas para MDX y Secure Hub se comunican mediante esquemas de URL personalizados. Por ejemplo, para manejar URL mailto: de otras aplicaciones, Secure Mail requiere el esquema de URL ctxmail. Para manejar URL http o https de otras aplicaciones, Secure Web requiere el esquema de URL ctxmobilebrowser o ctxmobilebrowsers, respectivamente. Para obtener detalles sobre la política de esquemas de URL de aplicaciones MDX y la política de URL permitidas, consulta Políticas MDX para aplicaciones iOS.
Devuelve resultados precisos cuando se consulta en cualquier momento o lugar durante o después de las siguientes llamadas a eventos de delegado de UIApplication:
-
Cuando la aplicación se carga desde el springboard o una llamada a openURL:
application:willFinishLaunchingWithOptions: -
application:didFinishLaunchingWithOptions:
applicationDidFinishLaunching: -
Cuando la aplicación es activada o reactivada por los usuarios desde el springboard del dispositivo
-
applicationDidBecomeActive:
Importante:
-
-
No debes consultar durante applicationWillEnterForeground:.
-
Cuando la aplicación es activada o reactivada por una llamada a openURL:
application:openURL:sourceApplication:annotation: application:handleOpenURL: -
managedUserInformation
extern __attribute__((visibility ("default"))) NSString *const kXenMobileUsername; +(NSDictionary*) managedUserInformation;Devuelve una cadena que contiene el UserName de un usuario inscrito que ejecuta una aplicación administrada por MDX, independientemente del estado de inicio de sesión del usuario. Devuelve una cadena vacía si el usuario no está inscrito, la aplicación no está administrada o la aplicación no está encapsulada.
-
Clase XenMobileSharedKeychainVault
-
Métodos
-
initWithVaultName
- (instancetype) initWithVaultName:(NSString*)vaultName accessGroup:(NSString*)accessGroup; -
Inicializa un almacén compartido de Citrix Endpoint Management.
Usa la API del almacén compartido para compartir contenido administrado entre aplicaciones que tienen el mismo grupo de acceso de keychain. Por ejemplo, puedes compartir certificados de usuario a través de una aplicación inscrita para que las aplicaciones puedan obtener un certificado del almacén seguro en lugar de Secure Hub.
Parámetros:
vaultName – El nombre del almacén compartido de Citrix Endpoint Management.
accessGroup – El nombre del grupo de acceso de keychain. Este puede ser el grupo de acceso MDX predeterminado, denominado TEAMID_A.appOriginalBundleID, o un grupo de acceso de keychain que usarás para compartir datos entre aplicaciones.
-
Vault Data Type Properties
@property(nonatomic,readonly) BOOL exists; @property(nonatomic,readonly) BOOL isAccessible; @property(nonatomic,strong) NSMutableDictionary\* vaultData <!--NeedCopy-->Después de inicializar un almacén, se devuelven estas propiedades del tipo de datos del almacén:
exists – Indica si se encontró el almacén con el vaultName especificado.
isAccessible – Indica si el almacén está en el accessGroup especificado y se puede acceder a él.
vaultData – Es el contenido del almacén compartido. Cuando inicializas el almacén por primera vez, vaultData es un diccionario nil.
-
getVaultDataFromVault
+ (NSDictionary*) getVaultDataFromVault:(NSString*)vaultName accessGroup:(NSString*)accessGroup error:(NSError *__autoreleasing *)error;Lee datos del almacén compartido de Citrix Endpoint Management. Esta es una de las tres formas de leer datos del almacén, como se indica a continuación:
-
Usa directamente getVaultDataFromVault:accessGroup:error.
-
Crea la instancia de XenMobileSharedKeychainVault y luego lee la propiedad vaultData.
-
Crea la instancia de XenMobileSharedKeychainVault y luego recarga los datos del almacén usando
-(BOOL) loadDataWithError:(NSError *__autoreleasing *)error;y leyendo la propiedad vaultData.
Para ver un ejemplo de código, consulta el Ejemplo de almacén compartido en este artículo.
Parámetros:
vaultName – El nombre del almacén compartido de Citrix Endpoint Management.
accessGroup – El nombre del grupo de acceso de keychain. Este puede ser el grupo de acceso MDX predeterminado, denominado TEAMID_A.appOriginalBundleID, o un grupo de acceso de keychain que usarás para compartir datos entre aplicaciones.
-
-
saveVaultData
+ (BOOL) saveVaultData:(NSDictionary*)vaultData toVault:(NSString*)vaultName accessGroup:(NSString*)NSString*)accessGroup error:(NSError *__autoreleasing *)error;Guarda datos en el almacén compartido de Citrix Endpoint Management. Esta es una de las tres formas de guardar datos del almacén, como se indica a continuación:
-
Usa directamente saveVaultData:toVault:accessGroup:error:.
-
Usa updateAndSynchronizeVaultItem: o updateAndSynchronizeVaultItems (descritos a continuación en esta tabla).
-
Usa - (BOOL)synchronizeWithError:(NSError *__autoreleasing *)error; creando la instancia de XenMobileSharedKeychainVault, cargando los datos del almacén, modificando los datos del almacén y luego sincronizando los datos.
Para ver un ejemplo de código, consulta el Ejemplo de almacén compartido en este artículo.
Parámetros:
vaultData – Los datos que guardar en el almacén compartido de Citrix Endpoint Management. Los datos almacenados en el almacén compartido son un diccionario de pares clave/valor, como @{@”username”:@”;andreo”}.
vaultName – El nombre del almacén compartido de Citrix Endpoint Management.
accessGroup – El nombre del grupo de acceso de keychain. Este puede ser el grupo de acceso MDX predeterminado, denominado TEAMID_A.appOriginalBundleID, o un grupo de acceso de keychain que usarás para compartir datos entre aplicaciones.
-
-
updateAndSynchronizeVaultItem
updateAndSynchronizeVaultItems
- (BOOL)updateAndSynchronizeVaultItem:(NSString*)vaultItem withValue:(id)itemValue error:(NSError *__autoreleasing *)error;- (BOOL)updateAndSynchronizeVaultItems:(NSDictionary*)vaultItems error:(NSError *__autoreleasing *)error;
Actualiza los datos en el almacén compartido de Citrix Endpoint Management. Para usar este método, crea la instancia de XenMobileSharedKeychainVault y luego sincronízala agregando o actualizando elementos de datos del almacén. Por ejemplo, si la entrada existente del almacén tiene {a:123, b:234, c:305} y usas esta API con datos para actualizar {c:345, d:456}, esta API actualizará los datos del almacén a {a:123, b:234, c:345, d:456}. Para ver un ejemplo de código, consulta Ejemplo de almacén compartido en este artículo.
Consulta **saveVaultData**, arriba, para ver otras dos formas de guardar datos del almacén.
Parámetros:
*vaultItem* – Un único par clave/valor, con el formato `@{@";username::@";andreo"}`.
*vaultItems* – Una lista de pares clave/valor.
-
deleteVault
+ (BOOL) deleteVault:(NSString*)vaultName accessGroup:(NSString*)accessGroup error:(NSError *__autoreleasing *)error;Elimina el almacén compartido especificado.
Parámetros:
vaultName – El nombre del almacén compartido de Citrix Endpoint Management.
accessGroup – El nombre del grupo de acceso del llavero usado por el almacén que quieres eliminar.
-
deleteVaultWithError
-(BOOL) deleteVaultWithError:(NSError *__autoreleasing *)error;Elimina el almacén compartido devuelto por la instancia de XenMobileSharedKeychainVault. Debes liberar el objeto después de eliminarlo con deleteVaultWithError.
Ejemplo de almacén compartido
#import "XenMobileSharedKeychainVault.h"
@interface ClassA ()
...
@property(nonatomic,strong) XenMobileSharedKeychainVault* XenMobileSharedKeychainVault;
...
@end
@implementation ClassA
...
@synthesize XenMobileSharedKeychainVault = _XenMobileSharedKeychainVault;
...
#ifdef USE_CLASS_INSTANCE_METHODS
-(XenMobileSharedKeychainVault*)XenMobileSharedKeychainVault
{
if(_XenMobileSharedKeychainVault==nil) {
_XenMobileSharedKeychainVault = [[XenMobileSharedKeychainVault alloc]
initWithVaultName:<VAULT_NAME>
accessGroup:kXenMobileKeychainAccessGroup];
}
return _XenMobileSharedKeychainVault;
}
#endif
-(void)read
{
NSError* error=nil;
#ifdef USE_CLASS_INSTANCE_METHODS
NSDictionary* vaultDictionary = nil;
if([self.XenMobileSharedKeychainVault loadDataWithError:&error]) {
vaultDictionary = [self.XenMobileSharedKeychainVault vaultData];
}
#else
NSDictionary* vaultDictionary = [XenMobileSharedKeychainVault
getVaultDataFromVault:<VAULT_NAME>
accessGroup:kXenMobileKeychainAccessGroup error:&error];
#endif
}
-(void)save
{
NSError* error=nil;
/// check error handling here...
NSDictionary* dictToSave = @{<VAULT_DATA_DICTIONARY_OBJECTS>};
#ifdef USE_CLASS_INSTANCE_METHODS
#ifdef USE_CLASS_INSTANCE_METHODS_TO_UPDATE
BOOL result = [self.XenMobileSharedKeychainVault
updateAndSynchronizeVaultItems:dictToSave error:&error];
#else
self.XenMobileSharedKeychainVault.vaultData = [NSMutableDictionary
dictionaryWithDictionary:dictToSave];
BOOL result = [self.XenMobileSharedKeychainVault synchronizeWithError:&error];
#endif
#else
BOOL result = [XenMobileSharedKeychainVault
saveVaultData:dictToSave toVault:<VAULT_NAME>
accessGroup:kXenMobileKeychainAccessGroup error:&error];
#endif
}
-(void)delete
{
NSError* error=nil;
#ifdef USE_CLASS_INSTANCE_METHODS
BOOL result = [self.XenMobileSharedKeychainVault deleteVaultWithError:&error];
#else
BOOL result = [XenMobileSharedKeychainVault deleteVault:<VAULT_NAME>
accessGroup:kXenMobileKeychainAccessGroup error:&error];
#endif
}
...
@end
<!--NeedCopy-->