平常我們會去呼叫其它的App來達到我們的目的,如想要開啟網頁就會叫出Safari App,是怎麼做到的呢?就是使用URL Scheme,格式:
schemename://
schemename可以是以下幾個例子:
| http, https, ftp | : Web links ((launches the Safari app) |
| mailto | : E-mail links (launches the Mail app) |
| tel | : Telephone Numbers (launches the Phone app) |
| sms | : Text Messages (launches the SMS app) |
—
那如果我們想要讓他人能夠開啟我們的App,又該如何做到呢?就來客製化 URL Scheme (Custom URL Scheme)吧!
首先在專案A中的Info.plist做設定:
記得要在欄位中用選擇的方式(自己打無效⋯⋯)挑出URL types,然後也是用選擇的方式建立URL Schemes,接著將我們想要的名稱打上去,例如GarbageGuard。
最後在專案A的AppDelegate.m實作內建方法:
// 在被呼叫開啓時所執行的內建函式
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
// 顯示分析NSURL的結果
NSLog(@"url: %@", [NSString stringWithFormat:@"%@", [url description]]);
return YES;
}
如此就能在其它App呼叫它時,來處理其被傳入的訊息囉~我們編譯執行先擺著⋯⋯
接下來由專案B寫以下程式碼:
if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"GarbageGuard://"]]) {
// 開啓目標應用程式並以 NSURL 的方式帶入資訊
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"GarbageGuard://Be.Happy.All.The.Time"]];
}
編譯執行後,專案A的Debug平台就會出現:
url: GarbageGuard://Be.Happy.All.The.Time
而畫面也從專案B App轉往到專案A App,是不是很神奇呢:)?
參考:

Comments on: "[iOS] 客製化 URL Scheme (Custom URL Scheme)" (2)
非常感謝大大的分享,之前有個case剛好處理到類似的需求。
也是查找了許多文章呢。
這裡附帶一提,貌似這樣的跳轉,並沒有"返回"一說。
所以如果你由A專案跳往B專案,那麼你如果需要返回,也只能用相同的方法從B專案跳往A專案。
也就是兩個專案都必須設定好了schemename
唯有系統權限的程式(如打電話: 或是照相機)
可以在你的專案並沒有設定schemename的狀態下返回你的程式。
如果我理解有誤,望請指教。
讚Liked by 1 person
目前看來也只能像你說的那樣設定來返回,像我在Chrome開地圖,就會詢問我是否要開啟Google Map,確定進入Google Map,上方就會出現返回Chrome的提示元件,我想這就是彼此設定好往返機制,因為這兩個App都是Google開發的囉~
至於我們將自製App轉向內建App,內建App會出現「返回」我倒是沒遇過,像是轉往App Store或Safari都沒出現「返回」。不知你有試過什麼App會出現?
讚讚