1. 程式人生 > >iOS開發-應用之間的跳轉及通訊

iOS開發-應用之間的跳轉及通訊

Update

2016-08-12: 在Github的Demo上增加Mac自定義Url Scheme,可以在Safari上輸入特定協議頭開啟應用,並傳遞引數)

簡介

我們接下來將要實現應用程式之間的跳轉及通訊。現在手機開發中,很多時候我們都需要在應用內跳轉到別的應用中,這個是很常見的。

為此,我們首先需要準備兩個專案ApplicationOneApplicationTwo。(下載專案原始碼)

應用間的簡單跳轉

ApplicationOne應用跳轉到ApplicationTwo應用

我們需要先建立在ApplicationTwo專案裡設定URL Types協議,這裡我設定為GC,如下所示

ApplicationOne

應用新增事件

@IBAction func openApplication() {
    // 1
    let urlSting = "GC://"
    // 2
    if let url = NSURL(string: urlSting) {
        // 3
        let application = UIApplication.sharedApplication()
        // 4
        if application.canOpenURL(url) {
        // 5
            application.openURL(url)
        }
    }
}
  • 1: 建立urlString字串
  • 2: 利用urlString字串建立真正的url,並檢測url是否有用
  • 3: 獲得UIApplication例項
  • 4: 檢測是否能夠開啟此url
  • 5: 開啟url,在這裡即為我們的應用跳轉

需要注意的是,協議開頭必須要是完整的,即為****://

應用間的傳值跳轉

實現方式很簡單,我們只需要在url協議裡補充引數就可以了,比如我現在傳一個字串GarveyCalvin

現在事件的程式碼是這樣的

@IBAction func openApplication() {
    let urlSting = "GC://GarveyCalvin"
    if let url = NSURL(string: urlSting) {
        let application = UIApplication.sharedApplication()
        if application.canOpenURL(url) {
            application.openURL(url)
        }
    }
}

你可以在協議後補充n個引數,只需要雙方都能解析得到就行,具體的協議規則自行商議

然後在ApplicationTwo應用的AppDelegate檔案,我們需要實現如下方法去接收其它應用傳進來的引數

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
let newUrlHost: NSString = url.absoluteString ?? ""
let range = newUrlHost.rangeOfString("//")
    
if range.length != NSNotFound {
    let params = newUrlHost.substringFromIndex(range.length)
    UIAlertView(title: "params is \(params)", message: nil, delegate: nil, cancelButtonTitle: "Confirm").show()
} else {
    UIAlertView(title: "haven't params", message: nil, delegate: nil, cancelButtonTitle: "Confirm").show()
}
    
return false
}

應用間的反向跳轉

我們要實現的是,從ApplicationOne跳轉到ApplicationTwo應用,再從ApplicationTwo跳轉回ApplicationOne應用裡。

具體的實現步驟如下:

  • 我們需要在ApplicationOne專案中新增URL Types協議,具體看文章的上方,我們剛剛才做過。
  • 為了實現應用間的反轉跳轉,我們必須讓ApplicationTwo應用知道是從哪裡跳轉的,因此我們可以在ApplicationOneurl跳轉事件把自身的URL Types協議傳遞給ApplicationTwo應用。像這樣GC://GarveyCalvin&GCFirst
  • 這樣我們就能在ApplicationTwo應用的application(_:openURL: sourceApplication:annotation:)方法中獲取到ApplicationOne的協議,我們儲存它,等到需要反向跳轉的時候就可以使用它來進行跳轉了。

適配iOS9

有一位git友提醒了我,在iOS9下執行報以下錯誤(issue):

-canOpenURL: failed for URL: "GC://GarveyCalvin&GCFirst" - error: "This app is not allowed to query for scheme GC"

這是因為在iOS9中,蘋果做了嚴格的限制,我們想要調起這個url,必須要手動新增白名單,這樣蘋果才會"放行"。我們需要在info.plist裡新增

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>GC</string>
</array>

LSApplicationQueriesSchemes是一個數組,用於存放url白名單

Download

參考文章

博文作者:GarveyCalvin

博文出處:http://www.cnblogs.com/GarveyCalvin/

本文版權歸作者和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作!

相關推薦

iOS開發應用之間通訊

Update 2016-08-12: 在Github的Demo上增加Mac自定義Url Scheme,可以在Safari上輸入特定協議頭開啟應用,並傳遞引數) 簡介 我們接下來將要實現應用程式之間的跳轉及通訊。現在手機開發中,很多時候我們都需要在應用內跳轉到別的應用中,這個是很常見的。 為此,我們首先需要準備

iOS開發應用到QQ聊天介面和指定的聯絡人聊天

這裡主要是記錄專案中的一個需求,閒著沒事就把它記錄下來,以供有需要的朋友們; 我們一般用webview載入,所以主要的是設定在它的跳轉路徑上; 這裡有兩個路徑,介紹分別如下; 1. mqq://im/chat?chat_type=wpa&uin=好友QQ號&

IOS應用應用之間URL

蜂窩網路:prefs:root=MOBILE_DATA_SETTINGS_ID網路:      prefs:root=General&path=Network/***Wi-Fi:    prefs:root=WIFI定位服務:prefs:root=LOCATION_SERVICES個人熱點:prefs

kotlin activity 之間傳參

gradle中實現 implementation "org.jetbrains.anko:anko-commons:0.10.3 startActivity(this!!.intentFor<UploadActivity>() .putExtra("",""

iOS開發app間相互以及appStore和系統設定

1.app間相互跳轉 (1)兩個專案,這裡我們暫且說專案A和專案B。 (2)專案A跳轉到專案B。 步驟1:開啟專案B工程 找到info 目錄下的URL Types,點選+號進行新增,然後設定URL schemes。 (3)將專案B的URL schemes 記錄下來,以便在專

iOS 多個tabBar之間的問題

最近在忙一款應用,裡面有多個tabBar,因為以前只接觸過單個tabBar的程式,沒遇見過這樣的需求,所以說也是各種查資料,各種試驗,今天終於弄出來了,可能我的方法有點初級,但是我還是想發出來和大家分享一下。不多說,上程式碼~ 首先,因為存在tabBar,所以他們之間的點選

spring mvc controller接收請求值controller之間傳值

1,使用HttpServletRequest獲取 Java程式碼   @RequestMapping("/login.do")   public String login(HttpServletRequest request){       String name

iOS開發使用Storyboard進行介面傳值

前言:蘋果官方是推薦我們將所有的UI都使用Storyboard去搭建,Storyboard也是一個很成熟的工具了。使用Storyboard去搭建所有介面,我們可以很迅捷地搭建出複雜的介面,也就是說能為我們節省大量的時間。我們還可以很直觀地看出各個介面之間的關係,修改起來也很方便。將來如果遇到需要作修改的地

iOS開發應用間相互

gpo 用戶隱私 spa container 下載 containe canopen itunes cep 1. 應用間相互跳轉簡介 在iOS開發的過程中,我們經常會遇到需要從一個應用程序A跳轉到另一個應用程序B的場景。這就需要我們掌握iOS應用程序之間的相互跳轉知識。

iOS開發-兩個APP之間、傳值

兩個APP之間的跳轉是通過[[UIApplication sharedApplication] openURL:url]這種方式來實現的。 1.首先設定第一個APP的url地址 2.接著設定第二個APP的url地址 3.需要跳轉的時候 NSString

iOS 連個應用之間

iPhone / iOS SDK 最酷的特性之一就是應用將其自身”繫結”到一個自定義 URL scheme 上,該 scheme 用於從瀏覽器或其他應用中啟動本應用。 註冊自定義 URL Scheme 註冊自定義 URL Scheme 的第一步是建立 URL Scheme — 在 Xcode Pro

ios開發-APP之間

原文地址:http://blog.csdn.net/grozy_sun/article/details/11321081 設想:如果App1能再自己中開啟App2,那麼App1開啟自己是不是就能開啟自己了呢。後來就簡單的去實現了一下,結果失敗了,有同樣想法的就放棄吧,但

.Net語言 APP開發平臺——Smobiler學習日誌:在手機應用開發中如何實現地圖

demo hand 操作 窗體 clas com ps1 ati void 一、目標樣式 我們要實現上圖中的效果,需要如下的操作: 二、跳轉地圖代碼 VB: Private Sub Button1_Click(sender As Object, e As Ev

iOS 應用到系統設置

photo pod style software lin vol ios5 per man 在iOS5下面版本號使用下面方法:【IOS5.1+之後不能使用此方法,iOS8的跳轉方法已找到見下方,iOS7的正在摸索。歡迎大家給出觀點意見】 通過URL Scheme的方

iOS應用百度高德蘋果地圖

bool 知識點 coo count value oid bsp lse rec 移動開發經常用到基於位置的一些導航功能,但是對於對導航功能依賴性不強的的應用,我們直接采用應用外跳轉地圖APP即可。 但是應用間跳轉,首先需要設置白名單, 在iOS 9 下涉及到平臺客戶端跳

iOS開發-Cordova配置-Cordova互動-Cordova外掛開發iOS專案接入Cordova-Cordova外部網頁

本期內容: Cordova 詳細配置 Cordova 接入iOS專案 Cordova 訪問外部網頁 Cordova iOS互動外掛開發 Cordova簡介 Cordova是一個開源的移動開發框架,它允許你使用WEB開發技術(HTML5、CSS3、JavaS

Android開發之Activity的建立傳值

在Android系統的江湖中有四大元件:活動(Activity), 服務(Service), 廣播接收器(Broadcast Reciver)和內容提供者(Content Provider)。今天所介紹的就是Android開發中的四大元件之一:Activity,其他那三大元件

Activity詳解 Intent顯式和隱式, 多個Activity之間傳值 總結

//web瀏覽器 Uri uri= Uri.parse("http://www.baidu.com:8080/image/a.jpg"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(

iOS 10 應用到系統設定

http://www.jianshu.com/p/5b7571d7bb34 設定跳轉有三種方式,每一種的使用場景都不同。 並且你在寫Demo測試跳轉到系統中自己應用下面設定的時候,你的應用要提前至少申請了某一個許可權,如(通知,定位等)。否則,會引起崩潰。 方式一:pr

IOS應用到系統設定

iOS應用內跳轉到系統設定 設定跳轉有三種方式,每一種的使用場景都不同。 並且你跳轉到系統中自己應用下面設定的時候,你的應用要提前至少申請了某一個許可權,如(通訊錄,通知,定位等)。否則,會引起崩潰。