iOS 呼叫另乙個程式

2021-07-04 08:28:01 字數 1556 閱讀 4446

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

參考資料

呼叫另乙個Activity

1 建立主activity 注意通過權重來分配尺寸的方式 元件1 android layout width 0dp android layout weight 1 元件2 android layout width wrap content 2 在主類中指定onclick所對應的sendmessage...

iOS 如何在乙個應用程式中呼叫另乙個應用程式

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

乙個Ejb呼叫另乙個Ejb

乙個ejb呼叫另乙個ejb有兩種方法 第一是同個jndi 查詢 initialcontext ctx new initialcontext ihelloword helloworld ihelloword ctx.lookup helloworld remote 第二種 通過依賴注入 1 ejb i...