在 ios 裡,程式之間都是相互隔離,目前並沒有乙個有效的方式來做程式間通訊,幸好 ios 程式可以很方便的註冊自己的 url scheme,這樣就可以通過開啟特定 url 的方式來傳遞引數給另外乙個程式。
例如在 ipad 上瀏覽網頁,並且 ipad 已經安裝了 ** hd,那麼就開啟下面這個鏈結就會在** hd 中檢視這個商品的詳細資訊,也可以方便的使用** hd 進行購買、收藏等操作。
在** hd 中檢視商品「2012**卓明谷方舟登艦卡(船票)」
當然,如果你在 mac os x 中開啟這個鏈結,或者在沒有安裝 ** hd 的 ipad 中開啟這個鏈結,會提示沒有程式來開啟這個鏈結。
配置實現在 info.plist 裡面設定完 url types 之後,就可以在程式中處理這類 url 的開啟請求了。
nslog(@"%@", [url absolutestring]);
// 在 host 等於 item.taobao.com 時,說明乙個寶貝詳情的 url,
// 那麼就使用本地的 tbitemdetailviewcontroller 來顯示
if ([[url host] isequaltostring:@"item.taobao.com"])
}** for ios
現在,** 和 ** hd 兩個客戶端都支援 taobao:// 協議,來開啟特定的鏈結。目前已經支援的有:
寶貝詳情 taobao:
寶貝搜尋 taobao:
店鋪搜尋 taobao:
例如,想要在自己的程式中,使用**客戶端來顯示乙個**商品的詳情,以支援使用者可以直接在 iphone 上購買,收藏等,就可以使用下面的**:
- (void)showitemintaobao4ios:(nsstring *)itemid else
}使用**客戶端來開啟**鏈結的好處就是可以讓使用者更加方便的去購買商品,而不需要再重新登入,或者把使用者名稱密碼給了第三方的**而導致安全隱患。
擴充套件性在**客戶端中,支援的 url 往往是****已經有的鏈結,這些鏈結的 querystring 中所帶的引數往往已經滿足了使用本地**顯示內容的需要,但是為了擴充套件性考慮,就需要新增一些額外的引數,並且與原有 querystring 中不衝突的引數名稱。通過這些額外的引數,再實現客戶端開啟鏈結時更多的自定義行為。
例如,如果在開啟特定 url,進行一些操作後需要再返回原來的程式,就會需要在 url 中新增類似於 callback 這樣的引數,這樣在客戶端處理完使用者的操作後,可以將使用者操作的結果返回給原來的程式,從而實現程式間的通訊。
示例:- (void)buyitemintaobao4ios:(nsstring *)itemid
注意:當前**客戶端並不支援這樣的呼叫方式,這裡僅是乙個示例。
當然,在使用這種方式實現程式間通訊的時候,需要考慮檢查一下** url 的合法性,防止一些非法的呼叫造成使用者的損失。
結語通過自定義協議地支援,可以將 ios 程式的一些功能和服務提供給外部程式,也可以實現 web 和本地應用之間的互相呼叫。
如果你的 ios 程式有這些需求的話,那麼就可以考慮在 ios 程式中新增自定義協議的支援了。
參考資料
如何在乙個應用程式中生成Web feed
web feef是一種用於為使用者提供經常更新內容的資料格式。在這篇文章中,我們描述了怎樣使用元件zend feed,它是乙個優秀的zend framework元件的,可以為乙個yii應用生成web feed。這篇文章同樣是一篇如何使用zend framework的元件的教程。首先,我們 zend ...
iOS學習 第乙個iOS應用程式
uikit 框架提 用程式構建和管理其使用者介面所需的全部類。uikit 框架只是 cocoa touch 提供的物件導向的眾多框架中的乙個,而 cocoa touch 是所有 ios 應用程式的應用環境。呼叫 會建立乙個 類的例項和乙個應用程式委託的例項 在本教程中,應用程式委託是 由 singl...
如何在應用程式中呼叫CMD並返回執行結果
如何在應用程式中呼叫cmd並返回執行結果 要求做乙個圖形介面的應用程式,輸入命令列的命令,在後台呼叫cmd程式執行該命令但不顯示dos命令列視窗,而且能實時顯示執行的結果。哪位知道怎麼處理?謝啦 void clikecmddlg onbtnexe startupinfo si process inf...