發布於:2012-05-29 10:42
在 ios 裡,程式之間都是相互隔離,目前並沒有乙個有效的方式來做程式間通訊,幸好 ios 程式可以很方便的註冊自己的 url scheme「」
閱讀器url scheme
在 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
寶貝詳情 taobao:
寶貝搜尋 taobao:
店鋪搜尋 taobao:
例如,想要在自己的程式中,使用**客戶端來顯示乙個**商品的詳情,以支援使用者可以直接在 iphone 上購買,收藏等,就可以使用下面的**:
- (void)showitemintaobao4ios:(nsstring *)itemid else
}使用**客戶端來開啟**鏈結的好處就是可以讓使用者更加方便的去購買商品,而不需要再重新登入,或者把使用者名稱密碼給了第三方的**而導致安全隱患。
擴充套件性
在**客戶端中,支援的 url 往往是****已經有的鏈結,這些鏈結的 querystring 中所帶的引數往往已經滿足了使用本地**顯示內容的需要,但是為了擴充套件性考慮,就需要新增一些額外的引數,並且與原有 querystring 中不衝突的引數名稱。通過這些額外的引數,再實現客戶端開啟鏈結時更多的自定義行為。
例如,如果在開啟特定 url,進行一些操作後需要再返回原來的程式,就會需要在 url 中新增類似於 callback 這樣的引數,這樣在客戶端處理完使用者的操作後,可以將使用者操作的結果返回給原來的程式,從而實現程式間的通訊。
示例:- (void)buyitemintaobao4ios:(nsstring *)itemid
注意:當前**客戶端並不支援這樣的呼叫方式,這裡僅是乙個示例。
當然,在使用這種方式實現程式間通訊的時候,需要考慮檢查一下** url 的合法性,防止一些非法的呼叫造成使用者的損失。
結語
通過自定義協議地支援,可以將 ios 程式的一些功能和服務提供給外部程式,也可以實現 web 和本地應用之間的互相呼叫。
如果你的 ios 程式有這些需求的話,那麼就可以考慮在 ios 程式中新增自定義協議的支援了。
參考資料
— eof —
論壇原帖:
自定義 如何自定義協議
何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...
自定義控制項 自定義鐘錶
private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...
自定義控制項及自定義屬性
自定義控制項在android開發中的重要性,是不言而喻,眾人皆知的。希望通過這二天的學習,能讓大家了解自定義控制項的原理,熟悉自定義控制項的使用步驟,並能寫出一些普通的效果。內容介紹 1 使用系統控制項,實現自定義的效果,案例有 優酷環形選單 廣告條 viewpager 下拉列表 spinner 2...