API für iOS
Die XenMobile API für iOS basiert auf Objective-C. Dieser Artikel fasst die Citrix Endpoint Management™ APIs nach Funktionen zusammen und stellt die API-Definitionen bereit.
App-Verwaltung
- isAppManaged
Interaktion mit Secure Hub
- isMDXAccessManagerInstalled
- logonMdxWithFlag
-
isAppLaunchedByWorxHome
-
MDX-Richtlinien
-
getValueOfPolicy
-
Gemeinsamer Tresor
- getVaultDataFromVault
- saveVaultData
- updateAndSynchronizeVaultItem
- updateAndSynchronizeVaultItems
- deleteVault
- deleteVaultWithError
Benutzerdaten
-
managedUserInformation
-
Klasse MdxManager
Methoden
-
getValueOfPolicy
-
+(NSString*) getValueOfPolicy:(NSString*)policyName error:(NSError **) error;Für verwaltete Apps gibt dies den von Citrix Endpoint Management-Administratoren festgelegten Richtlinienwert zurück. Für nicht verwaltete Premium-Apps gibt dies den in Applications/Citrix/MDXToolkit/data/MDXSDK/default_policies.xml festgelegten Richtlinienwert zurück. Für nicht verwaltete allgemeine Apps wird nil zurückgegeben.
Parameter:
policyName – Der Name der Richtlinie, nach der in default_policies.xml gesucht werden soll.
Beispiel:
+(NSString*) getValueOfPolicy:(NSString*)DisableCamera error:(NSError **) error;-
isMDXAccessManagerInstalled
-
+(BOOL) isMDXAccessManagerInstalled: (NSError **) error;
Prüft, ob Secure Hub installiert ist, was bedeutet, dass die MDX-Steuerung der App aktiviert ist, auch wenn die App nicht verwaltet wird. Gibt true zurück, wenn Secure Hub installiert ist.
- isAppManaged
+(BOOL) isAppManaged; -
-
Prüft, ob die App derzeit von MDX verwaltet wird, was bedeutet, dass das MDX-Richtlinienpaket als XML-Datei in die App eingebettet ist. Die Backend-Infrastruktur von Citrix Endpoint Management (Schlüsseltresore) wird nach Teilschlüsseln (Geheimnissen) zur Datenverschlüsselung abgefragt, die MDX zur Verschlüsselung von App-Datenbankdaten (iOS 9 und höher) verwenden wird. Gibt true zurück, wenn die App verwaltet wird.
-
logonMdxWithFlag
+(BOOL) logonMdxWithFlag:(BOOL)force error:(NSError**) error;Leitet eine MDX-Anmeldeanforderung mit Secure Hub ein.
-
isAppLaunchedByWorxHome
+(BOOL) isAppLaunchedByWorxHome;Prüft, ob eine anwendungsübergreifende URL-Anforderung von Secure Hub oder einer anderen App auf dem Gerät stammt, was erforderlich ist, wenn eine App über die MDX-Steuerungskommunikation informiert sein muss. Unter iOS können sich Apps für bestimmte URL-Schemata registrieren. Ein URL-Schema ist der erste Teil einer URL, bis einschließlich, aber nicht einschließlich des Doppelpunkts. Wenn eine URL mit
http://beginnt, ist das Schema http.MDX-fähige Apps und Secure Hub kommunizieren über benutzerdefinierte URL-Schemata. Um beispielsweise mailto:-URLs von anderen Apps zu verarbeiten, benötigt Secure Mail das URL-Schema ctxmail. Um http- oder https-URLs von anderen Apps zu verarbeiten, benötigt Secure Web das URL-Schema ctxmobilebrowser bzw. ctxmobilebrowsers. Einzelheiten zur MDX-App-URL-Schemata-Richtlinie und zur Richtlinie für zulässige URLs finden Sie unter MDX-Richtlinien für iOS-Apps.
Gibt genaue Ergebnisse zurück, wenn jederzeit oder überall während oder nach den folgenden UIApplication-Delegate-Ereignisaufrufen abgefragt wird:
-
Wenn die App vom Springboard oder einem openURL-Aufruf geladen wird:
application:willFinishLaunchingWithOptions: -
application:didFinishLaunchingWithOptions:
applicationDidFinishLaunching: -
Wenn die App von Benutzern über das Geräte-Springboard aktiviert oder reaktiviert wird
-
applicationDidBecomeActive:
Wichtig:
-
-
Sie dürfen während applicationWillEnterForeground: keine Abfragen durchführen.
-
Wenn die App durch einen openURL-Aufruf aktiviert oder reaktiviert wird:
application:openURL:sourceApplication:annotation: application:handleOpenURL: -
managedUserInformation
extern __attribute__((visibility ("default"))) NSString *const kXenMobileUsername; +(NSDictionary*) managedUserInformation;Gibt eine Zeichenfolge zurück, die den Benutzernamen eines registrierten Benutzers enthält, der eine MDX-verwaltete App ausführt, unabhängig vom Anmeldestatus des Benutzers. Gibt eine leere Zeichenfolge zurück, wenn der Benutzer nicht registriert ist, die App nicht verwaltet wird oder die App nicht gewrappt ist.
-
Klasse XenMobileSharedKeychainVault
-
Methoden
-
initWithVaultName
- (instancetype) initWithVaultName:(NSString*)vaultName accessGroup:(NSString*)accessGroup; -
Initialisiert einen gemeinsam genutzten Citrix Endpoint Management-Tresor.
Verwenden Sie die API für den gemeinsamen Tresor, um verwaltete Inhalte zwischen Apps zu teilen, die dieselbe Schlüsselbund-Zugriffsgruppe haben. Sie können beispielsweise Benutzerzertifikate über eine registrierte App teilen, sodass Apps ein Zertifikat aus dem sicheren Tresor anstelle von Secure Hub abrufen können.
Parameter:
vaultName – Der Name des gemeinsam genutzten Citrix Endpoint Management-Tresors.
accessGroup – Der Name der Schlüsselbund-Zugriffsgruppe. Dies kann die Standard-MDX-Zugriffsgruppe mit dem Namen TEAMID_A.appOriginalBundleID sein oder eine Schlüsselbund-Zugriffsgruppe, die Sie zum Teilen von Daten zwischen Apps verwenden werden.
-
Eigenschaften des Tresordatentyps
@property(nonatomic,readonly) BOOL exists; @property(nonatomic,readonly) BOOL isAccessible; @property(nonatomic,strong) NSMutableDictionary\* vaultData <!--NeedCopy-->Nachdem Sie einen Tresor initialisiert haben, werden diese Eigenschaften des Tresordatentyps zurückgegeben:
exists – Gibt an, ob der Tresor mit dem angegebenen vaultName gefunden wurde.
isAccessible – Gibt an, ob sich der Tresor in der angegebenen accessGroup befindet und darauf zugegriffen werden kann.
vaultData – Ist der Inhalt des gemeinsam genutzten Tresors. Wenn Sie den Tresor zum ersten Mal initialisieren, ist vaultData ein nil-Wörterbuch.
-
getVaultDataFromVault
+ (NSDictionary*) getVaultDataFromVault:(NSString*)vaultName accessGroup:(NSString*)accessGroup error:(NSError *__autoreleasing *)error;Liest Daten aus dem gemeinsam genutzten Citrix Endpoint Management-Tresor. Dies ist eine von drei Möglichkeiten, Tresordaten zu lesen, wie folgt:
-
Verwenden Sie direkt getVaultDataFromVault:accessGroup:error.
-
Erstellen Sie die XenMobileSharedKeychainVault-Instanz und lesen Sie dann die vaultData-Eigenschaft.
-
Erstellen Sie die XenMobileSharedKeychainVault-Instanz und laden Sie dann die Tresordaten mit
-(BOOL) loadDataWithError:(NSError *__autoreleasing *)error;neu und lesen Sie die vaultData-Eigenschaft.
Beispielcode finden Sie im Abschnitt „Beispiel für gemeinsamen Tresor“ in diesem Artikel.
Parameter:
vaultName – Der Name des gemeinsam genutzten Citrix Endpoint Management-Tresors.
accessGroup – Der Name der Schlüsselbund-Zugriffsgruppe. Dies kann die Standard-MDX-Zugriffsgruppe mit dem Namen TEAMID_A.appOriginalBundleID sein oder eine Schlüsselbund-Zugriffsgruppe, die Sie zum Teilen von Daten zwischen Apps verwenden werden.
-
-
saveVaultData
+ (BOOL) saveVaultData:(NSDictionary*)vaultData toVault:(NSString*)vaultName accessGroup:(NSString*)accessGroup error:(NSError *__autoreleasing *)error;Speichert Daten im gemeinsam genutzten Citrix Endpoint Management-Tresor. Dies ist eine von drei Möglichkeiten, Tresordaten zu speichern, wie folgt:
-
Verwenden Sie direkt saveVaultData:toVault:accessGroup:error:.
-
Verwenden Sie updateAndSynchronizeVaultItem: oder updateAndSynchronizeVaultItems (im Folgenden in dieser Tabelle beschrieben).
-
Verwenden Sie - (BOOL)synchronizeWithError:(NSError *__autoreleasing *)error;, indem Sie die XenMobileSharedKeychainVault-Instanz erstellen, die Tresordaten laden, die Tresordaten ändern und dann die Daten synchronisieren.
Beispielcode finden Sie im Abschnitt „Beispiel für gemeinsamen Tresor“ in diesem Artikel.
Parameter:
vaultData – Die Daten, die im gemeinsam genutzten Citrix Endpoint Management-Tresor gespeichert werden sollen. Im gemeinsamen Tresor gespeicherte Daten sind ein Wörterbuch von Schlüssel/Wert-Paaren, z. B. @{@”username”:@”;andreo”}.
vaultName – Der Name des gemeinsam genutzten Citrix Endpoint Management-Tresors.
accessGroup – Der Name der Schlüsselbund-Zugriffsgruppe. Dies kann die Standard-MDX-Zugriffsgruppe mit dem Namen TEAMID_A.appOriginalBundleID sein oder eine Schlüsselbund-Zugriffsgruppe, die Sie zum Teilen von Daten zwischen Apps verwenden werden.
-
-
updateAndSynchronizeVaultItem
updateAndSynchronizeVaultItems
- (BOOL)updateAndSynchronizeVaultItem:(NSString*)vaultItem withValue:(id)itemValue error:(NSError *__autoreleasing *)error;- (BOOL)updateAndSynchronizeVaultItems:(NSDictionary*)vaultItems error:(NSError *__autoreleasing *)error;
Aktualisiert Daten im freigegebenen Citrix Endpoint Management-Tresor. Um diese Methode zu verwenden, erstellen Sie die Instanz XenMobileSharedKeychainVault und synchronisieren Sie sie dann, indem Sie Tresordatenobjekte hinzufügen oder aktualisieren. Wenn der vorhandene Tresoreintrag beispielsweise {a:123, b:234, c:305} enthält und wir diese API mit Daten verwenden, um {c:345, d:456} zu aktualisieren, aktualisiert diese API die Tresordaten auf {a:123, b:234, c:345, d:456}. Beispielcode finden Sie unter Gemeinsames Tresor-Beispiel in diesem Artikel.
Siehe saveVaultData oben für zwei weitere Möglichkeiten, Tresordaten zu speichern.
Parameter:
vaultItem – Ein einzelnes Schlüssel/Wert-Paar in der Form @{@";username::@";andreo"}.
vaultItems – Eine Liste von Schlüssel/Wert-Paaren.
- deleteVault
+ (BOOL) deleteVault:(NSString*)vaultName accessGroup:(NSString*)accessGroup error:(NSError *__autoreleasing *)error;
Löscht den angegebenen freigegebenen Tresor.
Parameter:
vaultName – Der Name des freigegebenen Citrix Endpoint Management-Tresors.
accessGroup – Der Name der Schlüsselbund-Zugriffsgruppe, die von dem Tresor verwendet wird, den Sie löschen möchten.
- deleteVaultWithError
-(BOOL) deleteVaultWithError:(NSError *__autoreleasing *)error;
Löscht den freigegebenen Tresor, der von der Instanz XenMobileSharedKeychainVault zurückgegeben wird. Sie müssen das Objekt freigeben, nachdem Sie es mit deleteVaultWithError gelöscht haben.
Beispiel für einen freigegebenen Tresor
#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-->