适用于 iOS 的 API

适用于 iOS 的 XenMobile API 基于 Objective-C。本文汇总了按 API 划分的 Citrix Endpoint Management API,并提供 API 定义。

应用程序管理

  • isAppManaged

与 Secure Hub 交互

  • isMDXAccessManagerInstalled
  • logonMdxWithFlag
  • isAppLaunchedByWorxHome

MDX 策略

  • getValueOfPolicy

共享保管库

  • getVaultDataFromVault
  • saveVaultData
  • updateAndSynchronizeVaultItem
  • updateAndSynchronizeVaultItems
  • deleteVault
  • deleteVaultWithError

用户数据

  • managedUserInformation

MdxManager 类

方法

  • getValueOfPolicy

    +(NSString*) getValueOfPolicy:(NSString*)policyName error:(NSError **) error;

    对于托管应用程序,返回 Citrix Endpoint Management 管理员设置的策略值。对于非托管高级应用,返回在 Applications/Citrix/MDXToolkit/data/MDXSDK/default_policies.xml 中设置的策略值。对于非托管的“常规”应用程序,返回 nil

    参数:

    policyName - 在 default_policies.xml 中搜索策略的名称。

    示例:

    +(NSString*) getValueOfPolicy:(NSString*)DisableCamera error:(NSError **) error;

  • isMDXAccessManagerInstalled

    +(BOOL) isMDXAccessManagerInstalled: (NSError **) error;

    确认已安装 Secure Hub,这意味着应用程序的 MDX 控制已启用,即使应用程序不处于托管模式也是如此。如果已安装 Secure Hub,则返回 true

  • isAppManaged

    +(BOOL) isAppManaged;

    检查应用程序当前是否由 MDX 托管,这意味着 MDX 策略捆绑包以 XML 文件格式嵌入到应用程序中。对 Citrix Endpoint Management 后端基础结构(密钥保管库)查询数据加密部分密钥(机密),此密钥将由 MDX 用于加密应用程序数据库数据(iOS 9 及更高版本)。如果应用程序已托管,则返回

  • logonMdxWithFlag

    +(BOOL) logonMdxWithFlag:(BOOL)force error:(NSError**) error;

    通过 Secure Hub 启动 MDX 登录请求。

  • isAppLaunchedByWorxHome

    +(BOOL) isAppLaunchedByWorxHome;

    检查应用程序间 URL 请求是否来自 Secure Hub 或设备上的其他一些应用程序,如果需要使应用程序了解 MDX 控制通信则这是必需的。在 iOS 上,应用程序可以注册特定的 URL 方案。URL 方案是 URL 的第一个部分,但不包括冒号。如果 URL 以 http:// 开头,则方案为 http。

    启用了 MDX 的应用程序和 Secure Hub 使用自定义 URL 方案进行通信。例如,要处理来自其他应用程序的 mailto: URL,Secure Mail 要求使用 URL 方案 ctxmail。要处理来自其他应用程序的 http 或 https URL,Secure Web 要求分别使用 URL 方案 ctxmobilebrowser 或 ctxmobilebrowsers。有关“MDX 应用程序 URL 方案”策略和“允许的 URL”策略的详细信息,请参阅适用于 iOS 应用程序的 MDX 策略

    在以下 UIApplication 委派事件调用期间或之后随时随地查询时返回准确的结果:

    • 当应用程序从 springboard 或 openURL 调用加载时:

      application:willFinishLaunchingWithOptions:
      
      application:didFinishLaunchingWithOptions:
      
      applicationDidFinishLaunching:
      
    • 当用户从设备 SpringBoard 激活或重新激活应用程序时

      applicationDidBecomeActive:
      

    重要:

    运行 applicationWillEnterForeground: 过程中不得执行查询。

    • 由当应用程序被 openURL 调用激活或重新激活时:

      application:openURL:sourceApplication:annotation:
      
      application:handleOpenURL:
      
  • managedUserInformation

    extern __attribute__((visibility ("default"))) NSString *const kXenMobileUsername; +(NSDictionary*) managedUserInformation;

    返回一个字符串,其中包含正在运行 MDX 托管应用程序的已注册用户的用户名(无论该用户的登录状态如何)。如果用户未注册、应用程序不处于托管模式或者应用程序未打包,则返回一个空字符串。

类 XenMobileSharedKeychainVault

方法

  • initWithVaultName

    - (instancetype) initWithVaultName:(NSString*)vaultName accessGroup:(NSString*)accessGroup;

    初始化 Citrix Endpoint Management 共享保管库。

    使用共享保管库 API 在具有相同钥匙串访问权限组的应用程序之间共享托管内容。例如,您可以通过已注册的应用程序共享用户证书,以便应用程序可以从安全的保管库而不是从 Secure Hub 获取证书。

    参数:

    vaultName – Citrix Endpoint Management 共享保管库的名称。

    accessGroup - 钥匙串访问权限组的名称。这可以是默认 MDX 访问权限组、命名的 TEAMID_A.appOriginalBundleID,或者是您将用于在应用程序之间共享数据的钥匙串访问权限组。

  • 保管库数据类型属性

       @property(nonatomic,readonly) BOOL exists;
    
       @property(nonatomic,readonly) BOOL isAccessible;
    
       @property(nonatomic,strong) NSMutableDictionary* vaultData
    

    初始化保管库后,将返回以下保管库数据类型属性:

    exists - 指示是否已找到具有指定 vaultName 的保管库。

    isAccessible – 指示保管库是否位于指定的 accessGroup 中,并且可以访问。

    vaultData - 共享保管库中的内容。首次初始化保管库时,vaultData 为 nil 字典。

  • getVaultDataFromVault

    + (NSDictionary*) getVaultDataFromVault:(NSString*)vaultName accessGroup:(NSString*)accessGroup error:(NSError *__autoreleasing *)error;

    从 Citrix Endpoint Management 共享保管库中读取数据。这是三种用于读取保管库数据的方法之一,如下所示:

    • 直接使用 getVaultDataFromVault:accessGroup:error。

    • 创建 XenMobileSharedKeychainVault 实例,然后读取 vaultData 属性。

    • 创建 XenMobileSharedKeychainVault 实例,然后通过使用 -(BOOL) loadDataWithError:(NSError *__autoreleasing *)error; 并读取 vaultData 属性来重新加载保管库数据。

    有关示例代码的信息,请参阅本文中的“共享保管库示例”。

    参数:

    vaultName – Citrix Endpoint Management 共享保管库的名称。

    accessGroup - 钥匙串访问权限组的名称。这可以是默认 MDX 访问权限组、命名的 TEAMID_A.appOriginalBundleID,或者是您将用于在应用程序之间共享数据的钥匙串访问权限组。

  • saveVaultData

    + (BOOL) saveVaultData:(NSDictionary*)vaultData toVault:(NSString*)vaultName accessGroup:(NSString*)accessGroup error:(NSError *__autoreleasing *)error;

    将数据保存在 Citrix Endpoint Management 共享保管库中。这是三种用于保存保管库数据的方法之一,如下所示:

    • 直接使用 saveVaultData:toVault:accessGroup:error:

    • 使用 updateAndSynchronizeVaultItem:updateAndSynchronizeVaultItems(如下文表格中所示)。

    • 通过创建 XenMobileSharedKeychainVault 实例,加载保管库数据,修改保管库数据,然后同步该数据来使用 -(BOOL)synchronizeWithError:(NSError *__autoreleasing *)error;

    有关示例代码的信息,请参阅本文中的“共享保管库示例”。

    参数:

    vaultData – 数据保存到 Citrix Endpoint Management 共享保管库中。存储在共享保管库中的数据是键/值对的字典,例如 @{@”username”:@”andreo”}。

    vaultName – Citrix Endpoint Management 共享保管库的名称。

    accessGroup - 钥匙串访问权限组的名称。这可以是默认 MDX 访问权限组、命名的 TEAMID_A.appOriginalBundleID,或者是您将用于在应用程序之间共享数据的钥匙串访问权限组。

  • updateAndSynchronizeVaultItem

    updateAndSynchronizeVaultItems

    - (BOOL)updateAndSynchronizeVaultItem:(NSString*)vaultItem withValue:(id)itemValue error:(NSError *__autoreleasing *)error;

    - (BOOL)updateAndSynchronizeVaultItems:(NSDictionary*)vaultItems error:(NSError *__autoreleasing *)error;

    更新 Citrix Endpoint Management 共享保管库中的数据。要使用此方法,请创建 XenMobileSharedKeychainVault 实例,然后通过添加或更新保管库数据项对其进行同步。例如,如果现有保管库条目具有 {a:123, b:234, c:305},并且我们使用此 API 和数据更新 {c:345, d:456},则该 API 会将保管库数据更新为 {a:123, b:234, c:345, d:456}。有关示例代码的信息,请参阅本文中的共享保管库示例。

    请参阅上文 saveVaultData,了解其他两种用于保存保管库数据的方法。

    参数:

    vaultItem – 单个键/值对,采用格式 @{@";username::@"andreo"}

    vaultItems – 键/值对的列表。

  • deleteVault

    + (BOOL) deleteVault:(NSString*)vaultName accessGroup:(NSString*)accessGroup error:(NSError *__autoreleasing *)error;

    删除指定的共享保管库。

    参数:

    vaultName – Citrix Endpoint Management 共享保管库的名称。

    accessGroup - 要删除的保管库使用的钥匙串访问权限组的名称。

  • deleteVaultWithError

    -(BOOL) deleteVaultWithError:(NSError *__autoreleasing *)error;

    删除 XenMobileSharedKeychainVault 实例返回的共享保管库。必须在使用 deleteVaultWithError 删除对象后释放该对象。

共享保管库示例

#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

适用于 iOS 的 API