亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

URL Scheme的作用

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

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

URL Scheme必須能唯一標(biāo)識一個APP,如果你設(shè)置的URL Scheme與別的APP的URL Scheme沖突時,你的APP不一定會被啟動起來。因為當(dāng)你的APP在安裝的時候,系統(tǒng)里面已經(jīng)注冊了你的URL Scheme。

一般情況下,是會調(diào)用先安裝的app。但是iOS的系統(tǒng)app的URL Scheme肯定是最高的。所以我們定義URL Scheme的時候,盡量避開系統(tǒng)app已經(jīng)定義過的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.設(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)

添加成功啟動提示

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

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

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url
{
    // 接受傳過來的參數(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啟動自定義的URL Schemes APP

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

201642991258304.png (639×1136)

果然成功打開:

201642991318064.png (639×1136)

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

通過另一個APP啟動注冊了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");
}

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

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

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

昨天我們在AppDelegate調(diào)用了UIApplicationDelegate的代理方法:

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

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

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

- (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還記得是什么嗎?你應(yīng)該還有印象的就是iOS開發(fā)的ID:iOSDevTip。

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

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

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

被啟動的APP處理傳過來的參數(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]);

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

    return YES;
}


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

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

201642991335677.png (639×1136)

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

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打印出來是com.apple.mobilesafari,從這里可以看出來,是從Safari啟動我們的APP的。

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

我們可以指定相應(yīng)的sourceApplication,也就是相應(yīng)的Bundle ID,通過Bundle ID來決定是否可以打開我們的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"]){
        // 接受傳過來的參數(shù)
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開啦"
                                                            message:[url query]
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
        [alertView show];

        return YES;
    }else{
        return NO;
    }

}


這樣我們就可以通過Bundle ID來決定是否允許打開我們的APP。

相關(guān)文章

  • iOS 獲取設(shè)備唯一標(biāo)示符的方法詳解

    iOS 獲取設(shè)備唯一標(biāo)示符的方法詳解

    本篇文章主要介紹了iOS 獲取設(shè)備唯一標(biāo)示符的方法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 簡單講解iOS應(yīng)用開發(fā)中的MD5加密的相關(guān)使用

    簡單講解iOS應(yīng)用開發(fā)中的MD5加密的相關(guān)使用

    這篇文章主要介紹了iOS應(yīng)用開發(fā)中的MD5加密的相關(guān)使用,示例代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2015-12-12
  • iOS中狀態(tài)欄的基本使用方法匯總

    iOS中狀態(tài)欄的基本使用方法匯總

    在iOS開發(fā)過程中,經(jīng)常會設(shè)置狀態(tài)欄的樣式,所以下面這篇文章主要給大家介紹了關(guān)于iOS中狀態(tài)欄的基本使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • iOS開發(fā)教程之常見的性能優(yōu)化技巧

    iOS開發(fā)教程之常見的性能優(yōu)化技巧

    這篇文章主要給大家介紹了關(guān)于iOS開發(fā)教程之常見的性能優(yōu)化技巧,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用iOS具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • iOS實現(xiàn)手動和自動屏幕旋轉(zhuǎn)

    iOS實現(xiàn)手動和自動屏幕旋轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)手動和自動屏幕旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • iOS中使用NSURLConnection處理HTTP同步與異步請求

    iOS中使用NSURLConnection處理HTTP同步與異步請求

    NSURLConnection的作用現(xiàn)在已經(jīng)基本被NSURLSession所取代,所以我們簡單了解下iOS中使用NSURLConnection處理HTTP同步與異步請求的方法即可:
    2016-07-07
  • iOS-Mac遠(yuǎn)程連接控制Window

    iOS-Mac遠(yuǎn)程連接控制Window

    這篇文章主要為大家詳細(xì)介紹了iOS-Mac遠(yuǎn)程連接控制Window,蘋果電腦遠(yuǎn)程連接控制Windows電腦,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • iOS實現(xiàn)爆炸的粒子效果示例代碼

    iOS實現(xiàn)爆炸的粒子效果示例代碼

    之前在網(wǎng)上看到了一個Android實現(xiàn)的爆炸效果,感覺非常不錯,所以自己嘗試用iOS來實現(xiàn)下效果,現(xiàn)在將實現(xiàn)的過程、原理以及遇到的問題分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10
  • iOS如何為導(dǎo)航欄添加播放動畫

    iOS如何為導(dǎo)航欄添加播放動畫

    這篇文章主要為大家詳細(xì)介紹了iOS如何為導(dǎo)航欄添加播放動畫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • iOS橫豎屏旋轉(zhuǎn)內(nèi)容總結(jié)

    iOS橫豎屏旋轉(zhuǎn)內(nèi)容總結(jié)

    本篇文章給大家總結(jié)了iOS橫豎屏旋轉(zhuǎn)的相關(guān)內(nèi)容以及實現(xiàn)的代碼分享,有需要的朋友參考下吧。
    2018-01-01

最新評論