iOS App 自定義 URL Scheme 設計

2021-06-21 15:58:07 字數 1728 閱讀 1318

在 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 程式中新增自定義協議的支援了。

參考資料

— eof —

論壇原帖:

iOS App 自定義 URL Scheme 設計

在 ios 裡,程式之間都是相互隔離,目前並沒有乙個有效的方式來做程式間通訊,幸好 ios 程式可以很方便的註冊自己的 url scheme,這樣就可以通過開啟特定 url 的方式來傳遞引數給另外乙個程式。例如在 ipad 上瀏覽網頁,並且 ipad 已經安裝了 hd,那麼就開啟下面這個鏈結就會在 ...

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如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...