網頁

2012年7月11日 星期三

實現Custom URL Schemes

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考來源:Implementing Custom URL Schemes
說明:
URL Schemes,通常運用在從自己的app,透過NSURL溝通其他app時,的一個機制。
<URL Schemes的介紹請參考:ios URL Scheme Reference>

Registering Custom URL Schemes


在這邊就不多做說明,先來說明設定方式,如圖:

到TARGETS->info中新增一個Add URL TYPE
並在其中添加相關資訊,如圖:
在圖中需要注意的只有:identifier、URL Schemes、Role
其它如icon...等,其實不怎麼重要,唯一可能就是若你的app提供多個第三方app跳轉,那除了文字之外,直接可以用圖片去選擇,你要開啓的外部app。
最重要的就是你的URL Schemes,這就是其他app呼叫你的app時,必須提供的辨識名稱,若你的app不需被呼叫,或者呼叫後,不須由其他app返回,基本上就不需要設定。



Handling URL Requests


設定好相關資訊後,重點就是處理返回的URL Requests。
可以根據下列方法去實現:


其中application:didFinishLaunchingWithOptions:是負責判斷該app是否被呼叫,若return YES,則application:openURL:sourceApplication:annotation:或者application:handleOpenURL:就會被執行,然後開始處理傳遞過來的URL,如圖6-2。<至於如何傳遞可參考:app溝通其他外部程式(一)>






若你的app正在運行,只是在後台暫停運行,當你的url到達時,系統就會直接調用application:openURL:sourceApplication:annotation:,若你的系統沒有實現該方法,則會調用application:handleOpenURL:,故這兩個方法可以同時存在,系統會自動判斷目前的ios版本是否4.2之後或者4.1之前。如圖6-3:


Note: Apps that support custom URL schemes can specify different launch images to be displayed when launching the app to handle a URL. For more information about how to specify these launch images, see “Providing Launch Images for Custom URL Schemes.”
若要使用URL Scheme圖片,就請參考Note


所有的資訊均會透過url去傳遞到其他的app,你可以參考<NSURL根據RFC 1808下的解析方式>,去制定你的url。
關於程式的參考,可以參考本文開頭,官方所寫文件,其中有範例,或者參考<app溝通其他外部程式(一)>




注意:一定要驗證你的url,不管是傳進還是傳出,驗證的方式很多種,包含加密,可以參考apple  “Validating Input And Interprocess Communication” inSecure Coding Guide 去處理你的url,以避免問題發生。
關於NSURL Scheme reference請參考:ios URL Scheme Reference




As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

沒有留言:

張貼留言