不启动应用,url scheme以及推送跳转指定页面
2016-06-28 本文已影响1422人
翻炒吧蛋滚饭
通常情况
1、推送
推送过来的消息,点击后都是要跳到指定的页面的,比如我是一款社交软件,我获得了一个新粉丝,应用在后台的情况下,点击消息,会跳转到指定的页面,比如“我的粉丝”页面。这时,我们会在AppDelegate里的如下方法,处理推送过来的消息
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
2、Url Scheme
还有H5页面,比如我用Safari打开了一款App的Web版,可能这个页面就会有一个,Banner,上面有一个“打开XXApp”的按钮,假设我这个Web页面是一款商品的详情页,那我点击“打开XXApp”后,就会打开这款App,并跳转到这款商品的详情页。具体是通过url scheme实现的,以我们公司的App为例
com.gc.iosApp://?params={"des":"foodview","skuid":"248"}
com.gc.iosApp为App的跳转链接,params后为Json格式的附带参数,用来跳转到指定页面,拦截这个字符串的方法为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];
}
关闭App的情况
但实际上,我们在完全退出App的情况下,比如双击home后,把App关掉,这种情况下,无论是点击推送消息还是点击h5上的url scheme跳转,上面提到的两个跳转方法,都是不执行的,所以这时我们就要在以下方法做处理了。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
当App未启动时,点击推送消息或者点击h5上的url scheme,就会执行以上方法,而跳转信息都是保存在参数launchOptions中。
// 取到推送信息
NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
// 取到url scheme跳转信息
NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
获取到相关跳转信息后,就可以跳转到具体页面了,也就解决了未启动App时无法跳转详情页面的问题。