Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Firebase
Code

Bắt đầu với xác thực Firebase cho iOS

by
Difficulty:IntermediateLength:LongLanguages:

Vietnamese (Tiếng Việt) translation by Thai An (you can also view the original English article)

Firebase là một nền tảng cơ sở dữ liệu di động thời gian thực đa nền tảng cho phép các lập trình viên tập trung vào điều họ làm tốt nhất là mã hóa ứng dụng của họ, và không phải lo lắng về các vấn đề của DevOps như cơ sở hạ tầng máy chủ và mô hình hóa cơ sở dữ liệu. Do Google hỗ trợ, Firebase loại bỏ sự phức tạp trong việc xử lý các cơ sở dữ liệu thời gian thực ở back-end, xác thực người dùng và làm việc với các quy trình công việc đồng bộ hóa ngoại tuyến.

Mặc dù có nhiều giải pháp dành cho BaaS, chẳng hạn như Realm (xem hướng dẫn về Realm.io của tôi ở đây trên Envato Tuts+). Firebase không yêu cầu trước bất kỳ cơ sở hạ tầng cấu hình máy chủ nào, khi nền tảng đảm trách về lưu trữ và một SDK.

Ngoài cơ sở dữ liệu thời gian thực NoQuery, với Firebase bạn có các phân tích, báo cáo về sự cố, xác thực người dùng, nhắn tin trên cloud, thông báo push và hơn thế nữa. Các chi phí liên quan cũng tăng theo quy mô dự án của bạn khi phát triển, bạn chuyển từ mô hình freemium sang mô hình cho phí mỗi lần sử dụng.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách thiết lập Firebase trên iOS bằng CocoaPods và cách xác thực người dùng bằng hai phương pháp phổ biến: email và mật khẩu hoặc qua điện thoại bằng SMS.

Để tìm hiểu về Firebase cho Android, hãy xem một số hướng dẫn khác của chúng tôi ở trên Envato Tuts+.

Your First Firebase App

Điều kiện bắt buộc:

Bạn sẽ cần những điều sau đây:

  • iOS 10 và Xcode 8
  • CocoaPods đã cài đặt
  • một tài khoản Firebase miễn phí

Kiến thức yêu cầu

Hướng dẫn này giả định rằng bạn từng làm việc với iOS và Swift, cũng như một số kinh nghiệm cơ bản với CocoaPods. Nếu bạn cần tìm hiểu thêm, hãy xem hướng dẫn về Swifthướng dẫn về CocoaPods của chúng tôi.

Mục tiêu của hướng dẫn này

Đến cuối hướng dẫn này, bạn sẽ bắt đầu sử dụng một ứng dụng đơn giản được Firebase hỗ trợ bằng cách dùng SDK Firebase để xác thực người dùng, sử dụng email và mật khẩu và cả SMS. Trong quá trình, bạn sẽ tìm hiểu về:

  1. thiết lập Firebase với CocoaPods
  2. thiết lập App Delegate kết nối với Firebase
  3. thiết lập các quyền cung cấp cho xác thực người dùng Text/SMS
  4. sử dụng FirebaseUI để dễ dàng xác thực người dùng

Trong các hướng dẫn sắp tới của loạt bài này, bạn sẽ học cách làm việc với các khía cạnh khác của nền tảng Firebase, chẳng hạn như sử dụng cơ sở dữ liệu thời gian thực để lưu trữ dữ liệu ứng dụng.

Thiết lập dự án

Trong loạt bài này, chúng tôi sẽ xây dựng một ứng dụng to-do tên là FirebaseDo. Hãy bắt đầu bằng cách nhân bản dự án từ GitHub:

Tiếp theo, chúng tôi sẽ khởi tạo dự án để tạo ra PodFile mới, như sau:

pod init

Bạn sẽ thấy một file mới có tên Podfile nằm trong thư mục gốc của dự án của bạn. File này về cơ bản triển khai các thư viện mà chúng tôi muốn sử dụng trong dự án. Mở nó ra và bổ sung các dòng khai báo Firebase sau đây:

Lưu và sau đó nhập thông tin sau vào thiết bị đầu cuối của bạn để xây dựng các pod:

pod install

Chúng tôi sẽ sử dụng FirebaseDo.xcworkspace thay vì FirebaseDo.xccodeproj, cho phép chúng tôi làm việc với các thư viện phụ thuộc mà chúng tôi thiết lập trên CocoaPods, vì vậy hãy tiếp tục mở không gian làm việc và sau đó chuyển sang trình duyệt của bạn.

Bây giờ hãy vào bảng điều khiển Firebase và tạo một dự án mới:

Creating a new project in Firebase

Tiếp theo, nhấp vào Add Firebase to your iOS app, sau đó nó sẽ hướng dẫn bạn từng bước trong quá trình đăng ký ứng dụng của bạn trên Firebase.

Adding Firebase to your iOS app

Tại một số thời điểm, nó sẽ hướng dẫn bạn bổ sung file GoogleService-info.plist vào dự án Xcode của bạn:

 Adding GoogleService plist file to your iOS project

Bạn đã thêm các thư viện thông qua CocoaPods, vì vậy bạn có thể bỏ qua các hướng dẫn còn lại và quay lại bảng điều khiển Firebase.

Xác thực người dùng

Xác thực Firebase cung cấp dịch vụ backend, SDK dễ sử dụng và thư viện UI tạo sẵn để xác thực người dùng với ứng dụng của bạn. Hỗ trợ xác thực bằng mật khẩu, số điện thoại, nhà cung cấp nhận dạng liên kết phổ biến như Google, Facebook và Twitter, v.v. (nguồn: Firebase Authentication)

Trước khi chúng tôi trình bày cách sử dụng FirebaseUI để tự động xác thực người dùng của bạn, trước tiên chúng tôi sẽ khám phá các phương thức SDK mà Firebase thể hiện như một phần của FirebaseAuth Framework Reference API để xử lý việc tạo và đăng nhập của người dùng theo cách thủ công.

Đăng ký, đăng nhập và đăng xuất người dùng

Để tạo người dùng mới, bạn sẽ sử dụng phương thức Auth.auth().createUser(), như sau:

Giả sử đối tượng error là nil, người dùng sẽ không chỉ được đăng ký thành công mà còn được đăng nhập. Để đăng nhập một người dùng hiện có một cách rõ ràng, bạn sẽ gọi:

Đăng xuất một người dùng dễ dàng bằng việc gọi try! FirebaseAuth.signOut():

Chúng tôi muốn có thể xử lý các lỗi tiềm ẩn khác nhau, trong trường hợp các cuộc gọi xác thực bị lạc hướng và khi đối tượng error không phải là con nil (hoặc ngược lại, đối tượng user là nil), đã xảy ra lỗi. Tham khảo tài liệu Firebase để biết danh sách tất cả các mã lỗi phổ biến. Trong mã của chúng tôi, chúng tôi sẽ chỉ xử lý một vài lỗi chung.

Quản lý các thay đổi trạng thái xác thực

Trong suốt vòng đời của ứng dụng, trạng thái xác thực sẽ thay đổi, do đó việc có thể phát hiện khi người dùng đã xác thực hoặc session đã hết hạn rất quan trọng trong việc đảm bảo người dùng không có quyền truy cập vào các phần của ứng dụng mà họ không nên truy cập .

Bằng cách tạo một trình xử lý, .addStateDidChangeListener, giờ đây bạn có thể phát hiện trạng thái của người dùng và kích hoạt việc gọi cụ thể dựa trên đó.

Quản lý các người dùng

Sau khi người dùng đã xác thực, bạn có thể truy cập đối tượng user và lấy thông tin người dùng, chẳng hạn như ID người dùng, địa chỉ email và ảnh đại diện (nếu được cung cấp). Phương thức sau đây cũng sẽ khẳng định rằng người dùng thực sự hiện đang được xác thực với đối tượng user không phải là con số không:

Gửi email cho người dùng

Firebase cung cấp hỗ trợ tuyệt vời để gửi email xác minh cho người dùng hoặc email yêu cầu thiết lập lại mật khẩu.

Những người dùng ẩn danh

Firebase cũng có phương pháp để quản lý quy trình xác thực ẩn danh, về cơ bản là tài khoản tạm thời có thể được sử dụng để xác thực người dùng và cung cấp cho họ quyền truy xuất hạn chế. Ý tưởng đã đến đúng một thời điểm nhất định, người dùng ẩn danh có thể chọn đăng ký và Firebase sau đó có thể làm cầu nối để liên kết tài khoản ẩn danh của họ với thông tin đăng nhập mà không phải mất dữ liệu trong trạng thái ẩn danh. Để đăng nhập người dùng ẩn danh, bạn sẽ gọi:

Để chuyển người dùng từ tài khoản ẩn danh sang tài khoản được xác thực (sử dụng email và password), bạn sẽ gọi phương thức sau trong controller của màn hình đăng ký, yêu cầu email và mật khẩu, sau đó gọi phương thức user.link().

Firebase cũng hỗ trợ các phương thức cho cơ chế xác thực liên kết khác.

Bạn có nó rồi - chúng tôi đã thử qua các phương thức API quan trọng mà Firebase đã cung cấp để xử lý và xác thực người dùng. Mặc dù code tôi đã cho bạn thấy nó không phức tạp theo bất kỳ nghĩa nào, Firebase khiến nó thậm chí còn dễ dàng hơn thế này, với việc giới thiệu FirebaseUI. Trong nửa phần sau của hướng dẫn này, chúng tôi sẽ thêm xác thực vào ứng dụng mẫu to-do của chúng tôi.

Triển khai FirebaseUI

FirebaseUI cung cấp giải pháp xác thực drop-in để xử lý các luồng UI cho việc đăng nhập người dùng bằng địa chỉ email và password, số điện thoại và với các nhà cung cấp nhận dạng phổ biến được liên kết, bao gồm Google Sign-in và Facebook Login.

Tiếp theo, chúng tôi sẽ trình bày cách triển khai xác thực bằng FirebaseUI.

Trong Firebase Console, chuyển đến tab Authentication và bật các chế độ xác thực sau:

  • Email/Password
  • Phone
Adding EmailPassword and Phone support to app

Chúng tôi vừa cho thấy làm sao quản lý và xác thực người dùng theo cách thủ công bằng cách sử dụng các SDK có sẵn của Firebase. Bây giờ chúng ta sẽ xem làm thế nào để FirebaseUI thực hiện phần việc khó cho chúng ta. Trong HomeViewControll.swift, import các thư viện sau:

Trong khai báo UIViewControll.swift, thêm FUIAuthDelegate:

Bên dưới khai báo class này, chúng tôi sẽ khai báo 3 biến private mà chúng tôi sẽ làm việc. Chúng sẽ cho phép chúng ta tham chiếu đối tượng xác thực hiện tại của chúng ta, đối tượng AuthUI và listener để nghe xác thực của chúng ta, tương ứng:

Tiếp theo, hãy kết nối View Controller của chúng tôi để khi nó tải lên lần đầu tiên, chúng tôi sẽ kết nối một listener để phát hiện khi trạng thái xác thực thay đổi một handler. Khi trạng thái xác thực thay đổi, chúng tôi sẽ triệu tập phương thức self.loginAction(sender: self) để hiển thị controller xác thực Firebase.

Trong phương pháp này, chúng tôi cũng khởi tạo các biến private mà chúng tôi đã khai báo trước đó, đặt đại biểu authUI cho lớp riêng của chúng tôi và cuối cùng thiết lập danh sách các nhà cung cấp khác mà chúng tôi sẽ hỗ trợ, trong trường hợp của chúng tôi sẽ là FUIPhoneAuth.

Nếu chúng tôi muốn hỗ trợ Google, Facebook hoặc các nhà cung cấp bên thứ ba khác, chúng tôi có thể thêm họ vào danh sách này. Cũng lưu ý, chúng tôi không cần phải bao gồm email và password một cách rõ ràng vì điều đó đã được ngầm hiểu, miễn là nó được kích hoạt trong bảng Firebase console.

Hiển thị UI đăng nhập

Tiếp theo, chúng tôi xử lý phương thức loginAction(), sẽ được gọi trong trường hợp event listener xác định người dùng hiện không được xác thực. Tất cả những gì chúng ta cần làm trong trường hợp này là hiển thị modal của FirebaseU authUI.authViewController và sẽ bao gồm các nhà cung cấp xác thực liên quan mà chúng ta đã khai báo trước đó.

Đây là nơi phép màu bắt đầu, vì FirebaseUI xử lý mọi thứ: yêu cầu người dùng nhập địa chỉ email của họ, xác định xem người dùng có tồn tại không (trong trường hợp đó người dùng sẽ được hỏi password của họ) hoặc cho người dùng mới, yêu cầu tên họ và chỉ định một password.

Nếu chúng tôi thực hiện các phương thức xác thực theo cách thủ công thì chúng tôi sẽ cần xử lý tất cả các tình huống khác nhau này, bao gồm cả thiết lập lại mật khẩu email v.v.

Xử lý các thay đổi trạng thái Auth

Cuối cùng, chúng tôi thực hiện giao thức cần thiết cho đại biểu FIRAuthUIDelegate của chúng tôi, điều này sẽ cho phép chúng tôi lắng nghe và xử lý các trạng thái xác thực. Phương pháp này sẽ chỉ tiến hành nếu một lỗi thực sự đã xảy ra, nhưng chúng tôi thậm chí có thể xử lý các xác thực thành công.

Cài đặt xác thực qua điện thoại

Trước khi chúng tôi thử một ứng dụng, chúng tôi cần bổ sung một vài bước nữa để có thể xử lý xác thực qua điện thoại. Xác thực qua điện thoại cho phép người dùng nhập số điện thoại của họ và xác minh danh tính của họ thông qua tin nhắn SMS có chứa code sử dụng một lần.

Để có được code thông báo APN cần thiết cho máy chủ Firebase, hãy triển khai các thao tác sau trong file AppDelegate.swift:

Vì chúng tôi đã kích hoạt đăng nhập số điện thoại trong bảng Firebase console, nhiệm vụ tiếp theo của chúng tôi là cung cấp FirebaseDo để nhận các APNs từ Firebase, đây là một tác vụ bạn cũng cần làm nếu muốn hỗ trợ thông báo push nói chung. Tuy nhiên, trong trường hợp này, Firebase sẽ gửi thông báo push im lặng đến thiết bị để xác minh yêu cầu đăng nhập số điện thoại.

Bạn không thể kiểm tra phương thức xác thực này thông qua Xcode Simulator, thay vào đó bạn sẽ cần kết nối iPhone của mình để cài đặt và chạy ứng dụng.

Trong Xcode, đi đến Capabilities và kích hoạt Push Notifications. Ứng dụng sẽ tự động cung cấp và tạo file FirebaseDo.entitlements, như được hiển thị trong project navigator.

Adding Push Notifications in Xcode

Tiếp theo, chúng tôi sẽ tạo Apple Push Notification Authentication Key và tải lên Firebase. Trong Apple Developer Portal, bên dưới Keys, hãy đặt tên dự án của bạn, hãy đảm bảo chọn APNs. Tải xuống file kết quả .p8 và ghi chú key ID vì chúng tôi sẽ cần nhập nó ngay.

Creating a new Key in the Developer Portal

Quay trở lại Firebase Console và trong Project Settings (biểu tượng bánh răng), chọn tab Cloud Messaging. Trong iOS App ConfigurationAPNs Authentication Key, chọn nút Upload và tải lên file .p8, cùng với key ID và app ID. Màn hình cài đặt kết quả sẽ giống như sau:

Adding APNs key in Firebase

Kiểm tra ứng dụng

Thế đấy, chúng tôi đã không cần phải thêm nhiều code vào ứng dụng của mình để thiết lập nó cho một quy trình xác thực đăng nhập và đăng nhập hoàn chỉnh. Hãy để xây dựng và chạy ứng dụng trong Xcode để xem FirebaseUI hoạt động. Lần đầu tiên bạn chạy ứng dụng, bạn sẽ không được xác thực, do đó bạn sẽ nhận được một template chung với các tùy chọn xác thực mà bạn đã chọn trong bảng Firebase console.

Modal FirebaseUI authentication screen

Trông nó hơi nhạt nhẽo, nhưng bạn có thể tùy chỉnh hầu hết mọi khía cạnh của template.

Email sign-in prompt in FirebaseUI

Việc nhập địa chỉ email người dùng mới sẽ đưa đến màn hình Create Account, hỏi bạn tên và mật khẩu.

Firebase UI authentication determining the user is new prompting for the rest of the information

Hoàn thành biểu mẫu này sẽ đăng ký bạn với tư cách là người dùng mới (mặc dù ứng dụng của chúng tôi sẽ chỉ hiển thị một màn hình trống). Để xác nhận rằng người dùng mới đã được tạo ra, bạn có thể truy cập Authentication > Users trong Firebase Console.

Kiểm tra từng phương thức xác thực, hãy nhớ rằng bạn sẽ cần phải đăng xuất để kích hoạt lại lời nhắc xác thực. Kích hoạt lại auth để bằng cách thêm code như dòng đầu tiên trong viewDidLoad():

Điều này sẽ buộc ứng dụng trở lại trạng thái ban đầu để bạn có thể kiểm tra xác thực qua SMS của điện thoại. Chạy lại ứng dụng, lần này chọn Sign in With Phone.

Tổng kết

Trong hướng dẫn này, bạn đã có giới thiệu về việc sử dụng Firebase làm nền tảng back-end cho ứng dụng của mình và bạn đã thấy phương pháp xác thực người dùng bằng cách kết hợp sử dụng email và password truyền thống, cũng như qua điện thoại và SMS, cách tiếp cận phổ biến với các ứng dụng như WhatsApp.

Sau đó, chúng tôi đã bắt đầu xây dựng ứng dụng FirebaseDo đơn giản của mình và mặc dù nó không thực hiện bất kỳ chức năng nhắc nhở thực tế nào, chúng tôi sẽ bắt đầu làm việc với chức năng đó trong hướng dẫn tiếp theo. Nhưng gói gọn trong vài dòng, chúng tôi đã cố gắng hoàn thành các việc sau:

  • Firebase tích hợp để thiết lập cơ chế xác thực cho email và mật khẩu
  • đã bổ sung khả năng xác thực qua SMS
  • theo dõi trạng thái xác thực
  • xử lý lỗi một cách tinh tế

Trong phần còn lại của loạt bài này, bạn sẽ xem xét một số thành phần khác của Firebase.

Và trong khi bạn vẫn còn đang đọc, hãy xem qua một số bài viết khác của chúng tôi về phát triển ứng dụng iOS!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.