【轉】從一個App跳轉到另一APP
應用場景:
百度地圖等
第三方支付
第三方分享登陸
下面先說幾個概念性東西:
1 URL :統一資源定位符(可以沒有路徑但是必須要有協議頭)
2 scheme: 協議頭,用來決定查詢資源的方式
3 path:路徑
預設情況下應用程式沒有URL,並且在iOS 中開啟一個應用程式只要能拿到這個應用程式協議頭即可
開始實現:
1 新建兩個工程 AppTurnOne 和 AppTurnTwo 並在一中建立一個button 新增點選事件
2 我們做的是從 one 跳到 two 需要在two中設定下scheme 如下圖:(設定URL scheme) weichat qq weibo 都是統一的;
當另一個app需要設定跳轉到本app需要獲取本app的協議頭如截圖一
//本app為 AppTurnTwo 另一個需要跳轉的App需要這個scheme
:3 回到Appone 在點選事件中:
//跳轉到另一個App (不加判斷直接跳轉)
//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"AppTurnTwo://"]];
4 先執行 two 再執行one 讓這兩個程式都安裝到模擬機上 點選button就會跳轉到另一個頁面5 判斷手機中是否安裝了需要跳轉的APP 如果有跳轉 沒有就跳轉到網頁版 或者返回.
/1 獲取對應程式的URL
//NSURL *url= [NSURL URLWithString:@"AppTurnTwo://"];
NSURL *url = [NSURLURLWithString:[NSStringstringWithFormat:@"AppTurnTwo://"]];
//2 判斷手機中是否安裝了對應的應用程式
//1 獲取對應程式的URL
//NSURL *url= [NSURL URLWithString:@"AppTurnTwo://"];
NSURL *url = [NSURLURLWithString:[NSStringstringWithFormat:@"AppTurnTwo://"
//2 判斷手機中是否安裝了對應的應用程式
if ([[UIApplicationsharedApplication] canOpenURL:url]) {
//3 開啟應用程式
[[UIApplicationsharedApplication] openURL:url];
}else{
//調轉到網頁版這兒以百度為例
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"http://www.baidu.com"]];
}
這時執行會報以下錯誤:This app is not allowed to query for scheme AppTurnTwo
這個程式是不允許AppTurnTwo查詢方案
原因:
iOS 9系統策略更新,限制了http協議的訪問,此外應用需要在“Info.plist”中將要使用的URL Schemes列為白名單,才可正常檢查其他應用是否安裝。
受此影響,當你的應用在iOS 9中需要使用微信SDK的相關能力(分享、收藏、支付、登入等)時,需要在“Info.plist”裡配置
配置: LSApplicationQueriesSchemes
再執行就可以跳轉了:
如果你的輸出資訊是-canOpenURL: failed for URL: "kindle://home" - error: "This app is not allowed to query for scheme kindle"
去你的 target 裡面的 Build Settings 下的 Enable Bitcode,把它設定成 NO,這不一定會阻擋你的控制檯繼續輸出這條資訊,但是可以保證你的 App 正常執行
關於其他通過 WebView 訪問 http 網址引發的控制檯報錯資訊 什麼info.plist
這個錯誤是沒有開啟網路
<code class="xml">NSAppTransportSecurity</code>
<code class="xml"></code><pre class="hljs xml" name="code" style="white-space: pre-wrap; word-wrap: break-word; padding: 0.5em; font-size: 14px; line-height: 26px; background: rgb(255, 255, 255);"><code class="xml">NSAllowsArbitraryLoads</code>OK!