通常情況
1、推送
推送過來的消息,點擊后都是要跳到指定的頁面的,比如我是一款社交軟件,我獲得了一個新粉絲,應用在后臺的情況下,點擊消息,會跳轉(zhuǎn)到指定的頁面,比如“我的粉絲”頁面。這時,我們會在AppDelegate里的如下方法,處理推送過來的消息
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
2、Url Scheme
還有H5頁面,比如我用Safari打開了一款App的Web版,可能這個頁面就會有一個,Banner,上面有一個“打開XXApp”的按鈕,假設(shè)我這個Web頁面是一款商品的詳情頁,那我點擊“打開XXApp”后,就會打開這款App,并跳轉(zhuǎn)到這款商品的詳情頁。具體是通過url scheme實現(xiàn)的,以我們公司的App為例
com.gc.iosApp://?params={"des":"foodview","skuid":"248"}
com.gc.iosApp為App的跳轉(zhuǎn)鏈接,params后為Json格式的附帶參數(shù),用來跳轉(zhuǎn)到指定頁面,攔截這個字符串的方法為AppDelegate中的如下方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
// url query返回的字符串為params={"des":"foodview","skuid":"248"}
NSString *str = [[url query] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
關(guān)閉App的情況
但實際上,我們在完全退出App的情況下,比如雙擊home后,把App關(guān)掉,這種情況下,無論是點擊推送消息還是點擊h5上的url scheme跳轉(zhuǎn),上面提到的兩個跳轉(zhuǎn)方法,都是不執(zhí)行的,所以這時我們就要在以下方法做處理了。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
當App未啟動時,點擊推送消息或者點擊h5上的url scheme,就會執(zhí)行以上方法,而跳轉(zhuǎn)信息都是保存在參數(shù)launchOptions中。
// 取到推送信息
NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
// 取到url scheme跳轉(zhuǎn)信息
NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
獲取到相關(guān)跳轉(zhuǎn)信息后,就可以跳轉(zhuǎn)到具體頁面了,也就解決了未啟動App時無法跳轉(zhuǎn)詳情頁面的問題。