iOS實現微信第三方登入
一、接入微信第三方登入準備工作。
移動應用微信登入是基於OAuth2.0協議標準構建的微信OAuth2.0授權登入系統。
在進行微信OAuth2.0授權登入接入之前,在微信開放平臺註冊開發者帳號,並擁有一個已稽核通過的移動應用,並獲得相應的AppID和AppSecret,申請微信登入且通過稽核後,可開始接入流程。(注意)
1、下載iOS微信SDK。(自己去微信開放平臺下載,並整合進專案,若之前專案已經整合過微信支付SDK,那麼微信登入已經包括在內了,而且使用的AppID和AppSecret也是同一個。)
2、補充匯入一些依賴框架。
3、新增URL Types
4、新增iOS9 URL Schemes.
注意:如果沒有做這步的話會出現以下錯誤.
1 |
|
5、向微信終端程式註冊第三方應用,並在第三方應用實現從微信返回
在AppDelegate.m中引入"WXApi.h"標頭檔案,然後寫入如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
withDescription:@ "Wechat" ];
|
6、請求CODE
開發者需要配合使用微信開放平臺提供的SDK進行授權登入請求接入。正確接入SDK後並擁有相關授權域(scope,什麼是授權域?)許可權後,開發者移動應用會在終端本地拉起微信應用進行授權登入,微信使用者確認後微信將拉起開發者移動應用,並帶上授權臨時票據(code)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
執行完上面那一步後,如果客戶端安裝了微信,那麼就會向微信請求相應的授權,圖如下:
還有在實際的使用中我們還要結合需求做一些改變。因為微信授權後access_token(2小時)之類的欄位都是有效期的在有效期範圍內,我們是沒必要讓使用者再次授權的,很可能你的實現,會如我下面所寫的(LoginViewController)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
當有access_token和openID時輸出:
1 2 3 4 5 6 7 |
|
重新整理access_token有效期:
access_token是呼叫授權關係介面的呼叫憑證,由於access_token有效期(目前為2個小時)較短,當access_token超時後,可以使用refresh_token進行重新整理,access_token重新整理結果有兩種:
- 1. 若access_token已超時,那麼進行refresh_token會獲取一個新的access_token,新的超時時間;
- 2. 若access_token未超時,那麼進行refresh_token不會改變access_token,但超時時間會重新整理,相當於續期access_token。
refresh_token擁有較長的有效期(30天),當refresh_token失效的後,需要使用者重新授權。
讓AppDelegate遵守<WXApiDelegate>協議,並實現協議方法onResp:
我們在該方法中接收請求回來的資料,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
7、通過code獲取access_token
通過上一步獲取的code後,請求以下連結獲取access_token:
相關程式碼上面實現onResp:方法,接收返回的響應。
引數說明:
引數 是否必須 說明
appid 是 應用唯一標識,在微信開放平臺提交應用稽核通過後獲得
secret 是 應用金鑰AppSecret,在微信開放平臺提交應用稽核通過後獲得
code 是 填寫第一步獲取的code引數
grant_type 是 填authorization_code
返回說明:
1 2 3 4 5 6 7 8 |
|
錯誤返回樣例:
{"errcode":40029,"errmsg":"invalid code"}
8、獲取使用者個人資訊(UnionID機制)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
返回的Json結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
9、最後
做到上面一步就應該得到返回微信的基本資訊,然後根據你公司後臺的基本需求去實現授權後如何登入App.
資料:
1 2 3 4 5 6 7 8 9 10 |
|