1. 程式人生 > >【轉】從一個App跳轉到另一APP

【轉】從一個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 ([[UIApplicationsharedApplicationcanOpenURL:url]) {

//3 開啟應用程式

      [[UIApplicationsharedApplicationopenURL:url];

    }else{

//調轉到網頁版這兒以百度為例

        [[UIApplicationsharedApplicationopenURL:[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!