iOS URL Scheme

來源:互聯網
上載者:User

標籤:

目的:通過URL Scheme啟動APP,並且在啟動APP的時候傳遞參數。

一、通過URL Scheme啟動APP

1.先註冊URL Scheme,在info.plist裡添加URL Scheme,選擇add row添加URL types

2.添加完URL types,點擊展開,添加URL Schemes

3.設定URL Schemes為xxxx

4.設定URL Identifier,URL Identifier是自訂的 URL scheme 的名字,一般採用反轉網域名稱的方法保證該名字的唯一性,比如 com.yyyy.www

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

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

    // 接受傳過來的參數

    NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"開啟啦"

                                                        message:text

                                                       delegate:nil

                                              cancelButtonTitle:@"OK"

                                              otherButtonTitles:nil];

    [alertView show];

    return YES;

}

5.safari啟動自訂的URL Schemes APP

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

也可以在地址欄中輸入:xxxx://com.yyyy.www。也是可以開啟註冊了URL Schemes的APP的。

 

二、通過URL Scheme啟動APP並且傳遞參數

1.URL傳參格式

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

2.被啟動的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的地址欄中輸入:xxxx://?name=aaa&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;

    }

}

 

三、如何通過一個app啟動註冊了URL Schemes的另一個app呢?

NSString *url = @"xxxx://";

//    NSString *url = @"xxxx://com.yyyy.www";

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:url]])

{

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

}

else

{

     NSLog(@"can not open URL scheme xxxx");

}

開啟註冊xxxx的APP格式為: URL Scheme://URL identifier,直接調用URL Scheme也可開啟程式, URL identifier是可選的。

 

iOS URL Scheme

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.