在iOS系统中,时常会遇到APP之间的跳转,以及从Web到App的跳转;而iOS系统提供自定义URL Scheme
与App进行绑定 ,通过URL Scheme在web浏览器或者其他app中启动本应用。下面介绍URL Scheme
的使用方式和参数传递。
URL Scheme的创建
1)在Info.plist
文件中添加一行,选择URL types
:
2)展开URL types
会看到默认已经生成了Item0
(如果不是首次创建,则需要手动添加Item),展开Item0
,添加URL Identifier
,用来唯一标识当前同一类型的URL Scheme
,并设置URL Identifier
的值,一般格式为域名翻转并拼接urlscheme,eg:com.demo.www.urlscheme
。
3)在Item0下添加一行,选择URL schemes,URL schemes可以添加多个item,在item中输入自定义的scheme的值,用于web或者其他APP跳转调用。
URL Scheme的使用
1)在web中使用
在web中或者safari中将url设置为demoOpen://
,即可打开应用。
2)在其他APP中调用
通过以下代码在其他应用中调用,打开本应用。
NSString *customURL = @"demoOpen://";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
URL Scheme的参数传递
在打开应用时传递的参数需要与url get请求的方式一样,将参数拼接在demoOpen://
后
eg.
NSString *customURL = @"demoOpen://?token=123abct®istered=1";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
URL Scheme的回调
在AppDelegate中实现以下两个方法:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
1)上面的两个函数作用是一致的只是参数不同而已,函数的返回值是BOOL,如果为YES表示可以打开,NO表示不可以打开应用程序。
2)通过sourceApplication
判断identifier是否一致。
3)调用url.scheme
进行判断来源并根据不同scheme进行不同的处理。
4)调用url.query
获取到参数字符串,然后进行解析获取key-value。
参数解析:
NSString *queryString = url.query;
if ([queryString isKindOfClass:[NSString class]] && queryString.length > 0) {
NSData *parData = [[NSData alloc] initWithBase64EncodedData:[queryString dataUsingEncoding:NSUTF8StringEncoding] options:NSDataBase64DecodingIgnoreUnknownCharacters];
if (parData.length > 0) {
NSDictionary *parDict = [NSJSONSerialization JSONObjectWithData:parData options:NSJSONReadingMutableContainers error:nil];
if ([parDict isKindOfClass:[NSDictionary class]]) {
}
}
}
URL Scheme-跳转第三方应用的回跳解析
几乎所有项目都会有分享功能,集成第三方SDK后通过SDK提供的跳转接口进行分享app的跳转,当分享完成后再跳回app(当然这个跳回app不是用户点击状态栏左上角的返回应用按钮),这个跳回app就是第三方app动态调用已注册的URLScheme进行跳回的。
以微信分享为例:
1)在微信开发者后台创建应用,获取APPID
2)在项目中集成SDK,调用微信Api注册APPID
3)添加URL Scheme,item为APPID
这样就成功绑定微信回跳应用的URL Scheme,也就是APPID。
网友评论