deepLink
写在前面
我们在使用deepLink的流程是这样的:
(1)在A应用内配置了B应用的URLScheme,那么我们就可以进行配置生成一个URL,在执行openURL方法,就可以达到从A应用跳转到B应用了。比较完整的写法如下:
// 跳转到索尼中国APP(需要提前下载好“索尼中国”APP,否则是无法跳转的)
NSURL *url = [NSURL URLWithString:@"sonychina://"];
if ([[UIApplication sharedApplication] canOpenURL:url]){
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
// IOS10之后
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
}];
} else {
//IOS10之前
[[UIApplication sharedApplication] openURL:url];
}
} else {
// 弹框提示用户“未安装此应用”或者跳转到“AppStore下载此应用”
}
(2)从Safari的页面中触发“配置了B应用的URLScheme”的方法。
执行的JS的方法中,例如:
dLink.openAPP方法触发点击事件,dLink.conf参数配置来配置URLScheme。最后执行的URL为:sonychina://
(3)而在一般情况下,都是需要跳转到B应用的指定的界面,那么需要在#import "AppDelegate.m"中获取openURL:方法中的URL或者options参数。
// 在IOS9之前
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
// 在IOS9之后
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
Universal Links 介绍
- 在WWDC 2015上,Apple为 iOS 9 宣布了一个所谓的通用链接的deep link特性,即Universal links。
- Universal Links,一种能够方便的通过传统的HTTP/HTTPS链接来启动App,使用相同的网址打开网站和 App。
deepLink
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/s?tn=baiduhome_pg&bs=NSRUL&f=8&rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709"];
1.了解下NSURL的基本操作:
[url scheme] :http
[url host]:www.baidu.com
[url password] nil
[url port]
[url path]
[url relativePath]
[url pathComponents]
[url parameterString]
[url query]
[url fragment]
[url user]
[url password]
点击A类APP的控件跳转:到B类APP的指定界面(如果没有安装此app 显示webView,此webView中含有跳转到appStore的链接)
几种方法
三方SDK
deepLink走的方法
不管APP是启动还是未启动的,都会走AppDelegate.m中的此方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
// APP的scheme
if ([url scheme] isEqualToString:@"你的APP的scheme") {
// 从其他APP的特定URL跳转进来的(主机为“app”)
if ([[url host] isEqualToString:@"app"]) {
}
}
}
注:
- APP启动状况下,会直接走此方法;但APP未启动状况下,会先将APP启动,再走openURL。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
推送
在项目中配置推送,可参考:相关博客
注:
- 推送在APP启动时和未启动的状态下,走的方法是不一样。
- 在IOS10的情况下,需导入新的框架,组成部分:主标题、副标题、图片。
// 在启动的状况下(分情况比较多)
// app未启动的状况下
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 推送跳转(在程序被杀死的情况下)
NSMutableDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
}