iOS App 喚醒另外一個App

iOS App 喚醒另外一個App

 

網上也有講這塊的,感受講得都不是很好。並且有一些細節根本沒有講清楚。這裏重寫整理一下相關知識點。數組

主要內容

  • URL Scheme 是什麼?
  • 項目中關鍵的配置
  • 注意事項

URL Scheme 是什麼?

iOS有個特性就是應用將其自身」綁定」到一個自定義 URL scheme 上,該 scheme用於從瀏覽器或其餘應用中啓動本應用。常見的分享到第三方之間的跳轉都是基於Scheme的。瀏覽器

經過對比網頁連接來理解iOS 上的 URL Schemes,應該就容易多了。安全

  • URL,咱們都很清楚,http://www.apple.com就是個URL,咱們也叫它連接或網址;
  • Schemes,表示的是一個 URL 中的一個位置——最初始的位置,即 ://以前的那段字符。好比 http://www.apple.com這個網址的Schemes是 http

根據咱們上面對URL Schemes的使用,咱們能夠很輕易地理解,在以本地應用爲主的 iOS 上,咱們能夠像定位一個網頁同樣,用一種特殊的 URL 來定位一個應用甚至應用裏某個具體的功能。而定位這個應用的,就應該這個應用的URL 的 Schemes 部分,也就是開頭兒那部分。好比短信,就是 sms:微信

你能夠徹底按照理解一個網頁的 URL ——也就是它的網址——的方式來理解一個 iOS 應用的 URL,拿蘋果的網站和 iOS 上的微信來作個簡單對比:app

  網頁(蘋果) iOS 應用(微信)
網站首頁/打開應用 http://www.apple.com weixin://
子頁面/具體功能 http://www.apple.com/mac/(Mac頁面) weixin://dl/moments(朋友圈)

關於基礎概念性的就講這麼多ide

項目中關鍵的配置

在項目InfoUrl Type中配置(被喚起端

Url Type,表示能夠被哪些帶前綴Url打開,而不是能夠打開以這些前綴開頭的app。網站

  • 說明
    • URL identifier只是一個標示符,隨意填寫,建議寫成:com.*.*反轉域名的方法保證該名字的惟一性。
    • URL Scheme就是你用來通訊的命令前綴,用來定位一個應用。

Plist文件中配置

  • 注意:URL Schemes 是一個數組,容許應用定義多個 URL schemes。 

    接收到喚起如何處理

在代理方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation中判斷喚起的來源source app,根據Url所攜帶的參數進行不一樣的操做。好比跳轉到制定的頁面,相關的邏輯處理等等.url

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
        sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
  NSLog(@"Calling Application Bundle ID: %@", sourceApplication); 
  NSLog(@"URL scheme:%@", [url scheme]); 
  NSLog(@"URL query: %@", [url query]); 

// Customer Code
  return YES; 
}

以上配置是在被喚起應用中配置的。spa

喚起端

通常狀況下,喚起端能夠直接調用appDelegate的代理方法去喚醒其餘應用。代理

- (void)awakeOtherApp
{ 
  NSString *customURL = @"otherApp://"; 

  if ([[UIApplication sharedApplication] 
    canOpenURL:[NSURL URLWithString:customURL]]) 
  { 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]]; 
  } 
  else 
  { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error" 
                          message:[NSString stringWithFormat: 
                            @"No custom URL defined for %@", customURL] 
                          delegate:self cancelButtonTitle:@"Ok" 
                          otherButtonTitles:nil]; 
    [alert show]; 
  } 
}
  • 這裏須要注意一下在iOS9之後,喚起端須要配置一下

LSApplicationQueriesSchemes.iOS9以後須要,iOS9以後提升了app的安全性,須要給出一個相似白名單的東西,在白名單裏面的才能打開app。否則報錯: -canOpenURL: failed for URL: "OpenAppTest://mark?id=007" - error: "This app is not allowed to query for scheme OpenAppTest"

注意事項

經過上面的方法能夠喚醒其餘的應用,簡單總結下一些注意事項。

  1. URL Scheme 其實就是一個app應用的惟一標誌。經過它來肯定打開那個應用。
  2. 必定要分清哪些配置在哪方配置,被喚醒與喚醒。
  3. iOS9以後須要在喚起端加入LSApplicationQueriesSchemes千萬不能忘。
  4. 還有一個問題還沒解決,如何再次回到喚醒應用的界面。這個須要參考下官方的XCallbackURL。據說有些複雜,有空再看看。
相關文章
相關標籤/搜索