轉到移動端開發後竟然如今纔用到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