Trong bài viết này, mình sẽ hướng dẫn bạn cách tích hợp tính năng đăng nhập bằng Google vào ứng dụng iOS sử dụng UIKit. Đây là một tính năng phổ biến giúp cải thiện trải nghiệm người dùng bằng cách cho phép họ đăng nhập nhanh chóng mà không cần tạo tài khoản mới.

I. Yêu cầu trước khi bắt đầu

  1. Tài khoản Google Cloud Console để tạo API Key và OAuth Client ID.
  2. Xcode.
  3. Một ứng dụng iOS được viết bằng UIKit.

II. Các bước thực hiện

Bước 1: Tạo dự án trên Google Cloud Console

  1. Truy cập Google Cloud Console.
  2. Tạo dự án mới:
  • Nhập tên dự án, ví dụ: “GoogleSignInDemo”.
  1. Kích hoạt Google Sign-In API:
  • Vào API & Services > Enable APIs and Services > Tìm Google Sign-In API > Bấm Enable.
  1. Tạo OAuth Client ID:
  • Vào Credentials > Chọn Create Credentials > OAuth 2.0 Client IDs.
  • Loại ứng dụng: iOS.
  • Nhập Bundle Identifier của ứng dụng.
  • Tải về file GoogleService-Info.plist

Bước 2: Thêm Google Sign-In SDK vào dự án

  1. Mở Terminal, di chuyển đến thư mục dự án, và chạy lệnh:
pod init
  1. Thêm Google Sign-In vào file Podfile:
pod 'GoogleSignIn'
  1. Cài đặt thư viện:
pod install
  1. Mở file .xcworkspace thay vì .xcodeproj.

Bước 3: Cấu hình dự án

  1. Thêm file GoogleService-Info.plist vào dự án:
  • Kéo thả file vào thư mục chính của dự án trong Xcode.
  1. Cấu hình URL Types:
  • Vào Info > URL Types.
  • Thêm mục mới:
    • Identifier: GoogleSignIn.
    • URL Schemes: Sao chép REVERSED_CLIENT_ID từ file GoogleService-Info.plist.

Bước 4: Tích hợp Google Sign-In vào UIKit

  1. Import thư viện Google Sign-In:
import GoogleSignIn
  1. Trong ViewController, thêm nút đăng nhập và xử lý sự kiện:
import UIKit
import GoogleSignIn

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupGoogleSignInButton()
    }

    private func setupGoogleSignInButton() {
        let signInButton = GIDSignInButton()
        signInButton.center = view.center
        view.addSubview(signInButton)
    }

    @IBAction func signInWithGoogle(_ sender: UIButton) {
        guard let clientID = FirebaseApp.app()?.options.clientID else { return }
        let config = GIDConfiguration(clientID: clientID)
        
        GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { user, error in
            if let error = error {
                print("Đăng nhập thất bại: \(error.localizedDescription)")
                return
            }
            guard let user = user else { return }
            print("Đăng nhập thành công: \(user.profile?.name ?? "")")
        }
    }
}
  1. Thêm hành động vào nút:
  • Trong Storyboard, thêm UIButton và liên kết nó với hàm signInWithGoogle.

Bước 5: Xử lý trạng thái đăng nhập

  1. Kiểm tra trạng thái đăng nhập:
if let user = GIDSignIn.sharedInstance.currentUser {
    print("Người dùng đã đăng nhập: \(user.profile?.name ?? "")")
} else {
    print("Người dùng chưa đăng nhập.")
}
  1. Đăng xuất:
GIDSignIn.sharedInstance.signOut()
print("Đăng xuất thành công.")

III. Kiểm tra và Debug

1. Kiểm tra cấu hình:

  • Đảm bảo Bundle Identifier trùng khớp với dự án trên Google Cloud Console.

2. Thử nghiệm đăng nhập:

  • Sử dụng nhiều tài khoản Google để kiểm tra tính năng.

3. Kiểm tra lỗi:

  • Nếu gặp lỗi, kiểm tra log từ Xcode hoặc file cấu hình GoogleService-Info.plist.

IV. Kết luận

Tính năng đăng nhập Google giúp cải thiện trải nghiệm người dùng, đặc biệt trong các ứng dụng yêu cầu xác thực.
Với Google Sign-In SDK, việc tích hợp tính năng này vào ứng dụng iOS rất nhanh chóng và dễ dàng.

Lưu ý: Khi đưa ứng dụng lên App Store mà ứng dụng của bạn cho phép người dùng đăng nhập bằng các dịch vụ bên thứ ba như Google, Facebook, hoặc Twitter, hãy lưu ý rằng Apple yêu cầu bạn bắt buộc phải tích hợp Đăng nhập bằng Apple (Sign in with Apple).