iOS Swift 第三方套件 - OAuthSwift
在 iOS 開發介接第三方 API 相關的應用程式時,我們時常會需要遵循 OAuth 開放標準規範,這過程十分繁雜,不過幸虧有大神寫出輕便使用的套件了,而且相容 OAuth 1.0、OAuth 2.0,那便是 OAuthSwift,注意哦!這邊是使用「Swift」語言,如果您是使用「Objective-C」開發 iOS 應用程式的話,你可能要採用另一位大神寫的 OAuth2Client 了。
以下範例我們以 OAuthSwift 作為範例。
首先我們必須在 iOS 應用程式的專案當中,引入 OAuthSwift 套件,引入的方式有兩種:
這裡我們使用 CocoaPods 做完教學使用,另外如果對於 CocoaPods
有興趣的話,教學可見 => CocoaPods iOS 第三方套件管理工具
引入 CocoaPods 之後,我們接下來以介接「Plurk API 2.0」做完介接範例,我們必須先到 Plurk 註冊一個第三方手機或桌面應用程式的應用服務。
=> 請到這裡註冊 Plurk 應用服務
註冊完畢以後,我們可以多多善用 Plurk API & OAuth test console for Developers 噗浪 API 測試工具。
=> Plurk API & OAuth test console for Developers
首先這邊介紹四種很重要的 "Key(金鑰)"
- App key => 用於驗證介接 API 端口的合法性,你可以理解為你「應用程式的帳號」
- App secret => App key 的密鑰,你可以理解為你「應用程式的密碼」
- Token => 令牌、通行證之類的,當然也有人解釋成紀念幣,不過你更應該把它理解為「使用者的令牌」
- Token secret => Token 的密鑰,你可以理解為「使用者的密碼」
我們來試著獲取這四種很重要的金鑰吧!
#### 1. 當你註冊完一款應用程式服務時,Plurk 會配發你一組 App key、App secret。 #### ↓ ↓ ↓ #### 2. 把這兩個輸入到測試工具當中相對應的欄位。 #### ↓ ↓ ↓ #### 3. 然後點選「Get Request Token」按鈕,這步驟是獲取「未授權」的 Token、Token secret。 #### ↓ ↓ ↓ #### 4. 再來點選「Open Authorization URL」按鈕,這步驟是開啟授權網址。 #### ↓ ↓ ↓ #### 5. 網頁會跳換至 Plurk 授權網頁,這裡是在詢問使用者是否以他的社群軟體身份,授權我們應用程式相關權限。 #### ↓ ↓ ↓ #### 6. 獲得授權時,Plruk Authorization URL 會賦予一個授權碼,這要先記下來。 #### ↓ ↓ ↓ #### 7. 最後點選「Get Access Token」按鈕,並輸入剛剛獲得的授權碼。 #### ↓ ↓ ↓ #### 8. 授權完畢以後,剛剛獲取的 Token、Token secret 就「已授權」了。
接下來你可以試著去獲取 Plurk API 相關的應用,我們先以「/APP/Users/me」為例子,直接按下「Invoke API」按鈕,就可以獲得自己的資料(JSON格式)。
既然現在我們已經了解 OAuth 的運作概念了,那我們差不多該進入主題囉!該如何使用 OAuthSwift 呢?首先我們要思考到,我們會先請求使用者到 Plruk 網頁去認證,當使用者認證完畢後,網頁可能會做些什麼動作之類的,然後跳回我們的應用程式,那我們要開始思考,如何讓網頁能夠「呼叫應用程式」呢?
很直覺的,我們必須在我們的應用程式當中,設定一個「URL Schemes」網址呼叫方案,這可以讓瀏覽器呼叫某特別網址時,應用程式看到就知道說,這意思是在叫應用程式而不是網頁。
設定完畢後,我們就要開始來撰寫程式邏輯了,在 Swift 當中,我們要先參考 OAuthSwift
1 | import OAuthSwift |
再來使用者可能點個登入 Plurk 按鈕,就可以開啟瀏覽器登入 Plurk,並且授權我們的應用程式,這時候我們就要撰寫一個 function,執行這些事情:
1 | _OAuthSwift.authorize( |
獲得使用者授權之後,我們接下來可以試著使用 OAuthSwift 囉!以下為基本規範:
1 | let _ = _OAuthSwift.client.get( |
那我們來點範例吧,我想要抓取使用者的資訊,也就是剛剛的「/APP/Users/me」的功能,那麼我們必須這樣寫:
1 | let _ = _OAuthSwift.client.get( |
運行後,就可以在 Log 日誌當中看到使用者資料以 Json 格式的方式來回應囉!