網頁

顯示具有 URL Scheme 標籤的文章。 顯示所有文章
顯示具有 URL Scheme 標籤的文章。 顯示所有文章

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.
有任何問題,請聯絡我

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

NSURL根據RFC 1808下的解析方式

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考資料:RFC 1808 文件、How to Parse an NSURL Object
說明:
ios在URL的使用下,除了可以利用URL Scheme的方式,呼叫外部app,或者開啟iTunes等應用<相關文章:ios URL Scheme Reference、app溝通其他外部程式(一)>,還可以依照RFC 1808的規則,去解析URL的成分。

<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

根據規則,可以解析URL的成分,如下:
 
NSURL *url = [NSURL URLWithString:
 @"http://some-site.com:999/dir1/dir2;param?field-1=value-1&field-2=value-2#anchor1"];
 
NSLog(@"Scheme: %@", [url scheme]); 
NSLog(@"Host: %@", [url host]); 
NSLog(@"Port: %@", [url port]);     
NSLog(@"Path: %@", [url path]);     
NSLog(@"Relative path: %@", [url relativePath]);
NSLog(@"Path components as array: %@", [url pathComponents]);        
NSLog(@"Parameter string: %@", [url parameterString]);   
NSLog(@"Query: %@", [url query]);       
NSLog(@"Fragment: %@", [url fragment]);

The output is shown below:






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

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

app溝通其他外部程式(一)

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考來源:Communicating with Other Apps


說明:
透過NSURL和UIApplicetion的功能,可以呼叫外部的應用程式。
其中todolist為URL Scheme,是讓應用程式間,彼此知道對方代號的名稱


Note: If more than one third-party app registers to handle the same URL scheme, there is currently no process for determining which app will be given that scheme.
這是Guide中特別標示的一段,表示若多個app均用相同的URL scheme,則目前無法判斷。
有趣的是,國外網站有做一個搜尋目前已經使用過的scheme,目的就是為了盡量避免使用相同的scheme,並且幫助他們建立數據庫:Zwapp


關於URL scheme的介紹,可參考:ios URL Scheme Reference


//使用下方的語法,就可以透過你的app去呼叫外部的應用程式,但前提是必須取得外部應用程式的URL Scheme,才可以呼叫得到。 
NSURL *myURL = [NSURL URLWithString:@"todolist:"];
//『todolist』就是外部app的URL Scheme
[[UIApplication sharedApplication] openURL:myURL];

至於如何呼叫外部app後,做一些事情後,再返回原本的app?


若要帶一些參數呢??

<解析回傳的URL使用方式請參考:NSURL根據RFC 1808下的解析方式>


若想要返回dic的資料呢??


ios提供給我們一個很好的方法,就請參考下一篇文章:app溝通其他外部程式(二)


ps:
要注意的有:從外部app返回後,是返回最後app關到背景的頁面,無法指定跳到任意頁面。
除非動一點小手腳,這邊可以參考UIApplicationDelegate Protocol Reference有興趣的,可以參考,這邊就不多做討論。

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

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

2012年7月10日 星期二

ios URL Scheme Reference

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考文檔:Apple URL Scheme Reference.


說明:
首先我們在app應該常見到很多功能像是:直接從app中開啓信箱、撥打電話、寄送sms、開啓地圖、開啓youtube、開啓itunes...等等功能,其實都是透過URL scheme去操作。
例如,如果你的IOS應用程序顯示的電話號碼,只要點擊該號碼,app就可以直接撥打電話。同樣,點擊iTunes的鏈接,啟動iTunes應用程序和播放鏈接指定的歌曲。


如果你想從你的IOS應用程序,或從在Safari上運行的頁面,啟動一個系統的應用,你可以閱讀此文件。文件包含使用openURL:UIApplication對象共享的方法,以打開的URL和HTML範例。
欲了解更多信息:就要參考openURL:的使用方法,還有UIApplication Class Reference。


其中apple也提供了許多的方法,去讓你的app呼叫其他的內建application。請參考:

這邊可以查到是否你的URL Scheme是否有跟別人重復:Zwapp
基本上寫入自己的bundle identifier就不會重復到。

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

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