實戰篇(上)
注冊自定義URL Scheme
- 首先注冊一個自定義的URL Scheme,在工程中找到 info.plist 文件添加URL Types。
添加URL Types.png
- 展開URL Types,有一行URL identifier,它是你URL scheme的名字,為了避免與其他App的重復,一般使用翻轉域名來定義。
定義URL identifier.png
- 在URL identifier的同級目錄添加一條URL Schemes,這里值得注意的地方有兩點:
- 被創建出的URL Schemes是一個Array,這意味著你可以定義多個URL Scheme;
- URL Scheme其實是對大小寫不敏感的,也就是說
schemeDemo
與schemedemo
的效果其實是一致的,這個后面是可以驗證的。
添加URL Schemes.png
定義scheme.png
-
整體效果應該是這個樣子:
整體效果.png
相應代碼實現
- 我們需要在AppDelegate中實現這個方法:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
以下是我的實現方式:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
NSLog(@"從哪個app跳轉而來 Bundle ID: %@", sourceApplication);
NSLog(@"URL scheme:%@", [url scheme]);
NSLog(@"URL query: %@", [url query]);
// 提示并展示query
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開URL Scheme成功"
message:[url query]
delegate:nil
cancelButtonTitle:@"確定"
otherButtonTitles:nil];
[alertView show];
return YES;
}
這段代碼其實只做了2件事:打印一些必要的信息到控制臺,然后彈出一個提示框告訴你Scheme是否打開成功。其中query
為查詢串,里面存儲著參數信息。
打開Scheme
- 下面是驗證階段,我們打開Safari,在地址欄像輸入一段普通的URL一樣輸入我們定義的
Scheme
和://
駝峰寫法.png
你可以嘗試一下②中的寫法,效果是一樣的。這也就是我上面說的Scheme對大小寫并不敏感。
非駝峰寫法.png
- 點擊確定鍵,系統會彈出提示框
提示是否打開該鏈接.png
- 點擊打開,便會跳轉到我們的App中,并執行我們寫好的
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
方法
更復雜的Scheme
-
事實上來說,我們可以將我們的Scheme寫的更復雜一些,可以帶一些我們需要參數過來,像是這樣
帶參數的Scheme.png -
進入App后的效果如下,顯示我們打開成功,并將
?
之后的字符串全部顯示了出來,也就是[url query]
中取到的內容,如果我們需要把相應的參數解析成OC的屬性或者變量,那么就需要自己寫好對應的解析方法。關于這一點我會在下一篇中詳細講解。
效果圖.png
控制臺的輸出
控制臺輸出.png
在代碼中直接打開Scheme
- 當然我們還可以不局限于在Safari中打開Scheme,我們還可以在App中借助
openURL
方法直接打開Scheme。我們在demo中的VC里加一個按鈕。它的點擊事件執行如下代碼
NSString *scheme = @"schemedemo://?parameter2=openScheme";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:scheme]];
效果與在Safari中打開一致
直接打開Scheme.png