iOS Schemes的使用

我們都知道,iOS系統(tǒng)為了數(shù)據(jù)的安全性,對每個應(yīng)用存儲的數(shù)據(jù)進行安全處理,即沙盒存儲機制。使得應(yīng)用的存儲空間是彼此分離的。這樣就保證了數(shù)據(jù)的安全性。但是應(yīng)用之前彼此分離也阻礙了相互的通信。因此蘋果給出了應(yīng)用之間傳遞信息的方法URL Schemes。像我們平時所看到的分享、支付等都是通過URL Schemes的方式進行應(yīng)用間的跳轉(zhuǎn)傳遞信息的。

1.使用URL Scheme跳轉(zhuǎn)到其他應(yīng)用

如果我們想要跳轉(zhuǎn)到別的應(yīng)用,首先你要知道其他App的Scheme是什么?以下是一些常見的應(yīng)用的Scheme

QQ mqq://
微信是 weixin://
網(wǎng)易新聞 newsapp://
淘寶 taobao://
點評 dianping://
微博 sinaweibo://
支付寶 alipay://
豆瓣fm: doubanradio://
微盤 sinavdisk://
網(wǎng)易公開課 ntesopen://
美團 imeituan://
人人 renren://
我查查 wcc://
1號店 wccbyihaodian://
有道詞典 yddictproapp://
知乎 zhihu://
優(yōu)酷 youku://
ZAKER zakeripad://
mdict mdict://
京東hd openApp.jdiPad://
易迅 icson://;yixunipad://
wunderlist wunderlist://
支付寶 alipay://

比如我們想要跳轉(zhuǎn)去微信,首先我們把微信的schemes加入到應(yīng)用的白名單。在當前app的info.plist文件中增加LSApplicationQueriesSchemes字段為Array,然后把需要跳轉(zhuǎn)的應(yīng)用加入。如下圖


然后在觸發(fā)事件加入下面的代碼

   let string = "weixin://data=xxx"
        //data=xxx為傳遞參數(shù)
        let url = URL.init(string: string)
        if UIApplication.shared.canOpenURL(url!) {
            let dict = [:] as [String:Any]
            //iOS10 之后 open方法增加了 參數(shù)options可以傳遞一個字典 攜帶一些信息給被跳轉(zhuǎn)的app處理, 還有一個閉包,來傳遞是否跳轉(zhuǎn)成功?
            if #available(iOS 10.0, *) {
                UIApplication.shared.open(url!, options: dict, completionHandler: { (res) in
                    print("跳轉(zhuǎn)是否成功?\(res)")
                })
            } else {
                // Fallback on earlier versions
                UIApplication.shared.openURL(url!)
            }
        }

schemes可以傳遞信息,這里的weixin://之后的內(nèi)容 data=XXX就是傳遞的參數(shù)。iOS10 之后 open方法增加了 參數(shù)options可以傳遞一個字典 攜帶一些信息給被跳轉(zhuǎn)的app處理, 還有一個閉包,來傳遞是否跳轉(zhuǎn)成功?
這里注意一下要對url scheme 進行encoding 編碼,否則漢字 空格 會崩潰

2.創(chuàng)建Schemes讓其他app來跳轉(zhuǎn)到我們的app

(1.)在App內(nèi)的info->URL Ttpes->增加一個URL Schemes如下圖

(2.)處理其他app跳轉(zhuǎn)過來的攜帶的信息
在Appdelegate里面添加下面方法

   //此方法從iOS9開始啟用
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        print(url,options)

        return true
    }
    //此方法iOS9之后被廢棄
    func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
        return true
    }
     //此方法iOS9之后被廢棄  url 為scheme url sourceApplication 為跳轉(zhuǎn)過來app的bundle id
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        return true
    }

以上三個方法實現(xiàn)一個即可,可依據(jù)自己兼容的最低iOS版本而定。

3.系統(tǒng)的一些Schemes
     系統(tǒng)內(nèi)置
     telprompt:10010  tel:10010
     //撥打電話
     facetime://user@example.com
     //facetime 通話
     facetime-audio://user@example.com
     // facetime 語音
     sms:86-130-9999-9999&body=你好
     //body 為信息內(nèi)容 可省略 body
     mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!
     //第一個為發(fā)送給誰 參數(shù)cc為抄送給誰 subject 為郵件的主題 body為內(nèi)容 后面的參數(shù)都可以省略
     itms-apps:itms-apps://itunes.apple.com/cn/app/idXXXXXX?mt=8&action=write-review
     //跳轉(zhuǎn)appstore去評價 注意把id后面的XXXXX換成自己應(yīng)用的號碼。
 //直接跳轉(zhuǎn)到系統(tǒng)對應(yīng)的設(shè)置頁面,但是試驗發(fā)現(xiàn)iOS10 可以執(zhí)行,iOS11無效
     電池電量 App-Prefs:root=BATTERY_USAGE
     通用設(shè)置 App-Prefs:root=General
     存儲空間 App-Prefs:root=General&path=STORAGE_ICLOUD_USAGE/DEVICE_STORAGE
     蜂窩數(shù)據(jù) App-Prefs:root=MOBILE_DATA_SETTINGS_ID
     Wi-Fi 設(shè)置 App-Prefs:root=WIFI
     藍牙設(shè)置 App-Prefs:root=Bluetooth
     定位設(shè)置 App-Prefs:root=Privacy&path=LOCATION
     輔助功能 App-Prefs:root=General&path=ACCESSIBILITY
     關(guān)于手機 App-Prefs:root=General&path=About
     鍵盤設(shè)置 App-Prefs:root=General&path=Keyboard
     顯示設(shè)置 App-Prefs:root=DISPLAY
     聲音設(shè)置 App-Prefs:root=Sounds
     App Store 設(shè)置 App-Prefs:root=STORE
     墻紙設(shè)置 App-Prefs:root=Wallpaper

Demo戳這里

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容