Dễ dàng thêm đăng nhập vào ứng dụng iOS của bạn với FirebaseUI

FirebaseUI là một thư viện được xây dựng dựa trên SDK xác thực Firebase cung cấp các luồng giao diện người dùng thả vào để sử dụng trong ứng dụng của bạn. FirebaseUI cung cấp các lợi ích sau:

  • Nhiều nhà cung cấp : các luồng đăng nhập cho email/mật khẩu, liên kết email, xác thực qua điện thoại, Đăng nhập bằng Google, Đăng nhập bằng Facebook và Đăng nhập bằng Twitter.
  • Quản lý tài khoản : các luồng để xử lý các tác vụ quản lý tài khoản, chẳng hạn như tạo tài khoản và đặt lại mật khẩu.
  • Liên kết tài khoản ẩn danh : các luồng tự động liên kết tài khoản ẩn danh với nhà cung cấp danh tính.
  • Có thể tùy chỉnh : tùy chỉnh giao diện của FirebaseUI để phù hợp với ứng dụng của bạn. Ngoài ra, vì FirebaseUI là mã nguồn mở nên bạn có thể rẽ nhánh dự án và tùy chỉnh chính xác theo nhu cầu của mình.

Trước khi bắt đầu

  1. Thêm Firebase vào dự án Apple của bạn .

  2. Thêm FirebaseUI vào Podfile của bạn:

    pod 'FirebaseUI'
    

    Nếu muốn, bạn chỉ có thể thêm thành phần Auth và các nhà cung cấp mà bạn muốn sử dụng:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. Nếu bạn chưa kết nối ứng dụng của mình với dự án Firebase, hãy thực hiện việc này từ bảng điều khiển Firebase .

Thiết lập phương thức đăng nhập

Trước khi có thể sử dụng Firebase để đăng nhập người dùng, bạn phải bật và định cấu hình các phương thức đăng nhập mà bạn muốn hỗ trợ.

Địa chỉ email và mật khẩu

Trong bảng điều khiển Firebase , hãy mở phần Xác thực và bật xác thực email và mật khẩu.

  1. Trong bảng điều khiển Firebase , hãy mở phần Xác thực . Trên tab Phương thức đăng nhập , bật nhà cung cấp Email/Mật khẩu . Lưu ý rằng đăng nhập email/mật khẩu phải được bật để sử dụng đăng nhập liên kết email.

  2. Trong cùng một phần, hãy bật phương thức đăng nhập bằng liên kết Email (đăng nhập không cần mật khẩu) và nhấp vào Lưu .

  3. Bạn có thể bật đăng nhập liên kết email bằng cách khởi tạo phiên bản FUIEmailAuth với FIREmailLinkAuthSignInMethod . Bạn cũng sẽ cần cung cấp một đối tượng FIRActionCodeSettings hợp lệ với handleCodeInApp được đặt thành true.

Nhanh

var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")

let provider = FUIEmailAuth(authUI: FUIAuth.defaultAuthUI()!,
                            signInMethod: FIREmailLinkAuthSignInMethod,
                            forceSameDevice: false,
                            allowNewEmailAccounts: true,
                            actionCodeSetting: actionCodeSettings)

Mục tiêu-C

FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
                    installIfNotAvailable:NO
                           minimumVersion:@"12"];

id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. Ngoài ra, bạn cần đưa URL mà bạn chuyển đến bộ khởi tạo vào danh sách trắng. Bạn có thể làm như vậy trong bảng điều khiển Firebase , mở phần Xác thực . Trên tab Phương thức đăng nhập , thêm URL bên dưới Miền được ủy quyền .

  2. Khi bạn bắt được liên kết sâu, bạn sẽ cần chuyển nó tới giao diện người dùng xác thực để có thể xử lý nó.

Nhanh

FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)

Mục tiêu-C

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. Đăng nhập bằng liên kết email trong FirebaseUI-iOS tương thích với FirebaseUI-AndroidFirebaseUI-web trong đó một người dùng bắt đầu quy trình từ FirebaseUI-Android có thể mở liên kết và hoàn tất đăng nhập bằng FirebaseUI-web. Điều này cũng đúng với dòng chảy ngược lại.

Quả táo

  1. Thực hiện theo các phần Trước khi bạn bắt đầuTuân thủ các yêu cầu về dữ liệu ẩn danh của Apple trong hướng dẫn Đăng nhập Firebase bằng Apple .

  2. Thêm khả năng Đăng nhập bằng Apple vào tệp quyền của bạn.

  3. Khởi tạo phiên bản nhà cung cấp OAuth được định cấu hình để Đăng nhập bằng Apple:

    Nhanh

    provider = FUIOAuth.appleAuthProvider()
    

    Mục tiêu-C

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

Google

  1. Trong bảng điều khiển Firebase , hãy mở phần Xác thực và bật Đăng nhập bằng Google.

  2. Tải xuống bản sao mới của tệp GoogleService-Info.plist của dự án và sao chép nó vào dự án Xcode của bạn. Ghi đè bất kỳ phiên bản hiện có nào bằng phiên bản mới. (Xem Thêm Firebase vào dự án iOS của bạn .)

  3. Thêm ID khách hàng bị đảo ngược của bạn dưới dạng sơ đồ URL trong dự án Xcode của bạn. Bạn có thể tìm thấy giá trị này trong tệp GoogleService-Info.plist .

    Facebook

  4. Thiết lập SDK đăng nhập Facebook bằng cách theo dõi trang bắt đầu của Facebook .

  5. Trong bảng điều khiển Firebase , hãy mở phần Xác thực và bật Facebook. Để bật tính năng đăng nhập Facebook, bạn phải cung cấp ID ứng dụng Facebook và Bí mật ứng dụng của mình, bạn có thể nhận được thông tin này trong bảng điều khiển dành cho nhà phát triển của Facebook.

  6. Bật chia sẻ chuỗi khóa trong dự án Xcode của bạn từ màn hình Cài đặt dự án > Khả năng .

  7. Thêm fb FACEBOOK_APP_ID làm lược đồ URL trong dự án Xcode của bạn.

  8. Thêm ID ứng dụng Facebook của bạn và tên hiển thị vào tệp Info.plist :

    Chìa khóa Giá trị
    ID ứng dụng Facebook FACEBOOK_APP_ID (ví dụ: 1234567890 )
    FacebookHiển ThịTên Tên ứng dụng của bạn
  9. Khởi tạo phiên bản nhà cung cấp Facebook:

    Nhanh

    provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
    

    Mục tiêu-C

    FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
    

  10. Nếu bạn muốn sử dụng Đăng nhập có giới hạn của Facebook , hãy đặt thuộc tính useLimitedLogin trên phiên bản FUIFacebookAuth .

    Nhanh

    provider.useLimitedLogin = true
    

    Mục tiêu-C

    provider.useLimitedLogin = YES;
    

Twitter

  1. Trong bảng điều khiển Firebase , hãy mở phần Xác thực và bật Twitter. Để kích hoạt tính năng đăng nhập Twitter, bạn phải cung cấp bí mật và khóa người dùng API Twitter của mình. Bạn có thể lấy khóa này trong bảng điều khiển Quản lý ứng dụng Twitter.

  2. Khởi tạo phiên bản nhà cung cấp OAuth được định cấu hình để đăng nhập Twitter:

    Nhanh

    provider = FUIOAuth.twitterAuthProvider()
    

    Mục tiêu-C

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

Số điện thoại

  1. Trong bảng điều khiển Firebase , hãy mở phần Xác thực và bật đăng nhập bằng số điện thoại.

  2. Firebase phải có khả năng xác minh rằng các yêu cầu đăng nhập bằng số điện thoại đến từ ứng dụng của bạn. Một trong những cách thực hiện điều này là thông qua thông báo của APN. Xem Bật xác minh ứng dụng để biết chi tiết.

    Để bật thông báo APN để sử dụng với Xác thực Firebase:

    1. Trong Xcode, bật thông báo đẩy cho dự án của bạn.

    2. Tải khóa xác thực APN của bạn lên Firebase. Nếu bạn chưa có khóa xác thực APN, hãy đảm bảo tạo một khóa trong Trung tâm thành viên nhà phát triển của Apple .

      1. Bên trong dự án của bạn trong bảng điều khiển Firebase, hãy chọn biểu tượng bánh răng, chọn Cài đặt dự án rồi chọn tab Nhắn tin qua đám mây .

      2. Trong khóa xác thực APN bên dưới cấu hình ứng dụng iOS , hãy nhấp vào nút Tải lên .

      3. Duyệt đến vị trí mà bạn đã lưu khóa của mình, chọn nó và nhấp vào Mở . Thêm ID khóa cho khóa (có sẵn trong Trung tâm thành viên dành cho nhà phát triển của Apple ) và nhấp vào Tải lên .

      Nếu bạn đã có chứng chỉ APN, bạn có thể tải chứng chỉ lên để thay thế.

  3. Khi không thể nhận thông báo APN trên thiết bị, Firebase sẽ sử dụng reCAPTCHA để xác minh yêu cầu.

    Để bật xác minh reCAPTCHA, hãy làm như sau trong Xcode:

    1. Mở cấu hình dự án của bạn: nhấp đúp vào tên dự án ở chế độ xem dạng cây bên trái. Chọn ứng dụng của bạn từ phần MỤC TIÊU , sau đó chọn tab Thông tin và mở rộng phần Loại URL .
    2. Nhấp vào nút + và thêm ID ứng dụng đã mã hóa của bạn làm lược đồ URL. Bạn có thể tìm ID ứng dụng đã mã hóa của mình trên trang Cài đặt chung của bảng điều khiển Firebase, trong phần dành cho ứng dụng iOS của bạn. Để trống các trường khác.

      Khi hoàn tất, cấu hình của bạn sẽ trông giống như sau (nhưng với các giá trị dành riêng cho ứng dụng của bạn):

      Ảnh chụp màn hình giao diện thiết lập lược đồ URL tùy chỉnh của Xcode
  4. Tùy chọn : Firebase sử dụng phương thức swizzling để tự động nhận mã thông báo APN của ứng dụng, để xử lý thông báo đẩy ẩn mà Firebase gửi đến ứng dụng của bạn và để tự động chặn chuyển hướng lược đồ tùy chỉnh từ trang xác minh reCAPTCHA trong quá trình xác minh.

    Nếu bạn không muốn sử dụng swizzling, hãy xem Phụ lục: Sử dụng đăng nhập bằng điện thoại mà không cần swizzling trong tài liệu xác thực SDK Firebase.

Đăng nhập

Để bắt đầu quy trình đăng nhập FirebaseUI, trước tiên hãy khởi tạo FirebaseUI:

Nhanh

import FirebaseAuthUI

/* ... */

FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self

Mục tiêu-C

@import FirebaseAuthUI;

...

[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;

Sau đó, định cấu hình FirebaseUI để sử dụng các phương thức đăng nhập mà bạn muốn hỗ trợ:

Nhanh

import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
  FUITwitterAuth(),
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers

Mục tiêu-C

@import FirebaseAuthUI;
@import FirebaseFacebookAuthUI;
@import FirebaseGoogleAuthUI;
@import FirebaseOAuthUI;
@import FirebasePhoneAuthUI;

...

NSArray<id<FUIAuthProvider>> *providers = @[
  [[FUIGoogleAuth alloc] init],
  [[FUIFacebookAuth alloc] init],
  [[FUITwitterAuth alloc] init],
  [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;

Nếu bạn đã bật đăng nhập Google hoặc Facebook, hãy triển khai trình xử lý cho kết quả của luồng đăng ký Google và Facebook:

Nhanh

func application(_ app: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

Mục tiêu-C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
  NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
  return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}

Cuối cùng, lấy một phiên bản AuthViewController từ FUIAuth . Sau đó, bạn có thể trình bày nó dưới dạng bộ điều khiển chế độ xem đầu tiên của ứng dụng hoặc trình bày nó từ bộ điều khiển chế độ xem khác trong ứng dụng của bạn.

Nhanh

Để có bộ chọn phương thức đăng nhập:

let authViewController = authUI.authViewController()

Nếu bạn chỉ sử dụng đăng nhập bằng số điện thoại, thay vào đó, bạn có thể hiển thị trực tiếp chế độ xem đăng nhập bằng số điện thoại:

let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)

Mục tiêu-C

Để có bộ chọn phương thức đăng nhập:

UINavigationController *authViewController = [authUI authViewController];

Nếu bạn chỉ sử dụng đăng nhập bằng số điện thoại, thay vào đó, bạn có thể hiển thị trực tiếp chế độ xem đăng nhập bằng số điện thoại:

FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];

Sau khi bạn trình bày chế độ xem xác thực và người dùng đăng nhập, kết quả được trả về cho người ủy quyền FirebaseUI Auth trong phương thức didSignInWithUser:error: ::

Nhanh

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
  // handle user and error as necessary
}

Mục tiêu-C

   - (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
            error:(nullable NSError *)error {
  // Implement this method to handle signed in user or error if any.
}

Đăng xuất

FirebaseUI cung cấp các phương thức thuận tiện để đăng xuất khỏi Xác thực Firebase cũng như tất cả các nhà cung cấp nhận dạng xã hội:

Nhanh

authUI.signOut()

Mục tiêu-C

[authUI signOut];

tùy biến

Bạn có thể tùy chỉnh màn hình đăng nhập bằng cách phân lớp bộ điều khiển chế độ xem của FirebaseUI và chỉ định chúng trong các phương thức ủy quyền của FUIAuth :

Nhanh

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
  return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
  return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
  return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
                                                 bundle: Bundle.main,
                                                 authUI: authUI,
                                                 email: email)
}

func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
  return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
  return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
  return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
                                                     bundle: Bundle.main,
                                                     authUI: authUI,
                                                     email: email,
                                                     newCredential: newCredential)
}

Mục tiêu-C

- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];
}

- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];

}

- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
                                                                         email:(NSString *)email {
  return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
                                                                   bundle:[NSBundle mainBundle]
                                                                   authUI:authUI
                                                                    email:email];

}

- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
                                                                                 email:(NSString *)email
                                                                         newCredential:(FIRAuthCredential *)newCredential {
  return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
                                                                       bundle:[NSBundle mainBundle]
                                                                       authUI:authUI
                                                                        email:email
                                                                newCredential:newCredential];
}

Bạn có thể tùy chỉnh URL theo điều khoản dịch vụ của ứng dụng, được liên kết trên màn hình tạo tài khoản:

Nhanh

let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService

Mục tiêu-C

authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];

Cuối cùng, bạn có thể tùy chỉnh các thông báo và lời nhắc được hiển thị cho người dùng của mình bằng cách chỉ định gói tùy chỉnh:

Nhanh

authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.

Mục tiêu-C

authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.

Bước tiếp theo

  • Để biết thêm thông tin về cách sử dụng và tùy chỉnh FirebaseUI, hãy xem tệp README trên GitHub.
  • Nếu bạn tìm thấy và gặp sự cố trong FirebaseUI và muốn báo cáo sự cố đó, hãy sử dụng trình theo dõi sự cố GitHub .