#20 註冊、登入、Facebook登入功能|使用 okta API、Facebook SDK、UISheetPresentationController(ios 15 新功能)

使用功能

Facebook SDK
UISheetPresentationController
串接 otka API
Result Type

功能介紹

Facebook SDK

利用 SPM 安裝 Facebook iOS SDK,詳細步驟參考下方網址

安裝完成後,Xcode 畫面左下方將出現套件的檔案

在 AppDelegate 中加入以下相關程式,為了處理 Fb 功能觸發時 APP 的畫面切換、回傳資料…等

import FacebookCore

加入後才能使用 Facebook 相關功能,當APP 啟動時即完成 FB 的相關設定,因此把相關設定放在 didFinishLaunchingWithOptions

在 SceneDelegate 加入以下程式

相關設定完成後就可以在程式中套用此功能

在 Controller 中套用 FacebookLogin

import FacebookLogin

宣告一個參數產生 LoginManager 物件,接者使用 function login 登入,當 function 內closure 的 result 等於 LoginResult.success 代表登入成功,登入成功後利用 performSegue 跳至下一頁

在下一頁透過 GraphRequest 取得登入資訊

UISheetPresentationController

此為 ios15 才有的新功能,首先設定要顯示的 Controller 的 Storyboard ID

從程式生成 storyboard 中的 controller

guard let controller = storyboard?.instantiateViewController(withIdentifier: "GetStartedViewController") else { return }

宣告參數 sheet 生成 controller.presentationController 並轉型成 UISheetPresentationController

let sheet = controller.presentationController as? UISheetPresentationController

設定 detents 可以設定要顯示半螢幕還是全螢幕,半螢幕顯示如下

sheet.detents = [.medium()]

全螢幕顯示如下

sheet.detents = [.large()]
sheet.prefersGrabberVisible = true

此為顯示出灰色橫桿

點擊 Get Started 按鍵後跳出選擇視窗,可選擇使用 FB 登入或輸入詳細資料來註冊

參考:

串接 otka API、搭配 Result Type 定義讀取 API 後的動作

使用 okta 提供的帳號管理 API,可實現帳號註冊、登入、修改、登出等

註冊的程式如下

可參考 otka 官網中 Create User 說明

Request Example 如下

curl -v -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: SSWS ${api_token}" \
-d '{
"profile": {
"firstName": "Isaac",
"lastName": "Brock",
"email": "isaac.brock@example.com",
"login": "isaac.brock@example.com",
"mobilePhone": "555-415-1337"
},
"credentials": {
"password" : { "value": "tlpWENT2m" }
}
}' "https://${yourOktaDomain}/api/v1/users?activate=true"

宣告相對應的變數與型別

填入詳細資料後按下 Register 鍵,讀取註冊的 function,使用 Result Type 決定註冊成功與否後要做的動作,如註冊成功即跳出成功訊息視窗,並返回首頁,如註冊失敗跳出視窗並顯示錯誤訊息

登入的 function 如下,可參考官網中的 Authentication Operations

Request example 如下

curl -v -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"username": "dade.murphy@example.com",
"password": "correcthorsebatterystaple",
"options": {
"multiOptionalFactorEnroll": false,
"warnBeforePasswordExpired": false
}
}' "https://${yourOktaDomain}/api/v1/authn"

Response example 如下

{
"expiresAt": "2015-11-03T10:15:57.000Z",
"status": "SUCCESS",
"sessionToken": "00Fpzf4en68pCXTsMjcX8JPMctzN2Wiw4LDOBL_9pe",
"_embedded": {
"user": {
"id": "00ub0oNGTSWTBKOLGLNR",
"passwordChanged": "2015-09-08T20:14:45.000Z",
"profile": {
"login": "dade.murphy@example.com",
"firstName": "Dade",
"lastName": "Murphy",
"locale": "en_US",
"timeZone": "America/Los_Angeles"
}
}
}
}

一樣宣告相對應的變數與型別

登入時輸入註冊的使用者名稱與密碼,登入成功後,資料存在自定義的 loginResponse,在此 controller 宣告變數來儲存 loginResponse 中需要用到的資料,利用 perfomeSegue 跳至下一頁顯示使用者資料,並使用 prepare 將變數的資料傳至下一頁顯示

不論是 FB 登入或帳號密碼登入,最後都會跳到使用者資料畫面,返回鍵使用 unwindSegue 返回首頁

參考:

--

--