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

來源:互聯網
上載者:User

標籤:

通過註冊的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

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

最後我們看一下列印:

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

這樣我們就可以通過Bundle ID來決定是否允許開啟我們的APP,demo:iOSStrongDemo

 

本文出處剛剛線上:http://www.superqq.com/blog/2015/07/15/tong-guo-url-schemechuan-di-can-shu/

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.