MicroStrategy ONE

Integrate MicroStrategy Library with EMM Providers in iOS

Enterprise mobility management (EMM) tools help you manage mobile devices, wireless networks, and related services that support mobile computing in your enterprise. Unlike MAM, some EMM SDKs require Library integration to provide support for EMM functionality. The functions include:

  • Activation & user authentication
  • Secure communication
  • Data leakage prevention
    • DISABLEEMAIL
    • DISABLEOPENIN
    • DISABLEPRINT
    • DISABLECOPYPASTE
    • DISABLECAMERAACCESS
    • DISABLELOCATIONSERVICES
    • DISABLESAVETOPHOTOS
  • Administrative controls

The following APIs are defined in SecurityHandler. The default methods are implemented by SecurityHandlerImpl and MSTRSecurityHandler. Customers can extend from MSTRSecurityHandler and override these methods to allow the Library app to interact with third-party EMM SDK.

Copy
@protocol SecurityHandler <NSObject>

/**
 * Returns the singleton secuirty handler for the current security framework
 * @return the security handle
 */
+ (id<SecurityHandler> _Nullable) securityHandler;


/**
 * Initialize the security framework with the paramters.
 * @param parameters the paramters used for framework initialization, by default the value is nil
 */
- (void)initialize:(NSArray* _Nullable)parameters;


/**
 * Returns the current UIWindow for the application based on the Security Framework of the application
 * @param UIWindow the UIWindow
 */
- (UIWindow* _Nullable )window;


/**
 * Authorize using the current Security Framework
 */
- (void)authorize;


/**
  * Implement the method in case the framework needs to unauthorize the application when tha application goes in the background
  */
- (void)unAuthorizeOnBackground;


/** Return whether the contents of the application should be covered when the application goes in background so that the contents are not shown
  * when user launches the application again until the user authorizes
  * @return whether the contents needs to be covered
  */
- (BOOL)shouldHideScreenContentsOnBackground;


/**
 * Set the delegate to recevie the SecurityHandler callback
 * @param delegate the delegate
 */
- (void)setDelegate:(id<SecurityHandlerDelegate> _Nullable)delegate;


/**
 * Returns whether the application has authorized with the current Security Framework
 * @return authorized
 */
- (BOOL)isAuthorized;


/**
* Returns whether the feature is available with the current security framework.
* The enum for MSTRFeature are defined in Enums.h.
* @param feature feature that being checked.
* @return whether the feature is supported with the current security framework.
*/
- (BOOL) featureAvailable:(MSTRFeature)feature;


/**
* Returns managed configuration with the current security framework.
* @return a NSDictionary object contains managed configuration in key-value pairs. The keys are defined in SecurityHandlerImpl.h.
*/
- (NSDictionary * _Nullable) managedConfiguration;


/**
* Apply a configuration URL to set up the application.
* @param configurationURLString configuration URL string
*/
- (void) applyConfigurationURLString:(NSString *) configurationURLString;


/** Return whether authorize again using the current Security Framework
  * when application is started and user taps on an application url
  * @return whether authorize again using the current Security Framework
  */
- (BOOL)requiresAuthorizationOnApplicationOfNewURL;


/**
 * Open the url with External App, such as Safari
 * You can block the operation by overriding this method
 * @param url the url
 */
- (void) openWithExternalApp:(NSString* _Nullable)url;


/** Return whether the current Security Framework can handle Integrated Authentication challenge
  * @param challenge the Integrated Authentication challenge
  * @return whether the current Security Framework can handle Integrated Authentication challenge
  */
- (BOOL)canHandleNetworkAuthenticationChallenge:(NSURLAuthenticationChallenge * _Nullable)challenge;


/** Handle Integrated Authentication challenge with the current Security Framework
  * @param challenge the Integrated Authentication challenge
  * @param completionHandler the completionHandler to handle Integrated Authentication challenge
  * @return whether successfully handled Integrated Authentication challenge
  */
- (BOOL)handleNetworkAuthenticationChallenge:(NSURLAuthenticationChallenge * _Nullable)challenge completionHandler:(void (^ _Nullable)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nonnull))completionHandler;


/** Return whether the url can be handled in web view
  * @param url the url
  * @return whether the url can be handled in web view
  */
- (BOOL)canHandleURL:(NSURL* _Nullable)url;

@end        

For DossierAppDelegate, the following methods can be overridden by a customized application delegate to change the default SecurityHandler to the customized SecurityHandler for third-party EMM SDK integration. These APIs are defined in the UIApplicationDelegate protocol of UIKit:

Copy
@protocol UIApplicationDelegate<NSObject>

@optional

/**
 * Tells the delegate that the launch process has begun but that state restoration has not yet occurred.
 * @param application The singleton app object.
 * @param launchOptions A dictionary indicating the reason the app was launched (if any).
 * @return NO if the app cannot handle the URL resource or continue a user activity, or if the app should not perform the application:performActionForShortcutItem:completionHandler: method because you’re handling the invocation of a Home screen quick action in this method; otherwise return YES. The return value is ignored if the app is launched as a result of a remote notification.
 */
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(nullable NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions;

/**
 * Asks the delegate to open a resource specified by a URL, and provides a dictionary of launch options.
 * @param app Your singleton app object.
 * @param url The URL resource to open. This resource can be a network resource or a file.
 * @param options A dictionary of URL handling options.
 * @return YES if the delegate successfully handled the request or NO if the attempt to open the URL resource failed.
 */
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options;