iOS 應用之間跳轉傳輸數據以及跳回源程序

歡迎你們關注個人公衆號,我會按期分享一些我在項目中遇到問題的解決辦法和一些iOS實用的技巧,現階段主要是整理出一些基礎的知識記錄下來
git

文章也會同步更新到個人博客:
ppsheep.comgithub

以前寫了一篇關於APP之間跳轉的文章,期間有同窗說可否出一個相似於微信登陸或者支付寶支付之類的,跳轉到支付寶得到消息再調回源程序,而且帶上信息。今天咱們就再來聊聊,實現這樣一種效果,沒看過以前應用跳轉的,請移步:
ppsheep.com/2016/10/27/…數組

以前咱們說到APP之間的跳轉,其實就是經過一個URL Schemes進行跳轉,APP之間的傳值,其實也是經過這個URL進行傳值。微信

再有咱們想跳回原來程序,那麼咱們還須要知道源程序的URL Schemes,這樣咱們才能跳回到源程序,因此在傳遞參數的時候 咱們還須要把源程序的URL Schemes傳遞過去。app

咱們須要傳遞的參數:ui

  • 當前APP的 URL Schemes
  • 咱們須要傳遞的實際參數

還有一個重要的事情,由於咱們須要從APP2跳回APP1,因此咱們還須要設置APP1的URL Schemes,怎麼設置,我這裏就不寫出來了,具體能夠看上一篇跳轉解析url

咱們以前知道 打開另外一個APP,是打開一個URL
APP2://相似於這種,那咱們會想到通常咱們http有一種方式攜帶參數 http://url?name=?&age=?spa

咱們APP之間的傳遞參數方式其實也是這樣的方式code

//獲取APP2的URL Scheme 還須要帶上當前App的APP1
    NSString *URLScheme = @"APP2://APP1";

    //咱們參數須要穿name age
    NSString *params = @"name=yq&age=23";
    //接下來加上咱們須要攜帶的參數
    NSString *realURL = [NSString stringWithFormat:@"%@?%@",URLScheme,params];

    NSURL *appURL = [NSURL URLWithString:realURL];

    //判斷手機中是否安裝了APP2
    if ([[UIApplication sharedApplication] canOpenURL:appURL]) {
        //打開APP2ViewController2
        [[UIApplication sharedApplication] openURL:appURL];
    }else{
        NSLog(@"沒有安裝APP2");
    }複製代碼

咱們最終的appURL 是: component

APP2://APP1?name=yq&age=23複製代碼

咱們在APP2中處理這個跳轉的URL

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
     if ([url.absoluteString containsString:@"APP1"]){
        NSLog(@"%@",url);

        //拿到源程序的
        NSString * urlschemes = [[url.absoluteString componentsSeparatedByString:@"//"][1] componentsSeparatedByString:@"?"][0];

        //拿到參數
        NSRange range = [url.absoluteString rangeOfString:@"?"];
        NSString *paramStr = [url.absoluteString substringFromIndex:range.location+1];//去除問號
        NSArray *params = [paramStr componentsSeparatedByString:@"&"];
        NSLog(@"%@",params);

        //跳回源程序
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            // 延時3s模擬處理後回調指定的 URL Schemes並傳遞結果

            if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"APP2://"]]) {

                NSLog(@"跳轉成功");

                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://back?name=back&code=200",urlschemes]]];

            }else{
                NSLog(@"跳轉失敗");
                NSLog(@"未安裝應用!");
            }
        });
    }

 }複製代碼

在APP2中 咱們拿到了APP1傳遞的參數 放在了params數組中,一樣的 咱們在APP1中再處理從APP2跳回來的信息

/**
 跳轉回來
 */
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary
  
  
  

 
  
  *)options{ if ([url.absoluteString containsString:@"back"]) { //拿到參數 NSRange range = [url.absoluteString rangeOfString:@"?"]; NSString *paramStr = [url.absoluteString substringFromIndex:range.location+1];//去除問號 NSArray *params = [paramStr componentsSeparatedByString:@"&"]; NSLog(@"%@",params); } return YES; } 

 複製代碼

這樣咱們也拿到了APP2跳回來的數據

在iOS10中跳轉的API有更新,具體的變化能夠看API 我這裏就不列出來了

源代碼放在:

github.com/yangqian111…

github.com/yangqian111…

相關文章
相關標籤/搜索