iOS App 喚醒另一個App

來源:互聯網
上載者:User

標籤:

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

主要內容
  • URL Scheme 是什嗎?
  • 項目中關鍵的配置
  • 注意事項
URL Scheme 是什嗎?

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

通過對比網頁連結來理解iOS 上的 URL Schemes,應該就容易多了。

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

根據我們上面對URL Schemes的使用,我們可以很輕易地理解,在以本地應用為主的 iOS 上,我們可以像定位一個網頁一樣,用一種特殊的 URL 來定位一個應用甚至應用裡某個具體的功能。而定位這個應用的,就應該這個應用的URL 的 Schemes 部分,也就是開頭兒那部分。比如簡訊,就是 sms:

你可以完全按照理解一個網頁的 URL ——也就是它的網址——的方式來理解一個 iOS 應用的 URL,拿蘋果的網站和 iOS 上的來做個簡單對比:

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

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

項目中關鍵的配置在項目 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所攜帶的參數進行不同的操作。比如跳轉到制定的頁面,相關的邏輯處理等等.

- (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; }

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

喚起端

一般情況下,喚起端可以直接調用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。聽說有些複雜,有空再看看。



文/紙簡書生(簡書作者)
原文連結:http://www.jianshu.com/p/7a308f5b89fc
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。

iOS App 喚醒另一個App

聯繫我們

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