iosAPP之間的跳轉

來源:互聯網
上載者:User

標籤:

做各大平台分享的時候由於帳號混亂,導致分享回調的時候啟動了另一個app,這個時候我在猜想這些SDK是怎麼喚醒沒有啟動的其他app的,不難想象,肯定跟AppDelegate處理回調openUrl有關,於是搜了一下才發現,一個應用程式可以喚醒另一個應用程式,只怪我菜,好啦,現在告訴不知道的朋友怎麼來實現一個app怎麼喚醒另一個app,以及讓兩個app之間互相通訊。。。


測試工程操作如下
1.建立一個app1,在Info.plist檔案的資訊屬性列表裡建立一組,類型是URL types    設定如下
這裡最關鍵的部分在於URL Schemes數組裡的Item 0,後面的填寫的字串就是你用來通訊的命令首碼“achao”,URL identifier只是一個標示符,隨意填寫然後再AppDelegate裡處理重載下面的回調方法

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

{

    if ([[url scheme] isEqualToString:@"achao"])

    {

        NSLog(@"%@",url);

    }

    return YES;

}

可以看見[url scheme]這個命令是為了拿到url的scheme,就是命令首碼“achao” 2.建立app2,這個app什麼都不用操作,只需要去喚醒app1即可,於是我們在viewDidLoad裡寫上這一句

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"achao://hello"]];

"achao"就是app1裡的url scheme,我叫它命令首碼(我懷疑apple的應用程式裝上過後有個像通知中樞一樣的應用程式來統一管理,而每個應用程式的url scheme都會在那裡被記錄,以供其他app來調用該app,至於url scheme屬於哪個應用程式,當然是和app的Bundle identifier相關的),格式採用“首碼://..." 3.我們關閉app1,app2,然後再啟動app2,發現app2啟動過後喚醒了app1,並且成功跳轉;我們再關閉app1,app2,然後我們開啟app1進行監測,發現app1被啟動後,進入了



這就實現了兩個app之間的喚醒和通訊 4.當然這時候你可能才想到,那不是很多應用程式都會被其他垃圾程式調用了,尋找資料過後,原來還有後續我們重載這個方法

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

{

    if ([sourceApplication isEqualToString:@"AC.achao.com"])

    {

        NSLog(@"%@", sourceApplication);    //來源於哪個app(Bundle identifier)

        NSLog(@"scheme:%@", [url scheme]);  //url scheme

        NSLog(@"query: %@", [url query]);   //查詢串  用“?...”格式訪問

        return YES;

    }

    else 

        return NO;

 

}

這就滿足我們的需求了,我們可以通過sourceApplication來判斷來自哪個app以決定要不要喚醒自己的app,也可以通過[url query]來獲得查詢串,這個時候我們需要更改app2的訪問方式才能獲得這個參數

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"achao://hello?name=achao-AC"]];

我們也可以直接在safari離輸入"achao://hello?name=achao-AC"來訪問我們的app1,這個時候sourceApplication就是@"com.apple.mobilesafari"

 總結:類似下面的方法

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"]];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://158********"]];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://158********"]];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://362****@qq.com"]];

我們用過很多,估計也是程式內部設定了類似的url scheme來供其他應用程式操作的

 

也許我理解的有錯誤,歡迎大家一起交流分享,不甚感激!

iosAPP之間的跳轉

聯繫我們

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