你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS中應用URL Scheme停止App跳轉的教程

iOS中應用URL Scheme停止App跳轉的教程

編輯:IOS開發綜合

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

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503479.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

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503591.png (639×1136)

便可翻開APP,看看參數能否傳遞過去:

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503589.png (639×1136)

最初我們看一下打印:

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來翻開我們的運用。怎樣處理呢?

我們可以指定響應的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;
    }

}

如許我們便可以經由過程Bundle ID來決議能否許可翻開我們的APP。

【iOS中應用URL Scheme停止App跳轉的教程】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved