最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS中使用URL Scheme進(jìn)行App跳轉(zhuǎn)的教程

 更新時(shí)間:2016年04月29日 09:17:43   作者:李剛  
這篇文章主要介紹了iOS中使用URL Scheme進(jìn)行App跳轉(zhuǎn)的教程,比如在應(yīng)用內(nèi)提示安裝另一個(gè)應(yīng)用時(shí)就以u(píng)rl打開safari然后打開app store那樣,需要的朋友可以參考下

URL Scheme的作用

我們都知道蘋果手機(jī)中的APP都有一個(gè)沙盒,APP就是一個(gè)信息孤島,相互是不可以進(jìn)行通信的。但是iOS的APP可以注冊(cè)自己的URL Scheme,URL Scheme是為方便app之間互相調(diào)用而設(shè)計(jì)的。我們可以通過(guò)系統(tǒng)的OpenURL來(lái)打開該app,并可以傳遞一些參數(shù)。

例如:你在Safari里輸入www.alipay.com,就可以直接打開你的支付寶app,前提是你的手機(jī)裝了支付寶。如果你沒(méi)有裝支付寶,應(yīng)該顯示的是支付寶下載界面,點(diǎn)擊會(huì)跳到AppStore的支付寶下載界面。

URL Scheme必須能唯一標(biāo)識(shí)一個(gè)APP,如果你設(shè)置的URL Scheme與別的APP的URL Scheme沖突時(shí),你的APP不一定會(huì)被啟動(dòng)起來(lái)。因?yàn)楫?dāng)你的APP在安裝的時(shí)候,系統(tǒng)里面已經(jīng)注冊(cè)了你的URL Scheme。

一般情況下,是會(huì)調(diào)用先安裝的app。但是iOS的系統(tǒng)app的URL Scheme肯定是最高的。所以我們定義URL Scheme的時(shí)候,盡量避開系統(tǒng)app已經(jīng)定義過(guò)的URL Scheme。

注冊(cè)URL Scheme

1.在info.plist里添加URL types

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

201642991122273.jpg (744×498)

2.添加URL Schemes

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

設(shè)置URL Schemes為iOSDevTip

201642991223806.jpg (434×176)

4.設(shè)置URL Identifier

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

201642991241207.jpg (475×139)

添加成功啟動(dòng)提示

為了方便測(cè)試,我們?cè)贏ppDelegate里面添加一個(gè)UIAlertView,當(dāng)app被成功打開時(shí),會(huì)提出提示:

復(fù)制代碼 代碼如下:

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

Safari啟動(dòng)自定義的URL Schemes APP

既然已經(jīng)配置好URL Schemes,那么我們可以來(lái)款速測(cè)試一下,我們?cè)O(shè)置的URL Schemes是否有效。打開Safari,在地址欄里輸入:iOSDevTip://

201642991258304.png (639×1136)

果然成功打開:

201642991318064.png (639×1136)

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

通過(guò)另一個(gè)APP啟動(dòng)注冊(cè)了URL Schemes的APP

復(fù)制代碼 代碼如下:

 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");
}

打開注冊(cè)iOSDevTip的APP格式為: URL Scheme://URL identifier,直接調(diào)用URL Scheme也可打開程序, URL identifier是可選的。

通過(guò)注冊(cè)的URL Scheme向目標(biāo)APP傳遞參數(shù)

通過(guò)URL Scheme啟動(dòng)APP很簡(jiǎn)單就可以做到,但有時(shí)候我們想在啟動(dòng)APP的時(shí)候傳遞一些參數(shù),這個(gè)時(shí)候我們就可以通過(guò)URL Scheme自定義URL來(lái)傳遞參數(shù)了。

昨天我們?cè)贏ppDelegate調(diào)用了UIApplicationDelegate的代理方法:

復(fù)制代碼 代碼如下:

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

我們來(lái)看看蘋果給這個(gè)方法的注釋:
復(fù)制代碼 代碼如下:

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

這個(gè)方法在未來(lái)將被廢棄,可以用application:openURL:sourceApplication:annotation:來(lái)代替。

URL傳參格式

昨天我們?cè)趇OSStrongDemo注冊(cè)的URL Scheme還記得是什么嗎?你應(yīng)該還有印象的就是iOS開發(fā)的ID:iOSDevTip。

假設(shè)我們想要傳遞兩個(gè)參數(shù)分別是名字name和手機(jī)號(hào)phone,格式如下:

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

有沒(méi)有似曾相識(shí)的感覺(jué)。我們用get方式請(qǐng)求一個(gè)接口是不是就是這樣的。

被啟動(dòng)的APP處理傳過(guò)來(lái)的參數(shù)

復(fù)制代碼 代碼如下:

- (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]);

    // 接受傳過(guò)來(lái)的參數(shù)
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開啦"
                                                        message:[url query]
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
    [alertView show];

    return YES;
}


當(dāng)APP被啟動(dòng)是,會(huì)調(diào)用代理方法application:openURL:sourceApplication:annotation:。參數(shù)URL就是啟動(dòng)APP的URL,參數(shù)sourceApplication就是來(lái)源APP的Bundle ID。

我們依然通過(guò)Safari來(lái)測(cè)試,在Safari的地址欄中輸入:iOSDevTip://?name=ligang&phone=13888888888

201642991335677.png (639×1136)

即可打開APP,看看參數(shù)是否傳遞過(guò)來(lái):

201642991500763.png (639×1136)

最后我們看一下打?。?/p>

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

sourceApplication打印出來(lái)是com.apple.mobilesafari,從這里可以看出來(lái),是從Safari啟動(dòng)我們的APP的。

我們雖然自定義了URL Scheme,但是我們不能阻止別人通過(guò)自定義的URL Scheme來(lái)打開我們的應(yīng)用。怎么解決呢?

我們可以指定相應(yīng)的sourceApplication,也就是相應(yīng)的Bundle ID,通過(guò)Bundle ID來(lái)決定是否可以打開我們的APP:

復(fù)制代碼 代碼如下:

- (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"]){
        // 接受傳過(guò)來(lái)的參數(shù)
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開啦"
                                                            message:[url query]
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
        [alertView show];

        return YES;
    }else{
        return NO;
    }

}


這樣我們就可以通過(guò)Bundle ID來(lái)決定是否允許打開我們的APP。

相關(guān)文章

  • 2016最新CocoaPods安裝和錯(cuò)誤解決方案

    2016最新CocoaPods安裝和錯(cuò)誤解決方案

    CocoaPods是一個(gè)負(fù)責(zé)管理iOS項(xiàng)目中第三方開源庫(kù)的工具,開發(fā)iOS項(xiàng)目不可避免地要使用第三方開源庫(kù)。接下來(lái)通過(guò)本文給大家介紹2016最新CocoaPods安裝和錯(cuò)誤解決方案,需要的的朋友參考下吧
    2016-11-11
  • iOS實(shí)現(xiàn)折疊單元格

    iOS實(shí)現(xiàn)折疊單元格

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)折疊單元格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 詳解2016 cocoapods的安裝和使用以及版本升級(jí)遇到的問(wèn)題

    詳解2016 cocoapods的安裝和使用以及版本升級(jí)遇到的問(wèn)題

    CocoaPods是一個(gè)負(fù)責(zé)管理iOS項(xiàng)目中第三方開源庫(kù)的工具。這篇文章主要介紹了2016 cocoapods的安裝和使用以及版本升級(jí)遇到的問(wèn)題,有需要的可以了解一下。
    2016-12-12
  • IOS 算法 三數(shù)之和求解問(wèn)題

    IOS 算法 三數(shù)之和求解問(wèn)題

    這篇文章主要介紹了IOS 算法 三數(shù)之和求解問(wèn)題,屬于IOS 算法中級(jí)等級(jí),感興趣的朋友請(qǐng)閱讀下文
    2021-09-09
  • Swift 2.1 為 UIView 添加點(diǎn)擊事件和點(diǎn)擊效果

    Swift 2.1 為 UIView 添加點(diǎn)擊事件和點(diǎn)擊效果

    本文主要介紹 Swift UIView,這里給大家提供代碼示例作為參考為UIView 添加點(diǎn)擊事件和點(diǎn)擊效果,希望能幫助IOS開發(fā)的同學(xué)
    2016-07-07
  • IOS 指紋識(shí)別兩種方式詳解及實(shí)例

    IOS 指紋識(shí)別兩種方式詳解及實(shí)例

    這篇文章主要介紹了IOS 指紋識(shí)別兩種方式詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • iOS10推送教程詳解

    iOS10推送教程詳解

    這篇文章主要為大家詳細(xì)介紹了iOS10推送開發(fā)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS發(fā)送短信功能的實(shí)現(xiàn)代碼

    iOS發(fā)送短信功能的實(shí)現(xiàn)代碼

    本篇文章主要介紹了iOS發(fā)送短信功能的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Objective-C 自定義漸變色Slider的實(shí)現(xiàn)方法

    Objective-C 自定義漸變色Slider的實(shí)現(xiàn)方法

    系統(tǒng)提供UISlider,但在開發(fā)過(guò)程中經(jīng)常需要自定義,本次需求內(nèi)容是實(shí)現(xiàn)一個(gè)擁有漸變色的滑動(dòng)條,且漸變色隨著手指touch的位置不同改變區(qū)域,這篇文章主要介紹了Objective-C 自定義漸變色Slider,需要的朋友可以參考下
    2024-07-07
  • OC - 9.基于Quartz2D繪制下載進(jìn)度條(demo)

    OC - 9.基于Quartz2D繪制下載進(jìn)度條(demo)

    這篇文章主要介紹了OC - 9.基于Quartz2D繪制下載進(jìn)度條(demo)的相關(guān)資料,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

唐山市| 伊川县| 甘南县| 马山县| 高碑店市| 卫辉市| 新泰市| 余庆县| 大姚县| 克拉玛依市| 乳山市| 卢湾区| 东乡| 文化| 若羌县| 岗巴县| 麻栗坡县| 城固县| 屏东市| 苏尼特右旗| 陈巴尔虎旗| 顺平县| 仁化县| 金溪县| 永和县| 弥渡县| 苍南县| 布尔津县| 林周县| 肥西县| 石柱| 美姑县| 乌拉特前旗| 临沧市| 彭泽县| 旅游| 沂源县| 铜川市| 广丰县| 万山特区| 辉县市|