Swift-咖啡店App Part.2
兼距API串接與使用者資料儲存
第二步驟預計先完成使用Firebase登入與註冊功能,在管理第三方套件部分選擇的是CocoaPods,目前Firebase並未支援其他套件管理工具。
CocoaPods介紹與安裝方式可以參考以下Peter的文章:
建立FireBase登入與註冊功能
這部分網路上蠻多文章可以參考,這裡我會大概簡述一下我的作法,
- 安裝Pod在專案中
安裝時記得要關掉專案
2. 登入FireBase網站後進入主控台新增專案
3. 輸入專案名稱
Google Analytic部分個人是沒有勾選,還沒有很深入了解有什麼用處
4. 點擊iOS圖示
5. 依據指示完成後續動作
註冊應用程式部分 Bundle Identifier為必填選項,其餘兩欄可以空白。
下載設定檔放置專案內後打開第一個步驟產生的podfile輸入
pod 'Firebase/Auth'pod 'Firebase/Firestore'
關掉檔案打開Terminal,在專案的目錄下執行安裝
pod install
安裝完畢後即可關閉Terminal。
新增初始化程式碼部分則是需打開副檔名為xcworkspace的專案名稱檔案,在AppDelegate依據指示輸入程式碼。
補充:
有時依照指示輸入程式碼還是會顯示紅色錯誤,即使按cmd + B也無效,關掉專案再從開機可解決。
接下來的步驟可以參考FireBase官網的文件:
Docs > Guides(指南) > DEVELOP > Authentication > iOS > Password Authentication
6. 選擇登入方式
回到專案主控台頁面 > Authentication > SIGN-IN METHOD > 點擊Email/Password > 啟用第一個開關
此步驟與參考文件內Before you begin的指示相同
7. 設定專案註冊功能的程式碼
依據參考文件內Create a password-based account進行。
首先,在FindCafe 建立註冊頁面所需的UITableView類別檔案,命名為RegisterViewController,並套用在對應的View Controller上。
產生email與password的IBOutlet,以及註冊按鈕的IBAction,如下
接下來準備開始編輯程式碼,先import Firebase,再藉由optional binding來判定email與password是否有值,依據文件指示,在判斷有值後執行文件內的程式碼註冊新的帳號。
Firebase在帳號的形式與密碼的長度都有一定規範,這裡我用alert方式呈現,也可以當作提醒使用者無法註冊的原因,若無錯誤則利用performSegue進到下一個Menu的頁面。
8. 設定專案登入功能的程式碼
登入的介面設計在起始頁面,起始頁面習慣重拉一個UIViewController及重新定義一個UIViewController的類別檔案,命名為MainViewController,並套用在對應的View Controller上。
建立IBOutlets與IBAction,如下
程式碼部分一樣需import Firebase才可以開始輸入文件建議的語法,登入部分可以參考Sign in a user with an email address and password的部分,一樣先使用optional binding判定email與password,再依據輸入內容判斷是否有誤,成功的話一樣藉由performSegue進到Menu頁面。
錯誤一樣藉由alert產生給使用者知道。
9. 近一步完善App,讓使用者有更好的體驗
9–1. MainViewController按鈕外觀美化
在按鈕部分,增加了圓角與陰影的設計,相關程式碼如下 :
9–2. textfield使用的優化
在進入頁面時能直接進入進入輸入帳號密碼的狀態,且輸入完後案return能跳到下一個textfield,都輸入完畢後點擊空白處會自動收起鍵盤。
起始頁面考慮到使用者可能是第一次使用,故不會一進入App就彈跳出鍵盤要求使用者輸入帳號密碼,但在RegisterViewController部分就會在進入頁面後游標出現在email的欄位並彈出鍵盤。
完成此部分的優化需要藉由UITextFieldDelegate protocol裡面的方法textFieldShouldReturn(_:),以及override touchesBegan function。
為了讓程式碼區隔開來,使用extension將UITextFieldDelegate部分的東西盡量都放在一起。
一開始利用didSet方式讓email與password兩個IBOutlet都被設定自己的tag,同時指派代理為self,在RegisterViewController部分會在email的didSet部分多增加emailTextfield.becomeFirstResponder(),達到進入頁面就游標就跳到輸入帳號的部分。
在實現點擊return鍵跳到下一個textfield部分,利用resignFirstResponder解除原本FirstResponder狀態,並將下一個tag的textfield轉變為FirstResponder的狀態。
10. 建立.gitignore檔
使用Terminal建立gitignore檔的步驟大致如下:
在專案目錄下 > touch .gitignore > open .gitignore
touch是建立檔案 ; open是打開檔案
初期練習Firebase登入功能時,收到gitHub信件通知上傳內容含有API key,先前在AC上網頁後端課程時有學到,在上傳專案至gitHub前要產生.gitignore檔,其內容為專案內不想上傳讓其他人得知的資訊,如帳號密碼、API Key等。
在Peter建議下利用一些關鍵字查詢.gitignore的內容,以下網址是各種語法建議的.gitignore內容,但仍要視自身需求增加或刪除要檔上傳的。
同時也參考以下網頁的內容
在進行這一步驟仍發生.gitignore沒有擋住設定檔案的狀況,利用try & error方式測試一整天,上傳無數個測試專案仍無法得知原因,但慶幸的是最後總算沒讓設定檔上傳到gitHub上了!
實際成果:
主控台的資料畫面如下:
心得:
.gitignore真的消耗不少時間,但在測試的期間也一直反覆練習安裝第三方套件的安裝操作,不禁想起AC教的刻意練習,尤其在開始做這個作品時,雖然很多功能都是之前Peter課程或其他線上課程學到的!但當在實際操作時就會發現不懂之處或根本忘了它,只好再趁機多練習多看幾遍。
gitHub連結如下,有寫readMe介紹一下App,也有簡易說明安裝的步驟,順便再貼上一些參考的文章,感謝觀看,下一步預計完成API串接的部分。