分享SDK解析

SDK的技術

最近公司開始新項目,我的工作就是完成社交分享這一部分功能。原本我是去各個開發者平臺下載SDK然后查看Demo然后開始寫功能的,可是老大要求不要用SDK,因為SDK有些時候太大了不太適合。于是我就硬著頭皮去研究...好在已經有人這么干過了而且也寫出了一個框架-----OpenShare??墒俏覀兊捻椖渴怯胹wift寫的而OpenShare是用oc寫的,雖然說swift和oc混寫是沒有關系的但是感覺還是不舒服于是就開始仔細看了OpenShare并且自己寫了一些Demo,終于還是有點收獲的。下面就進入正題。

其實要實現像SDK提供一樣的功能有主要的兩點需要解決:

  1. app之間的轉跳
  2. app之間的數據傳輸

下面就對這兩點分開解釋:

app之間轉跳


相信很多人都知道怎么在應用中打開網頁鏈接,就是用UIApplication.shareApplication().openURL(url)。其實在應用之間打開也是使用URL的,只是每個應用的url不同。比如QQ的url是"mqqapi://" , 微信的url是"weixin://" 等,那么這些url是怎么定義的呢?答案是這些url是定義在項目的info.plist中的URL type 中 URL Scheme 的如圖定義了readtext為url

infoplist.png

這樣別的應用可以用readtext://的url來轉跳到這個應用當然在URL Scheme下面可以有很多個URL 當然iOS也提供了UIApplication.sharedApplication().canOpenURL(url)來測試是否可以打開一個url,也就是說可以用這個來測試是否安裝了某個應用。

既然是url那么就一定可以帶參數的比如"mqqapi://share/to_fri?thirdAppDisplayName=Demo"而QQ等這些應用也正是這樣解析傳進來的url,當使用url打開一個app的時候在appDelegate中的application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)的參數option中可以拿到需要的url,因為option是一個字典。這樣就可以解析url知道需要做什么事情。

app之間數據傳輸


在上一部分的url打開app的技術中當然可以通過在url后面寫入參數然后在app中解析來達到數據的傳輸,但是url中的數據傳輸也是很小量的數據可以這么做,比如申請到得appid等

那么想要實現大一點的數據傳輸怎么辦呢?大家在使用iPhone的時候是否有注意到你在一個應用里面所復制的東西可以在另一個應用里面黏貼出來。這就是答案,SDK就是應用了黏貼板實現了app間的數據傳輸。我們可以將圖片等數據寫入黏貼板然后再另一個app內通過對黏貼板的讀取對圖片進行分享。

當然在iOS中黏貼板類UIPasteboard向開發者提供了相關的讀寫的接口其中UIPasteboard.generalPasteboard().setData(data, forPasteboardType: key)方法是向黏貼板中寫入data并且以key作為標志,這樣就可以防止各個應用之間的數據的錯誤問題。所以在SDK中是有已經約定好的key。

以上就是我的一些小小的分享,希望大家多多的提意見!寫的不好。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容