1. 程式人生 > >【讀書筆記】iOS-自定義 URL Scheme 完全指南

【讀書筆記】iOS-自定義 URL Scheme 完全指南

iPhone / iOS SDK 最酷的特性之一就是應用將其自身”繫結”到一個自定義 URL scheme 上,該 scheme 用於從瀏覽器或其他應用中啟動本應用。註冊自定義 URL Scheme註冊自定義 URL Scheme 的第一步是建立 URL Scheme — 在 Xcode Project Navigator 中找到並點選工程 info.plist 檔案。當該檔案顯示在右邊視窗,在列表上點選滑鼠右鍵,選擇 Add Row:向下滾動彈出的列表並選擇 URL types。iOS Custom URL Scheme點選左邊剪頭開啟列表,可以看到 Item 0,一個字典實體。展開 Item 0,可以看到 URL Identifier,一個字串物件。該字串是你自定義的 URL scheme 的名字。建議採用反轉域名的方法保證該名字的唯一性,比如 com.yourCompany.yourApp。
urlScheme2a點選 Item 0 新增一行,從下拉列表中選擇 URL Schemes,敲擊鍵盤迴車鍵完成插入。 iOS Custom URL Scheme注意: URL Schemes 是一個數組,允許應用定義多個 URL schemes。 iOS Custom URL Scheme展開該資料並點選 Item 0。你將在這裡定義自定義 URL scheme 的名字。只需要名字,不要在後面追加 :// — 比如,如果你輸入 iOSDevApp,你的自定義 url 就是 iOSDevApp:// iOS Custom URL Scheme此時,整個定義如下圖: iOS Custom URL Scheme
雖然我贊同 Xcode 使用描述性的名字的目的,不過看到建立的實際的 key 也是非常有用的。這裡有一個方便的技巧,右鍵點選 plist 並選擇 Show Raw Keys/Values,就能看到以下效果: iOS Custom URL Scheme還有另一種有用的輸出格式,XML,因為可以非常容易的看到字典和原始陣列及其包括的實體的結構。點選 plist 並選擇 Open As – Source Code: iPhone Custom URL Scheme從 Safari 中呼叫自定義 URL Scheme定義了 URL scheme,我們可以執行一個快速測試來驗證應用是否如我們所期望的被呼叫。在這之前,我建立了一個準 UI 以辨別帶有自定義 URL 的應用。該應用只有一個 UILabel,帶有文字 “App With Custom URL”(
下載原始碼
)。 
iOS App with Custom URL使用模擬器呼叫應用的步驟:1. 在 Xcode 中執行應用2. 一旦應用被安裝,自定義 URL scheme 就會被註冊3. 通過模擬器的硬體選單中選擇 Home 來關閉應用4. 啟動 Safari5. 在瀏覽器位址列輸入之前定義的 URL scheme(如下) Call Custom URL Scheme from Safari此時 Safari 將會關閉,應用會被帶回到前臺。祝賀你剛剛使用自定義 URL scheme 呼叫了一個 iPhone 應用。從另一個 iPhone 應用中呼叫自定義 URL Scheme讓我們看看如何從另一個應用中呼叫自定義 URL scheme。我又建立了一個非常簡單的 iPhone 應用,它只有一個 UILabel 和一個 UIButton — 前者顯示了一段資訊,告訴你這個應用將要通過自定義 URL scheme 來呼叫另一個應用,按鈕則開始這個行為(下載原始碼)。 iPhone app that call Custom URL SchemebuttonPressed 方法中的程式碼處理 URL 呼叫: 
  1. - (void)buttonPressed:(UIButton *)button 
  2.   NSString *customURL = @"iOSDevTips://"; 
  3.   if ([[UIApplication sharedApplication] 
  4.     canOpenURL:[NSURL URLWithString:customURL]]) 
  5.   { 
  6.     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]]; 
  7.   } 
  8.   else 
  9.   { 
  10.     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error" 
  11.                           message:[NSString stringWithFormat: 
  12.                             @"No custom URL defined for %@", customURL] 
  13.                           delegate:self cancelButtonTitle:@"Ok" 
  14.                           otherButtonTitles:nil]; 
  15.     [alert show]; 
  16.   } 
第 5 行程式碼檢查自定義 URL 是否被定義,如果定義了,則使用 shared application 例項來開啟 URL (第 8 行)。openURL: 方法啟動應用並將 URL 傳入應用。在此過程中,當前的應用被退出。通過自定義 URL Scheme 嚮應用傳遞引數有時你需要通過自定義 URL 嚮應用中傳遞引數。讓我們看看該如何完成這個工作。NSURL 作為從一個應用呼叫另一個的基礎,遵循 RFC 1808 (Relative Uniform Resource Locators) 標準。 因此你所熟悉的基於網頁內容的 URL 格式在這裡也適用。在自定義了 URL scheme 的應用中,app delegate 必須實現以下方法: 
  1. - (BOOL)application:(UIApplication *)application 
  2.   openURL:(NSURL *)url 
  3.   sourceApplication:(NSString *)sourceApplication 
  4.   annotation:(id)annotation 
從一個應用傳遞引數到另一個的訣竅是通過 URL。例如,假設我們使用以下的 URL scheme,想傳遞一個名為 “token”的引數和一個標識註冊狀態的標誌,我們可以像這樣建立一個 URL: 
  1. NSString *customURL = @"iOSDevTips://?token=123abct&registered=1"; 
在 web 開發中,字串 ?token=123abct&registered=1 被稱作查詢詢串(query string)。在被呼叫(設定了自定義 URL)的應用的 app delegate 中,獲取引數的程式碼如下: 
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
  2.         sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
  3.   NSLog(@"Calling Application Bundle ID: %@", sourceApplication); 
  4.   NSLog(@"URL scheme:%@", [url scheme]); 
  5.   NSLog(@"URL query: %@", [url query]); 
  6.   return YES; 
以上程式碼在應用被呼叫時的輸出為: 
  1. Calling Application Bundle ID: com.3Sixty.CallCustomURL 
  2. URL scheme:iOSDevTips 
  3. URL query: token=123abct&registered=1 
注意 “Calling Application Bundle ID”,你可以用這個來確保只有你定義的應用可以與你的應用直接互動。讓我們改變一下程式碼,來驗證發起呼叫的應用的 Bundle ID 是否合法: 
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
  2.         sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
  3.   // Check the calling application Bundle ID 
  4.   if ([sourceApplication isEqualToString:@"com.3Sixty.CallCustomURL"]) 
  5.   { 
  6.     NSLog(@"Calling Application Bundle ID: %@", sourceApplication); 
  7.     NSLog(@"URL scheme:%@", [url scheme]); 
  8.     NSLog(@"URL query: %@", [url query]); 
  9.     return YES; 
  10.   } 
  11.   else 
  12.     return NO; 
有一點要特別注意,你不能阻止其他應用通過自定義 URL scheme 呼叫你的應用,然而你可以跳過後續的操作並返回 NO,就像上面的程式碼那樣。也就是說,如果你想阻止其它應用呼叫你的應用,建立一個與眾不同的 URL scheme。儘管這不能保證你的應用不會被呼叫,但至少大大降低了這種可能性。

相關推薦

讀書筆記iOS-定義 URL Scheme 完全指南

iPhone / iOS SDK 最酷的特性之一就是應用將其自身”繫結”到一個自定義 URL scheme 上,該 scheme 用於從瀏覽器或其他應用中啟動本應用。註冊自定義 URL Scheme註冊

IOS 定義 URL Scheme 完全指南

iPhone / iOS SDK 最酷的特性之一就是應用將其自身”繫結”到一個自定義 URL scheme 上,該 scheme 用於從瀏覽器或其他應用中啟動本應用。 註冊自定義 URL Scheme 註冊自定義 URL Scheme 的第一步是建立 URL Scheme — 在 Xcode Proj

定義 URL Scheme 完全指南

注意: 自從自定義 URL 的引入,本文始終是我部落格中閱讀量最大的文章。雖然大多數都相同,但仍然有一些細微差別的變化。本文是原帖的重寫版,更新為最新的 iOS 和 Xcode 版本。 iPhone / iOS SDK 最酷的特性之一就是應用將其自身”繫結”到一個自定義 URL scheme 上,該 s

讀書筆記iOS-截屏功能的實現。

ima under auto core cal ica dsm gef control 一。整個project文件。 二,代碼 ViewController.m #import "ViewController.h" #import <Q

讀書筆記iOS-查看一個軟件ipa包的內容

技術 -s alt dsm clas rda 軟件 選中 tun 一,打開itunes----->我的iPhone應用程序。 二,右鍵點擊app---->在Finder中顯示---->出現下圖所看到的界面。

讀書筆記iOS-庫

一,OS X和iOS自帶一些標準的C程式庫和作業系統相關的特殊性。在MAC和iOS的世界裡,靜態庫採用.a副檔名(靜態物件程式碼庫存檔),動態載入庫採用.dylib副檔名。如果開發人員來自於Linux世界,可能習慣於.so檔案;如果開發人員過去是Windows的開發人員,可能把它們稱作DLL。 二,

讀書筆記iOS-使用GCD改善效能

一,佇列簡介。 有些與並行處理相關的術語令人迷惑。執行緒是一個常用的術語,在iOS應用中,執行緒是標準的POSIX執行緒。從技術上說,執行緒不過是一組指令,可在程序中獨立地處理;在同一個程序中,可以有多個執行緒,它們共享記憶體和資源。由於執行緒是獨立的,可將工作劃分給多個執行緒,以提供工作的完成速度。在多個

讀書筆記iOS-使用鑰匙串保護資料

一,將應用從裝置上刪除時,並不會刪除其鑰匙串項,這使得除錯工作困難得多。模擬器有一個Reset Contents and Settings選項,可用於將鑰匙串項移除。因此,強烈建議在模擬器上確定Keychain應用執行正常之後,再到裝置上模擬。 二,keychain包含在框架Security

讀書筆記iOS-更新專案前要注意的事情

在進行永久更改專案的任何現代化操作之前,要問自己幾個問題。 1,我還需要返回專案的舊程式碼嗎? 2,我的同事中有沒有人無法升級到最新版本的Xcode? 3,  如果我使用了最新的功能,會不會減少使用者? 如果上述問題是有答案為“是”的,就應該更謹慎地考慮現代化專案的決策

讀書筆記iOS-開發技巧-UILabel內容模糊的原因

在非Retina的iPad mini的螢幕上,一個UILabel的frame的origin值如果有小數位數(例如,0.5),就會造成顯示模糊。所以最好用整數值的origin座標。 參考資料:

讀書筆記iOS-檢視一個軟體ipa包的內容

一,開啟itunes----->我的iPhone應用程式。 二,右鍵點選app---->在Finder中顯示---->出現下圖所示介面。 三,將上圖中的ipa包

讀書筆記iOS-storyboard-兩個場景間的切換(二)

接著上一節一,在storybord畫布上面,新增加一個場景,即拖動一個View Controller到畫布上面,同時建立一個button,名字為secondButton.如圖所示。二,點選第一個按鈕的時

讀書筆記iOS-UDID

UIDevice類可以返回當前iOS裝置的UDID,以前開發者通常使用UDID作為識別每臺裝置的唯一標識,然後從iOS5開始,蘋果公司將這一功能標記為廢止並不推薦使用,蘋果公司在iOS6之後將這個功能去

讀書筆記iOS-手勢識別

一,事件處理機制事件是當用戶手指觸及螢幕,或地螢幕上滑動,或搖晃裝置等時候,系統不斷地把這些事件通過訊息傳送給應用程式物件。在iOS裝置中能夠捕獲的事件有3種:觸控事件,移動事件和多媒體遠端控制事件。觸

讀書筆記iOS-訪問iPod媒體庫

iOS裝置內部都有一個iPod媒體庫,在這個媒體庫中包含了音訊和視訊檔案,它的來源主要是蘋果公司的iTunes Store,現在蘋果公司的iTunes Store內容很多,但能夠下載到iPod媒體庫的檔

讀書筆記iOS-配件

如果你想用External Accessory框架開發第三方硬體裝置,你需要考慮成為Made for iPhone(MFI)授權專案的成員。得到授權的開發者可以獲取技術資料,硬體裝置以及技術支援,以便

讀書筆記iOS-微信公眾平臺開發最佳實踐

一,微信是由騰訊公司廣州研發中心產品團隊開發,該團隊經理張小龍被稱為“微信之父”,公司總裁馬化騰確定該產品名稱為“微信”。 二,常見問題及解決方案。 1,請求URL超時。 這種情況一般是由於伺服器網速

讀書筆記iOS-UI Automation 需要遵守的規則

1,被測試的應用程式必須是Developer簽名的應用程式或者是執行在模擬器裡面的應用程式。 2,在被測試的應用程式開發的過程中需要處理UI控制元件的可訪問性。使用IB的開發工程師需要在XIB中加入一

讀書筆記iOS-軟體測試與iOS測試

一,軟體測試的型別。 1.軟體測試按照測試型別,可以劃分為:單元測試,整合測試和系統測試。 2.單元測試是指對軟體系統中最小可測試單元進行的檢查和驗證。 3.整合測試,在iOS軟體開發中,整合測試主

Java編程思想筆記註解--定義註解

password admin lamp sta 如果 amp 部分 oot nbsp 文章參考自:https://www.cnblogs.com/xdp-gacl/p/3622275.html 學習網站:how2java.cn