iOS 使用URLtype實現程序之間的跳轉

一、實現目標

        

 

就是點擊上面藍色背景的APP(去哪兒)的按鈕然後跳轉到白色背景APP(支付寶)裏面。

二、具體實現

2.1 因爲是去哪兒跳轉到支付寶,支付寶需要進行scheme的設置,所以我們在支付寶工程設置裏面進行scheme的配置

在info的界面下,我們打開URL Type的標籤,我們在這裏面配置scheme。這裏解釋一下什麼是scheme,其實scheme就相當於網頁URL中的http協議,我在這裏寫的scheme就作爲我們這兩個APP交流的協議。另一個APP如果想跳轉到這個APP 的某個界面,就需要遵守這個協議,這個我們稍後會在另一個APP中實現如何實現遵守這個協議。回到這個頁面下,有兩個參數需要我們進行設置:  identifier,URL Scheme。前者隨便寫什麼都可以,後者也是隨便寫什麼都可以,但是最好和當前APP有關,並且儘量短一些。設置好之後,運行一下,確保設置成功配置上。

2.2 現在支付寶的協議已經定義好了,現在我們需要在去哪兒APP中實現點擊按鈕跳轉到支付寶APP中。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
- (IBAction)jump:(id)sender {
    //1、使用openURL跳轉
      //2、創建一個nsurl對象
    NSURL * url = [NSURL URLWithString:@"ZFB123://QNE123"];//定義了一個協議
    [[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey:@YES} completionHandler:nil];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


@end

我們在去哪兒APP中實現了點擊按鈕跳轉的方法:

       1. 首先我們創建了一個NSURL對象,這個對象是使用了其類方法創建的,對於此類方法的參數,我們來考察一下

        @“ZFB123://QNE123”,"ZFB123"就是我們之前給支付寶定義的scheme,"://"表明這個符號前面的是協議,就是scheme, 

        而後面的"QNE123"是爲了實現當從去哪兒跳轉到支付寶還能從支付寶跳轉回來傳遞給支付寶的參數,這個參數根據我們前

       面的經驗,就應該是去哪兒的scheme.這樣纔可以實現從支付寶又可以跳回去哪兒。

       2. 然後我們調用了一個方法: [[UIApplication sharedApplication] openURL: options: completionHandler:];

       首先[UIApplication sharedApplication]可以當前這個APP對象,然後openURL就寫我們之前創建的那個URL對象。

然後編譯運行一下。這樣就可以了

2.3 當去哪兒跳轉過來之後支付寶如何知道

我們來到支付寶的AppDelegate.m文件中,這裏都是一些代理方法,然後我們重新寫一個代理方法:

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    //外部的程序跳轉過來,就會觸發這個方法
    NSLog(@"%@",url);
    //@"http://www.baidu.com?wd=pxd"];
    //url.scheme獲取url的協議
    //url.host獲取主機名
    //url.relativePath 路徑
    //url.query 獲取參數(就是查詢字符串)
    NSString * qnrScheme = url.host;
    NSURL * url2  = [NSURL URLWithString:[NSString stringWithFormat:@"%@://",qnrScheme]];
    [[UIApplication sharedApplication]openURL:url2 options:nil completionHandler:nil];
    return YES;
}

當外部程序跳轉過來就會觸發這個方法(鉤子函數),我們可以將這個url打印出來看一下

 

沒錯就是我們在去哪兒中寫的URL字符串,在這裏我們可以用URL的屬性將URL各個不同的部分提取出來,scheme就是協議就是 :// 的部分,host 就是其後面的域名部分,relativePath就是相對路徑,query就是我們從去哪兒傳遞給支付寶的參數,就像查詢字符串一樣,但是不同軟件的它的相關調用格式是不相同的,這個就要具體參考不同APP的文檔了。

三、遇到的問題

我在實際操作的時候出現了點擊按鈕沒有反應的情況,然後看到模擬器中只有一個APP去哪兒,這樣就說明沒有反應的原因,因爲沒有支付寶這個APP其scheme就是空的,因爲這個APP根本就沒有在模擬器中安裝。這個時候我們需要進行以下修改

         在這個工程頁面中修改Bundle Identifier的值,隨意修改,只要修改和支付寶的相應值不相同即可,然後重新編譯運行一下發現模擬器中有這兩個APP就可以了。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章