iPhone SDK中最酷的功能之一是一個應用程序能夠把自己和自定義的URL協議綁定,這個URL協議可用於啓動該應用程序(通過瀏覽器或者iPhone上的另一個程序)。創建這樣的綁定並不難,難的是你忍不住要在你的程序裏用它!
首先,你需要說明你想如何在程序中響應這個URL。最簡單的自定義協議的方法是“喚醒”,而且可以通過URL把信息傳遞給程序,這樣,程序被喚醒後能做更多的事情。
註冊自定義URL協議
首先需要向iPhone註冊一個自定義URL協議。這是在你的項目文件夾的info.plist文件進行的(就是你改變應用程序圖標的同一個文件)。
默認,Xcode在圖形窗口中打開info.pllist,當然也可以直接用文本模式打開——對有的人來說這反而更簡單。
Step1. 右鍵,選擇“Add Row”
http://img.ph.126.net/0Iph-Hv_YPrI43zgkCotkw==/644859171660999084.png
Step2. Key值選擇“URL types”
http://img.ph.126.net/9PtAWSrlCfLNZ5_W6Z_TnQ==/2651494280631266664.pngStep3. 打開“Item 1″,然後爲該key增加一個URL identifier。可以是任何值,但建議用“反域名”(例如 “com.myapp”)。
http://img.ph.126.net/Rc90ogDPreD62FS2WYalvg==/2492460918789746022.pngStep4. 在“Item1”下再加一行。
http://img.ph.126.net/5EsyS1mPVhrFhctSYRU2dw==/2568459162501622413.pngStep5. 選擇“URL Schemes” 作爲Key。
http://img.ph.126.net/ba_lQpRIWvTcxfhB1FSJMg==/2723551874669194374.pngStep6. 輸入你的URL協議名 (例如“myapp://” 應寫做“myapp”)。如果有必要,你可以在這裏加入多個協議。
http://img.ph.126.net/JaWpOJRaxAZdGwSM5ctwag==/2511601217206070303.png注意:如果以文本模式打開info.plist,你會看到文件中添加了如下內容:
CFBundleURLTypes
CFBundleURLSchemes
myapp
CFBundleURLName
com.yourcompany.myapp
處理URL
現在,URL已經註冊好了。任何人都可以用打開URL的方式通過你的協議去啓動一個應用程序。
例如:
myapp://
myapp://some/path/here
myapp://?foo=1&bar=2
myapp://some/path/here?foo=1&bar=2
iOS SDK將向UIApplicationDelegate發送一條消息,啓動和上述URL綁定的應用程序。
如果你想進行自定義處理,在你的delegate中實現該消息,例如:
- (BOOL)application:(UIApplication *)applicationhandleOpenURL:(NSURL*)url { // Do something withthe url here }
通常,我們會從參數中解析出URL以便在視圖中顯示或者存儲到UserPreference。下面的例子把URL存儲爲User Preference的url變量中:
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
if (!url) { return NO; }
NSString *URLString = [urlabsoluteString];
[[NSUserDefaultsstandardUserDefaults] setObject:URLString forKey:@"url"];
[[NSUserDefaultsstandardUserDefaults] synchronize];
return YES;
}
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL *)url { if (!url) { returnNO; } NSString *URLString= [urlabsoluteString]; [[NSUserDefaults standardUserDefaults] setObject:URLStringforKey:@"url"]; [[NSUserDefaults standardUserDefaults] synchronize]; return YES; }
現在,你已經知道如何喚醒你的程序並向其傳遞參數了。Enjoy!