国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS中使用URL Scheme進行App跳轉的教程

2020-02-19 15:47:54
字體:
來源:轉載
供稿:網友

我們都知道手機的應用程序有一個沙盒,而應用程序就像是信息島,它們都不能互相交流,今天就跟著武林技術頻道小編的步伐來學習一下iOS中使用URL Scheme進行App跳轉的教程吧!

URL Scheme的作用

我們都知道蘋果手機中的APP都有一個沙盒,APP就是一個信息孤島,相互是不可以進行通信的。但是iOS的APP可以注冊自己的URL Scheme,URL Scheme是為方便app之間互相調用而設計的。我們可以通過系統的OpenURL來打開該app,并可以傳遞一些參數。

例如:你在Safari里輸入www.alipay.com,就可以直接打開你的支付寶app,前提是你的手機裝了支付寶。如果你沒有裝支付寶,應該顯示的是支付寶下載界面,點擊會跳到AppStore的支付寶下載界面。

URL Scheme必須能唯一標識一個APP,如果你設置的URL Scheme與別的APP的URL Scheme沖突時,你的APP不一定會被啟動起來。因為當你的APP在安裝的時候,系統里面已經注冊了你的URL Scheme。

一般情況下,是會調用先安裝的app。但是iOS的系統app的URL Scheme肯定是最高的。所以我們定義URL Scheme的時候,盡量避開系統app已經定義過的URL Scheme。

注冊URL Scheme

1.在info.plist里添加URL types

每一個項目里面都會有一個info.plist配置文件。找到info.plist,右鍵選擇Add Row,然后選擇URL types。如圖所示:

201642991122273.jpg (744×498)

2.添加URL Schemes

添加完URL types,點擊展開。右鍵選擇Add Row,添加URL Schemes:
201642991159813.jpg (413×237)
3.設置URL Schemes

設置URL Schemes為iOSDevTip

201642991223806.jpg (434×176)

4.設置URL Identifier

URL Identifier是自定義的 URL scheme 的名字,一般采用反轉域名的方法保證該名字的唯一性,比如 com.iOSStrongDemo.www

201642991241207.jpg (475×139)

添加成功啟動提示

為了方便測試,我們在AppDelegate里面添加一個UIAlertView,當app被成功打開時,會提出提示:

?

?

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url
{
??? // 接受傳過來的參數
??? NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
??? UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開啦"
?????????????????????????????????????????? message:text
????????????????????????????????????????? delegate:nil
???????????????????????????????? cancelButtonTitle:@"OK"
???????????????????????????????? otherButtonTitles:nil];
??? [alertView show];
??? return YES;
}

?

Safari啟動自定義的URL Schemes APP

既然已經配置好URL Schemes,那么我們可以來款速測試一下,我們設置的URL Schemes是否有效。打開Safari,在地址欄里輸入:iOSDevTip://

201642991258304.png (639×1136)

果然成功打開:

201642991318064.png (639×1136)

也可以在地址欄中輸入:iOSDevTip://com.iOSStrongDemo.www。也是可以打開注冊了URL Schemes的APP的。

通過另一個APP啟動注冊了URL Schemes的APP

?

?NSString *url = @"iOSDevTip://";
//??? NSString *url = @"iOSDevTip://com.iOSStrongDemo.www";
if ([[UIApplication sharedApplication]
???? canOpenURL:[NSURL URLWithString:url]])
{
??? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
else
{
??? NSLog(@"can not open URL scheme iOSDevTip");
}


打開注冊iOSDevTip的APP格式為: URL Scheme://URL identifier,直接調用URL Scheme也可打開程序, URL identifier是可選的。

?

通過注冊的URL Scheme向目標APP傳遞參數

通過URL Scheme啟動APP很簡單就可以做到,但有時候我們想在啟動APP的時候傳遞一些參數,這個時候我們就可以通過URL Scheme自定義URL來傳遞參數了。

昨天我們在AppDelegate調用了UIApplicationDelegate的代理方法:

?

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url
{
??? // 接受傳過來的參數
??? NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
??? UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開啦"
?????????????????????????????????????????? message:text
????????????????????????????????????????? delegate:nil
???????????????????????????????? cancelButtonTitle:@"OK"
???????????????????????????????? otherButtonTitles:nil];
??? [alertView show];
??? return YES;
}


我們來看看蘋果給這個方法的注釋:

?

?

?


- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;? // Will be deprecated at some point, please replace with application:openURL:sourceApplication:annotation:


這個方法在未來將被廢棄,可以用application:openURL:sourceApplication:annotation:來代替。

?

URL傳參格式

昨天我們在iOSStrongDemo注冊的URL Scheme還記得是什么嗎?你應該還有印象的就是iOS開發的ID:iOSDevTip。

假設我們想要傳遞兩個參數分別是名字name和手機號phone,格式如下:

iOSDevTip://?name=ligang&phone=13888888888

有沒有似曾相識的感覺。我們用get方式請求一個接口是不是就是這樣的。

被啟動的APP處理傳過來的參數

?

- (BOOL)application:(UIApplication *)application
??????? openURL:(NSURL *)url
? sourceApplication:(NSString *)sourceApplication
???????? annotation:(id)annotation
{
??? NSLog(@"sourceApplication: %@", sourceApplication);
??? NSLog(@"URL scheme:%@", [url scheme]);
??? NSLog(@"URL query: %@", [url query]);

?

??? // 接受傳過來的參數
??? UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開啦"
??????????????????????????????????????????????????????? message:[url query]
?????????????????????????????????????????????????????? delegate:nil
????????????????????????????????????????????? cancelButtonTitle:@"OK"
????????????????????????????????????????????? otherButtonTitles:nil];
??? [alertView show];

??? return YES;
}


當APP被啟動是,會調用代理方法application:openURL:sourceApplication:annotation:。參數URL就是啟動APP的URL,參數sourceApplication就是來源APP的Bundle ID。

?

我們依然通過Safari來測試,在Safari的地址欄中輸入:iOSDevTip://?name=ligang&phone=13888888888

201642991335677.png (639×1136)

即可打開APP,看看參數是否傳遞過來:

201642991500763.png (639×1136)

最后我們看一下打印:

2015-07-15 22:38:25.655 iOSStrongDemo[9983:2894855] sourceApplication: com.apple.mobilesafari2015-07-15 22:38:28.664 iOSStrongDemo[9983:2894855] URL scheme:iosdevtip2015-07-15 22:38:28.665 iOSStrongDemo[9983:2894855] URL query: name=ligang&phone=13888888888

sourceApplication打印出來是com.apple.mobilesafari,從這里可以看出來,是從Safari啟動我們的APP的。

我們雖然自定義了URL Scheme,但是我們不能阻止別人通過自定義的URL Scheme來打開我們的應用。怎么解決呢?

我們可以指定相應的sourceApplication,也就是相應的Bundle ID,通過Bundle ID來決定是否可以打開我們的APP:

?

- (BOOL)application:(UIApplication *)application
??????? openURL:(NSURL *)url
? sourceApplication:(NSString *)sourceApplication
???????? annotation:(id)annotation
{
??? NSLog(@"sourceApplication: %@", sourceApplication);
??? NSLog(@"URL scheme:%@", [url scheme]);
??? NSLog(@"URL query: %@", [url query]);

?

??? if ([sourceApplication isEqualToString:@"com.3Sixty.CallCustomURL"]){
??????? // 接受傳過來的參數
??????? UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開啦"
??????????????????????????????????????????????????????????? message:[url query]
?????????????????????????????????????????????????????????? delegate:nil
????????????????????????????????????????????????? cancelButtonTitle:@"OK"
????????????????????????????????????????????????? otherButtonTitles:nil];
??????? [alertView show];

??????? return YES;
??? }else{
??????? return NO;
??? }

}


以上就是武林技術頻道小編給大家述說的iOS中使用URL Scheme進行App跳轉的教程,如果有筒靴們對這行業有興趣的話,可以收藏武林技術頻道網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 确山县| 内丘县| 县级市| 临夏市| 伊宁市| 阿巴嘎旗| 岚皋县| 城口县| 西城区| 十堰市| 文化| 兴山县| 浏阳市| 西和县| 南部县| 古交市| 漾濞| 盐山县| 浪卡子县| 合江县| 太仆寺旗| 陇川县| 拜泉县| 镇雄县| 通化县| 南木林县| 桐梓县| 扎赉特旗| 奉节县| 兴仁县| 庄浪县| 清新县| 双流县| 邵阳市| 崇左市| 乐陵市| 青神县| 手机| 东台市| 镇安县| 铜山县|