URL Scheme

iOS 的設計思路是原則上禁止不同的應用程序之間相互訪問彼此的數據。雖然對於像我這樣的桌面應用開發人員而言,不能訪問程序以外的數據是不能想象的。但是從安全角度來說不失爲一個有效的策略。不過凡事總有例外,所以喬布斯還是爲程序間通訊開放了幾個接口。

URL Scheme

 

iOS 上的應用程序可以通過向其它應用程序發送一個URL 格式的字符串來向其發送數據。這個特性通常用於在應用程序中啓動另外一個應用程序來打開一種特定格式的數據。例如:你的程序可以向Map 發送一個URL ,要求其打開指定的地圖;或者在郵件程序裏向Adobe Reader 發送一個URL ,要求其打開指定的PDF 文件。

 

iOS 預定義瞭如下幾種URL Scheme 。

Mail:          mailto:[email protected]

Tel:            tel:1-408-555-5555

SMS:        1-408-555-1212

Map:                  http://maps.google.com/maps?q=cupertino

YouTube: http://www.youtube.com/watch?v=VIDEO_IDENTIFIER

iTunes:

http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=156093464&id=156093462&s=143441

 

你也可以自定義URL Scheme 。需要注意的是:在多個應用程序註冊了同一種URL Scheme 的時候,iOS 系統程序的優先級高於第三方開發程序。但是如果一種URL Scheme 的註冊應用程序都是第三方開發的,那麼這些程序的優先級關係是不確定的。

(1)  註冊URL Scheme

在應用程序的Info.plist 中添加CFBundleURLTypes 項。

<key>CFBundleURLTypes </key>

<array>

   <dict>

            <key>CFBundleURLName </key>

            <string>com.acme.todolist</string>

            <key>CFBundleURLScheme </key>

            <array>

                     <string>todolist</string>

            </array>

   </dict>

</array>

 

(2)  發送 URL Scheme

NSURL *myURL = [NSURL URLWithString:@"URL Scheme"];

[[UIApplication sharedApplication ] openURL:myURL];


(3)    接收 URL Scheme

URL Schemes 由系統發送給 application delegate ,而 delegate 通常應該實現如下幾個代理函數:

l  application:didFinishLaunchingWithOptions:

判斷是否應該啓動程序來處理傳入的 URL Scheme 。這個函數只在程序從 not running 到running 時被調用。如果程序在 URL Scheme 傳入時處於 Background 或者 Suspending 狀態,那麼校驗工作應該在下面兩個代理函數中實現。

l  application:openURL:sourceApplication:annotation

在 4.2 及之後版本的 iOS 中實現。

l  application:handleOpenURL:

在 4.1 及之前版本的 iOS 中實現。

(4)    安全性

            參考 Secure Coding Guide 中 Validating Input 部分。

本文轉自:http://blog.csdn.net/flower4wine/article/details/6454957

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章