在開(kāi)發(fā)過(guò)程中偏友,app之間的跳轉(zhuǎn),最通用的方法是通過(guò)urlScheme对供。iOS9以后增加了這樣一個(gè)彈窗:如果是首次打開(kāi)某一個(gè)第三方app位他,會(huì)彈出如下圖的一個(gè)Alert,這是系統(tǒng)自動(dòng)彈出产场,開(kāi)發(fā)人員無(wú)法控制該Alert鹅髓。
系統(tǒng)彈窗
如果想捕捉到用戶行為,應(yīng)該采用何種策略呢京景?
1.如果用戶點(diǎn)擊“打開(kāi)”窿冯,自然而然的就會(huì)進(jìn)入到第三方app,app的生命周期就會(huì)如下:
彈出Alert=>applicationWillResignActive=>點(diǎn)擊打開(kāi)=>applicationDidEnterBackground=>返回=>applicationWillEnterForeground=>applicationDidBecomeActive
2.如果用戶點(diǎn)擊“取消”确徙,alert彈窗會(huì)消失醒串,app的生命周期如下所示:
彈出Alert=>applicationWillResignActive=>點(diǎn)擊取消=>applicationDidBecomeActive
通過(guò)上述不同交互會(huì)有不同的生命周期,可以用來(lái)判斷用戶的不同操作鄙皇。對(duì)于iOS9以上的系統(tǒng)芜赌,通過(guò)一個(gè)變量記錄app的四個(gè)生命周期的狀態(tài),如果從
applicationWillResignActive
直接跳到applicationDidBecomeActive
伴逸,那就是點(diǎn)擊來(lái)取消按鈕缠沈;如果中間經(jīng)歷了其他生命周期狀態(tài)回到applicationDidBecomeActive
,那就是從其他app返回來(lái)了错蝴。部分代碼如下:
@interface AppDelegate ()
@property (nonatomic, assign) int appLifeCycle;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.appLifeCycle = 5;//app運(yùn)行時(shí)候標(biāo)志位
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
}
}