前言
由于苹果推出了“沙盒机制”,各个APP之间不能互相访问,但是我们在使用时经常会出现APP之间跳转的情况,这就是URL Scheme的用处了
简介
URL Scheme类似于URL,可以通过该APP的URL Scheme来定位到该APP,当然定位只是最基本的用法
概览
things:///add?title=正文内容¬e=备注
- 连接头:
things
,它是启动一个应用的URL,比如:weixin
- 连接头和命令之间的:,还有
//
或者///
- 动作:
add
,指打开该APP后进行的动作 - 动作和参数之间的?
- 参数:
title
和note
- 参数和值之间同样使用
=
- 值:正文内容和备注(参数和值的使用类似于URL)
- 一组参数和另一组参数之间是
&
细则
- Scheme
对于URL来说它就是协议,但是在iOS里就是启动一个应用的URL,如果单纯只是想启动一个应用的URL使用“连接头+冒号”就可以,例如:weixin:
- 斜线数量
举个例子,我在某平台登录了AB两个账号,现在登的是A号,但是想使用B号发布文章,就可以用things://B/post
,将会直接使用B号并且在发布文章页面,而如果是things:///post
,就不会切换到B号。也就是说///
是//
的一种省略使用场景的形式
URL Scheme的用法
-
添加
-
使用
查看用户是否安装该APP
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"***://***"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"***://***"]];
}else{
//提示用户未安装app
}
如果其他APP打开了自己的APP,也会触发自己的代理方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0); // no equiv. notification. return NO if the application can't open for some reason
为了防止APP疯狂遍历用户手机上的APP,窥探隐私,iOS 9后苹果为URL Scheme添加了白名单,开发者需要在白名单中注册自己APP要用到的URL Scheme,而白名单是有数量限制的,最多50个,在iOS 9中不在白名单中注册的话,利用URL Scheme是打不开其他APP的