SDK的技術(shù)
最近公司開始新項目首量,我的工作就是完成社交分享這一部分功能梁丘。原本我是去各個開發(fā)者平臺下載SDK然后查看Demo然后開始寫功能的择浊,可是老大要求不要用SDK赡模,因為SDK有些時候太大了不太適合。于是我就硬著頭皮去研究...好在已經(jīng)有人這么干過了而且也寫出了一個框架-----OpenShare查吊。可是我們的項目是用swift寫的而OpenShare是用oc寫的湖蜕,雖然說swift和oc混寫是沒有關(guān)系的但是感覺還是不舒服于是就開始仔細看了OpenShare并且自己寫了一些Demo逻卖,終于還是有點收獲的。下面就進入正題昭抒。
其實要實現(xiàn)像SDK提供一樣的功能有主要的兩點需要解決:
- app之間的轉(zhuǎn)跳
- app之間的數(shù)據(jù)傳輸
下面就對這兩點分開解釋:
app之間轉(zhuǎn)跳
相信很多人都知道怎么在應(yīng)用中打開網(wǎng)頁鏈接评也,就是用UIApplication.shareApplication().openURL(url)
。其實在應(yīng)用之間打開也是使用URL的灭返,只是每個應(yīng)用的url不同盗迟。比如QQ的url是"mqqapi://" , 微信的url是"weixin://" 等,那么這些url是怎么定義的呢熙含?答案是這些url是定義在項目的info.plist中的URL type 中 URL Scheme 的如圖定義了readtext為url
這樣別的應(yīng)用可以用readtext://的url來轉(zhuǎn)跳到這個應(yīng)用當(dāng)然在URL Scheme下面可以有很多個URL 當(dāng)然iOS也提供了UIApplication.sharedApplication().canOpenURL(url)
來測試是否可以打開一個url罚缕,也就是說可以用這個來測試是否安裝了某個應(yīng)用。
既然是url那么就一定可以帶參數(shù)的比如"mqqapi://share/to_fri?thirdAppDisplayName=Demo"而QQ等這些應(yīng)用也正是這樣解析傳進來的url怎静,當(dāng)使用url打開一個app的時候在appDelegate中的application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)
的參數(shù)option中可以拿到需要的url邮弹,因為option是一個字典。這樣就可以解析url知道需要做什么事情蚓聘。
app之間數(shù)據(jù)傳輸
在上一部分的url打開app的技術(shù)中當(dāng)然可以通過在url后面寫入?yún)?shù)然后在app中解析來達到數(shù)據(jù)的傳輸腌乡,但是url中的數(shù)據(jù)傳輸也是很小量的數(shù)據(jù)可以這么做,比如申請到得appid等
那么想要實現(xiàn)大一點的數(shù)據(jù)傳輸怎么辦呢夜牡?大家在使用iPhone的時候是否有注意到你在一個應(yīng)用里面所復(fù)制的東西可以在另一個應(yīng)用里面黏貼出來与纽。這就是答案,SDK就是應(yīng)用了黏貼板實現(xiàn)了app間的數(shù)據(jù)傳輸塘装。我們可以將圖片等數(shù)據(jù)寫入黏貼板然后再另一個app內(nèi)通過對黏貼板的讀取對圖片進行分享急迂。
當(dāng)然在iOS中黏貼板類UIPasteboard向開發(fā)者提供了相關(guān)的讀寫的接口其中UIPasteboard.generalPasteboard().setData(data, forPasteboardType: key)
方法是向黏貼板中寫入data并且以key作為標(biāo)志,這樣就可以防止各個應(yīng)用之間的數(shù)據(jù)的錯誤問題蹦肴。所以在SDK中是有已經(jīng)約定好的key袋毙。
以上就是我的一些小小的分享,希望大家多多的提意見冗尤!寫的不好听盖。