自訂 URL Scheme 完全指南,scheme完全指南

來源:互聯網
上載者:User

自訂 URL Scheme 完全指南(轉載),scheme完全指南

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

註冊自訂 URL Scheme

註冊自訂 URL Scheme 的第一步是建立 URL Scheme — 在 Xcode Project Navigator 中找到並點擊工程 info.plist 檔案。當該檔案顯示在右邊視窗,在列表上點擊滑鼠右鍵,選擇 Add Row:

向下滾動彈出的列表並選擇 URL types

點擊左邊剪頭開啟列表,可以看到 Item 0,一個字典實體。展開 Item 0,可以看到 URL Identifier,一個字串對象。該字串是你自訂的 URL scheme 的名字。建議採用反轉網域名稱的方法保證該名字的唯一性,比如 com.yourCompany.yourApp

點擊 Item 0 新增一行,從下拉式清單中選擇 URL Schemes,敲擊鍵盤迴車鍵完成插入。

注意 URL Schemes 是一個數組,允許應用定義多個 URL schemes。

展開該資料並點擊 Item 0。你將在這裡定義自訂 URL scheme 的名字。只需要名字,不要在後面追加 :// — 比如,如果你輸入 iOSDevApp,你的自訂 url 就是 iOSDevApp://

此時,整個定義如:

雖然我贊同 Xcode 使用描述性的名字的目的,不過看到建立的實際的 key 也是非常有用的。這裡有一個方便的技巧,右鍵點擊 plist 並選擇 Show Raw Keys/Values,就能看到以下效果:

還有另一種有用的輸出格式,XML,因為可以非常容易的看到字典和原始數組及其包括的實體的結構。點擊 plist 並選擇 Open As – Source Code:

從 Safari 中調用自訂 URL Scheme

定義了 URL scheme,我們可以運行一個快速測試來驗證應用是否如我們所期望的被調用。在這之前,我建立了一個準 UI 以辨別帶有自訂 URL 的應用。該應用只有一個 UILabel,帶有文本 “App With Custom URL”。下載原始碼

使用模擬器調用應用的步驟:

  • 在 Xcode 中運行應用
  • 一旦應用被安裝,自訂 URL scheme 就會被註冊
  • 通過模擬器的硬體菜單中選擇 Home 來關閉應用
  • 啟動 Safari
  • 在瀏覽器地址欄輸入之前定義的 URL scheme(如下)

此時 Safari 將會關閉,應用會被帶回到前台。祝賀你剛剛使用自訂 URL scheme 調用了一個 iPhone 應用。

從另一個 iPhone 應用中調用自訂 URL Scheme

讓我們看看如何從另一個應用中調用自訂 URL scheme。我又建立了一個非常簡單的 iPhone 應用,它只有一個 UILabel 和一個 UIButton — 前者顯示了一段資訊,告訴你這個應用將要通過自訂 URL scheme 來調用另一個應用,按鈕則開始這個行為。下載原始碼

buttonPressed 方法中的代碼處理 URL 調用:

12345678910111213141516171819
- (void)buttonPressed:(UIButton *)button{  NSString *customURL = @"iOSDevTips://";  if ([[UIApplication sharedApplication]    canOpenURL:[NSURL URLWithString:customURL]])  {    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];  }  else  {    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"                          message:[NSString stringWithFormat:                            @"No custom URL defined for %@", customURL]                          delegate:self cancelButtonTitle:@"Ok"                          otherButtonTitles:nil];    [alert show];  }}

第 5 行代碼檢查自訂 URL 是否被定義,如果定義了,則使用 shared application 執行個體來開啟 URL (第 8 行)。openURL: 方法啟動應用並將 URL 傳入應用。在此過程中,當前的應用被退出。

通過自訂 URL Scheme 嚮應用傳遞參數

有時你需要通過自訂 URL 嚮應用中傳遞參數。讓我們看看該如何完成這個工作。

NSURL 作為從一個應用調用另一個的基礎,遵循 RFC 1808 (Relative Uniform Resource Locators) 標準。 因此你所熟悉的基於網頁內容的 URL 格式在這裡也適用。

在自訂了 URL scheme 的應用中,app delegate 必須實現以下方法:

1234
- (BOOL)application:(UIApplication *)application  openURL:(NSURL *)url  sourceApplication:(NSString *)sourceApplication  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 中,擷取參數的代碼如下:

123456789
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url        sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  NSLog(@"Calling Application Bundle ID: %@", sourceApplication);  NSLog(@"URL scheme:%@", [url scheme]);  NSLog(@"URL query: %@", [url query]);  return YES;}

以上代碼在應用被調用時的輸出為:

123
Calling Application Bundle ID: com.3Sixty.CallCustomURLURL scheme:iOSDevTipsURL query: token=123abct&registered=1

注意 “Calling Application Bundle ID”,你可以用這個來確保只有你定義的應用可以與你的應用直接互動。

讓我們改變一下代碼,來驗證發起調用的應用的 Bundle ID 是否合法:

123456789101112131415
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url        sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  // Check the calling application Bundle ID  if ([sourceApplication isEqualToString:@"com.3Sixty.CallCustomURL"])  {    NSLog(@"Calling Application Bundle ID: %@", sourceApplication);    NSLog(@"URL scheme:%@", [url scheme]);    NSLog(@"URL query: %@", [url query]);    return YES;  }  else    return NO;}

有一點要特別注意,你不能阻止其他應用通過自訂 URL scheme 調用你的應用,然而你可以跳過後續的操作並返回 NO,就像上面的代碼那樣。也就是說,如果你想阻止其它應用調用你的應用,建立一個與眾不同的 URL scheme。儘管這不能保證你的應用不會被調用,但至少大大降低了這種可能性。

自訂 URL Scheme 樣本工程

我意識到按照本文的每一步做下來還是有一點複雜的。我做好了兩個非常基礎的 iOS 應用,一個自訂了 URL scheme,另一個則去調用它,並傳遞了一個比較短的參數列表(query string)。這些是體驗自訂 URL 的很好的入門點。

  • Download Xcode project for app with Custom URL scheme
  • Download Xcode project for app to call custom URL scheme
其它資源

How to Properly Validate URL Parameters URL Scheme Reference Docs

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.