在開發(fā)過程中,app之間的跳轉(zhuǎn),最通用的方法是通過urlScheme。iOS9以后增加了這樣一個彈窗:如果是首次打開某一個第三方app,會彈出如下圖的一個Alert,這是系統(tǒng)自動彈出,開發(fā)人員無法控制該Alert。

系統(tǒng)彈窗
如果想捕捉到用戶行為,應該采用何種策略呢?
1.如果用戶點擊“打開”,自然而然的就會進入到第三方app,app的生命周期就會如下:
彈出Alert=>applicationWillResignActive=>點擊打開=>applicationDidEnterBackground=>返回=>applicationWillEnterForeground=>applicationDidBecomeActive2.如果用戶點擊“取消”,alert彈窗會消失,app的生命周期如下所示:
彈出Alert=>applicationWillResignActive=>點擊取消=>applicationDidBecomeActive通過上述不同交互會有不同的生命周期,可以用來判斷用戶的不同操作。對于iOS9以上的系統(tǒng),通過一個變量記錄app的四個生命周期的狀態(tài),如果從
applicationWillResignActive直接跳到applicationDidBecomeActive,那就是點擊來取消按鈕;如果中間經(jīng)歷了其他生命周期狀態(tài)回到applicationDidBecomeActive,那就是從其他app返回來了。部分代碼如下:
@interface AppDelegate ()
@property (nonatomic, assign) int appLifeCycle;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.appLifeCycle = 5;//app運行時候標志位
NSLog(@"didFinishLaunchingWithOptions");
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
self.appLifeCycle = 0;
NSLog(@"applicationWillResignActive");
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
self.appLifeCycle++;
NSLog(@"applicationDidEnterBackground");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
self.appLifeCycle++;
NSLog(@"applicationWillEnterForeground");
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
self.appLifeCycle++;
NSLog(@"applicationDidBecomeActive");
if (self.appLifeCycle == 1 && [[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) {
NSLog(@"it is the first to cancel opening other application above iOS9");
}else if (self.appLifeCycle != 6){
NSLog(@"back to myself");//返回到自己app
}
}