導語
大家都知道,應用間無法直接通訊,所以即使是同公司的應用也無法直接在裝置端直接通訊和共享資料。
但是通過URLSchemes可以調起其它應用,他的官方格式為”識別符號://”,這個識別符號就是你給應用定義的URLSchemes,在”//”後面,可以通過類似於http連結的引數傳遞方式來在應用間傳遞少量資料進行互動,話不多說,擼程式碼。
1.建立兩個應用並互相呼叫
1.1 首先建立應用bradley和johnson,bradley是我們的被呼叫應用,johnson則是我們的主動呼叫應用。
1.2 在bradley應用中找到TARGETS-Info-URL Types,新增一項,將其URL Schemes填寫為bradley,同理也在johnson應用中找到TARGETS-Info-URL Types,新增一項,將其URL Schemes填寫為johnson。
1.3 在bradley的AppDelegate.m中新增如下方法及語句:
1.4 在johnson的主介面我們新增一個按鈕,並執行跳轉程式碼,但是為了嚴謹(參照微信支付),我們必須判斷當前裝置是否安裝目標App,所以我們需要在info.plist檔案中新增URL Schemes白名單:
只需將綠色框框內的資訊加入即可。
跳轉程式碼如下:
1.5 執行除錯,我們先執行bradley應用,再執行johnson應用,在johnson應用中點選按鈕調起bradley應用,檢視log資訊:
很明顯我們成功的在johnson中調起了bradley應用,並列印出了日誌,可以看到我們通過開啟一個”bradley://”的url即可調起bradley應用。
那麼我們可以在safari中調起bradley麼?
答案是可以的:
所以在某種程度上,我們並不能阻止別人開啟我們的應用,只能儘量避免自己應用URL Schemes的洩露,並在回撥方法中做出一些判斷取捨。
2.應用間的資訊傳遞
2.1 大家都上過網,都知道上網需要網址,如:
https://ww.baidu.com?ceo=liyanhong&yewu=kengqian
在這裡,”https://” 就類似於我們的識別符號”bradley://”,我們通過在”//”後面加鍵值對來傳遞我們的引數,以達到應用間資訊傳遞的目的。
下面我們來嘗試傳遞一下幾個引數:
可見我們成功的將引數傳遞了過來,通過一些簡單字串處理我們就能組裝成完整的引數字典。那麼問題又來了,這個引數字串能夠經受的最大長度是多少呢?
起碼1K的length是經得起的:
而且即使到1W也是OK的,所以大家可以放心使用。
3.應用間的資訊傳遞處理完成後並跳轉回來
3.1 資訊傳遞是為了處理,處理完成後總有個結果,並需要把結果回傳回來,這就是支付寶和微信支付的處理邏輯。
如何回撥回來呢?
答:被調起的應用並不知道調起它的應用的URL Schemes,所以我們需要把自身應用的URL Schemes也傳遞過去,由被調起應用處理完成,重新調回來並將處理結果作為引數回傳回來。
如下: