单应用实现思路与分离应用实现思路的主要区别在于MSTR Client程序的改造方面。
实现思路:不再单独建立登录壳应用,而是在MSTR Client端程序上直接进行改造,在init方法中swizzling didFinishLaunchingWithOptions方法,在自定义方法中加载登录页面,之后在登录页面触发登录事件的时候用openURL的方式重新加载应用。
具体的关键点实现步骤如下:
1.新建一个m文件扩展MSTRMobileAppDelegate(具体见策略一),添加init方法的重写并对didFinishLaunchingWithOptions进行swizzling,代码如下:
- (id)init
{
Method myReplacementMethodLoad = class_getInstanceMethod([self class], @selector(my_application:didFinishLaunchingWithOptions:));
Method originMethodLoad = class_getInstanceMethod([self class], @selector(application:didFinishLaunchingWithOptions:));
method_exchangeImplementations(myReplacementMethodLoad, originMethodLoad);
return self;
}
2.在自定义didFinishLaunchingWithOptions方法中添加对自定义登录页面的加载,代码如下:
- (BOOL)my_application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self my_application:application didFinishLaunchingWithOptions:launchOptions];
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
loginViewController.delegate = self;
[self setupNavigationControllerWithApplicationLauncher:(ApplicationLauncherController*)loginViewController];
self.navigationController.navigationBarHidden = YES;
[loginViewController release];
return YES;
}
3.shouldLaunch方法中进行对openURL方法的swizzling(具体见策略一)。
4.自定义openURL方法中的处理与策略一致。
其余部分客户端改造与策略一相同,MicroStrategyMobile工程的WCE改造见策略一。
这样单一应用的登录壳改造就完成了。
优缺点:有点就是完整的单一应用,对于版本的部署以及发布升级都有很多好处。有个缺点就是在登录画面点击登录的时候会有2-3秒的黑屏时间,这是因动态载入画面加载导致的问题,不过时间很短可以忽略。
注:MicroStrategy 9.3.1新引入了动态载入画面的特性,因此在改造客户端的时候应该重写一下动态载入画面的方法,如果不需要该功能直接return NO即可,如果不进行方法重写,程序加载的时候会发生错误。