转到移动端开发后竟然如今才用到Scheme真是惭愧惭愧。ios
相信你们都知道URL。git
http://www.apple.com就是一个URL。github
而://以前的部分就称为Scheme浏览器
(因此,你看,其实并无什么难的,在这里多插一句给新人的话:不要看到新东西就以为难,其实不少时候难的就是在于你看到新事物而不敢去研究)微信
也就是说http://www.apple.com的Scheme就是http。app
iOS中的Scheme也是同样的,无非是定义应用本身的Scheme,而后定义一些本身的URL解析,就好像YourApp://OneController?username=xxx&userInput=xxx工具
有了这些URL Scheme你能够像网页跳转同样经过URL来传递参数、信息。学习
好比常见的分享功能,从其余应用点击微信分享,会自动跳转到微信APP的朋友圈发表动态页面,并填好相应的动态内容。你能够想象一下其URL Scheme多是这样的:weixin://dl/moments?content=”今天在学习URL Scheme”&src=”zhoulingyu.com”(我只是举个例子)url
有一点须要注意的是,和Web开发不一样,iOS中并非全部的页面或者操做都有URL Schemes,这彻底是由你主导的的,若是你须要,你就能够本身定义一些,并去解析。code
自定义Scheme是有意义的
有如下几种使用场景供你参考:
咱们建一个应用,就叫URLSchemeDemo
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"从哪一个app跳转而来 Bundle ID: %@", sourceApplication); NSLog(@"URL scheme:%@", [url scheme]); return YES;}
上面编写了如何从浏览器经过URL Scheme跳转应用,下面将展现如何从另外一个应用跳转到本应用
再建一个项目,就叫URLSchemeDemoTest
- (IBAction)jump:(UIButton *)sender { NSString *customURL = @"URLSchemeDemo://"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];}
看到这里可能有人问了,我能够在跳转的时候传递一些参数吗?
固然能够,这些参数你均可以本身添加,可是一样要在- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
中作解析。
好比像YourAPP://SecondController?content=”成功解析”这样的URL Scheme,可能本身解析起来很是的费劲
在这里介绍一个第三方工具JLRoutes,能够很是方便的解析自定义URL Scheme
好比咱们如今就要解析URLSchemeDemo://SecondController,但愿使用这个URLScheme直接能够打开URLSchemeDemo应用中的SecondController
- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor greenColor];}
//// AppDelegate.m// URLSchemeDemo//// Created by 周凌宇 on 16/1/3.// Copyright © 2016年 周凌宇. All rights reserved.//#import "AppDelegate.h"#import "JLRoutes.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [JLRoutes addRoute:@"/:controller" handler:^BOOL(NSDictionary *parameters) { NSString *controller = parameters[@"controller"]; [self.window.rootViewController presentViewController:[[NSClassFromString(controller) alloc] init] animated:YES completion:^{ }]; return YES; }]; return YES;}- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [JLRoutes routeURL:url];}@end
固然是改一下咱们点击按钮后打开的URL
- (IBAction)jump:(UIButton *)sender { NSString *customURL = @"URLSchemeDemo://SecondViewController"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];}
若是想要源代码,小鱼已经上传了一份,能够在这里下载
JLRoutes是一个很是好用的工具,除了以上简单的用法外,还能够解析更加复杂的URL Scheme,能够参考官方文档:https://github.com/joeldev/JLRoutes