iosAPP之間的跳轉

作各大平臺分享的時候因爲帳號混亂,致使分享回調的時候啓動了另外一個app,這個時候我在猜測這些SDK是怎麼喚醒沒有啓動的其餘app的,不難想象,確定跟AppDelegate處理回調openUrl有關,因而搜了一下才發現,一個應用程序能夠喚醒另外一個應用程序,只怪我菜,好啦,如今告訴不知道的朋友怎麼來實現一個app怎麼喚醒另外一個app,以及讓兩個app之間互相通訊。。。html


測試工程操做以下

1.新建一個app1,在Info.plist文件的信息屬性列表裏新建一組,類型是URL types    設置以下
IOS <wbr>喚醒另外一個APP(app之間互相通訊)
這裏最關鍵的部分在於URL Schemes數組裏的Item 0,後面的填寫的字符串就是你用來通訊的命令前綴「achao」,URL identifier只是一個標示符,隨意填寫
而後再AppDelegate裏處理重載下面的回調方法

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

{app

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

    {測試

        NSLog(@"%@",url);url

    }spa

    return YES;htm

}blog

能夠看見[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被啓動後,進入了

IOS <wbr>喚醒另外一個APP(app之間互相通訊)

這就實現了兩個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來供其餘應用程序操做的

 

也許我理解的有錯誤,歡迎你們一塊兒交流分享,不甚感激!
相關文章
相關標籤/搜索