在開啓其他應用程式之前,我們必須要先知道該應用程式的 URL Scheme,先前文章已經寫過許多開啓內建應用程式的方法,之所以能夠成功呼叫這些應用程式,其原因就在於我們已經事先知道呼叫它們時所需要的 Scheme,像是使用 http: 可以呼叫 Sanari,或是使用 sms: 可以呼叫內建簡訊的應用程式等,而下列示範將演示如何替一個應用程式設定它專屬的 Scheme,以及如何使用其他應用程式來呼叫它。
首先是替一個應用程式加上專屬的 Scheme,好讓他可以被其他應用程式所呼叫,找到該應用程式的 Info.plist 檔案,並替它增加一個 URL types 屬性,並將其內預設的 URL Identifier 屬性修改為 URL Scheme,並於 URL Scheme 屬性中填入該應用程式專屬的 Scheme 值,如下圖(該應用程式的專屬 Scheme 為 FurnaceDEMO)。
在做好此項設定後,只要此應用程式存在於裝置內,就可以透過這個 URL Scheme 被其他應用程式開啓,開啓的方式如下程式碼(一個應用程式也可以使用多個不同的 Scheme 名稱)。
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"FurnaceDEMO:"]];
使用此方法來開啓其他應用程式,也可以同時帶入其他的相關資訊,像是在開啓 Sanari 應用程式範例一文中,除了呼叫內建的 Sanari 瀏覽器外,同時也帶入了要開啓的網址,如果要實做此方法,我們必須回到被開啓的應用程式的 AppDelegate.m 中,替它新增一個內建函式,此函式會在開啓時被執行,並且以 NSURL 型態接收另一個應用程式所傳來的資訊,函式如下。
//在被呼叫開啓時所執行的內建函式
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return YES;
}
透過上述函式,我們可以透過分析 NSURL 來得到所需的資訊,分析 NSURL 的方法可以參考NSURL 的網址解析 Parse一文。
下列是本範例中的所使用到的關鍵程式碼。
開啓其他應用程式的部份
-(IBAction) open {
//判斷裝置中是否有 Scheme 為 FurnaceDEMO 的應用程式
if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"FurnaceDEMO:"]]) {
//開啓目標應用程式並以 NSURL 的方式帶入資訊
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"FurnaceDEMO://Show.Me.More.DEMO"]];
}
}
被開啓的應用程式所做的 NSURL 處理
//在被呼叫開啓時所執行的內建函式
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
//顯示分析NSURL的結果
self.viewController.myLabel.text = [NSString stringWithFormat:@"%@",[url host]];
return YES;
}
ps:回傳值為 NO 則會詢問是否要開啟此應用程式。
沒有留言:
張貼留言