Sử dụng firebase trên nền tảng iOS

Như các bạn đã biết nếu bạn muốn lập trình một ứng dụng client – server thì bảo sẽ phải đảm đương 2 việc là lập trình cả front-end và back-end.Nếu bạn là một lập trình viện mobile thì bạn sẽ phải học thêm về viết back-end(server) như vậy sẽ tiêu tốn khá nhiêu thời gian của bạn.Để giảm thời gian code back-end tôi xin giới thiệu với bạn một công nghê của google mang tên Firebase. Firebase hỗ trợ bạn khá nhiều về phần back-end. Sau đây tôi sẽ phân tích vài ưu điểm và nhược điểm khi dung firebase.

Ưu điểm:

  • Không tốn thời gian viết back-end
  • Tiết kiệm chi phí mua server
  • Thao tác với database real time (thời gian thực)
  • Có thể backup dữ liệu khi firebase có vấn đề

Nhược điểm:

  • Phục thuộc vào phía phát triển (google)
  • Không request data nhiều key được.

Tiếp theo tôi sẽ hướng dẫn các bạn bắt đầu sử dụng firebase,cụ thể trên nền tảng iOS. Thêm firebase vào project, bạn cần tạo một project và một file cấu hình firebase ứng dụng của bạn.

  • Tạo mới một project firebase Firebase console.Nếu bạn có sẵn một project firebase rồi thì chọn Import Google Project ->Create New Project.
  • Chọn Add Firebase vào app của bạn và làm theo các bước sau. Nếu bạn đang import một project google có sẵn thì bạn cần download configure file.
  • Sau đó,nhập bundle ID app của bạn,Nó rất quan trọng điều này chỉ được cài đặt khi bạn thêm app vào firbase project.
  • Cuối cùng bạn download file GoogleService-Info.plist file.Bạn có thể download nó ở đây download file in here
  • Copy file GoogleService-Info.plist vào project xcode của bạn.

Thêm SDK

Nếu bạn cài đặt project mới thì bạn cần install sdk.

  • Nếu bạn chưa có một project thì khởi tạo nó đi
  • Sau đó bạn tạo một podfile nếu chưa có.

$ cd your-project directory $ pod init

  • Thêm pods mà bạn muốn.Bạn có thể include một pod bạn muốn vào Podfile

pod 'Firebase/Core' Nó sẽ được thêm vào thư viện trong project của bạn khi running app

  • Install pod và mở .xcodeworkspace sẽ nhìn thấy trong project của bạn.

$ pod install $ open your-project.xcworkspace

  • Cuối cùng là bạn import GoogleService-Info.plist vào project của bạn nếu chưa có.

Trong bài viết này tôi sẽ giới thiệu với bạn chức năng đầu tiền khi sử dụng firebase là authentication(xác thực) và Database realtime (thời gian thực)

- Authentication

Bạn có thể sing in facebook, google, twitter hay tạo một tài khoản mới với firebase

Trước tiên cần phải thêm một pod vào project:

pod 'Firebase/Auth'

và run pod install,mở .xcodeworkspce lên pod đã sẳn sang trong project của bạn. Trong nethod application:didFinishLaunchingWithOptions: bạn cấu hình firebase:

// Use Firebase library to configure APIs [FIRApp configure];

  • Tạo mới user Create a form that allows new users to register with your app using their email address and a password. When a user completes the form, validate the email address and password provided by the user, then pass them to the createUser method: Tạo một form cho phép user đăng ký với app của bạn sử dụng địa chỉ email và mật khẩu.Khi user hoàn thành form, địa chỉ email và mật khẩu được cung cấp bởi user có hiệu lực sau đó sẽ gọi phương thức sau:

[[FIRAuth auth] createUserWithEmail:email password:password completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { // ... }];

  • Đăng nghập với user đang tồn tại Tạo một form cho phép user nhập email và pasword, khi user hoàn thành thì gọi phương thức:

[[FIRAuth auth] signInWithEmail:_emailField.text password:_passwordField.text completion:^(FIRUser *user, NSError *error) { // ... }];

  • Get thông tin của user Sau khi user đăng nhập thành công thì có thể get thông tin của người dùng.

if (user) { NSString *uid = user.uid; // Unique ID, which you can use to identify the user on the client side NSString *email = user.email; NSString *photoURL = user.photoURL; [user getTokenWithCompletion:^(NSString *token, NSError *error) { // token, if not nil, is an ID token, which you can safely send to a backend }]; }

- Realtime Database

Bạn cần phải thêm một pod vào Podfile

pod 'Firebase/Database'

Sau đó pod install,mở file .xcodeworkspace

  • Cấu hình quy tắc ra vào database Các cơ sở dữ liệu thời gian thực cung cấp một ngôn ngữ quy tắc khai báo cho phép bạn xác định cách dữ liệu của bạn đã được cấu trúc, làm thế nào nó sẽ được lập chỉ mục, và khi dữ liệu của bạn có thể được đọc và ghi vào. Theo mặc định, đọc và viết truy cập vào cơ sở dữ liệu của bạn bị hạn chế nên người dùng chỉ có thẩm quyền có thể đọc hoặc ghi dữ liệu. Để bắt đầu mà không thành lập xác thực, bạn có thể cấu hình quy tắc của bạn để truy cập công cộng. Điều này làm cho cơ sở dữ liệu của bạn mở cho bất cứ ai, ngay cả những người không sử dụng ứng dụng của bạn, vì vậy hãy chắc chắn để hạn chế cơ sở dữ liệu của bạn một lần nữa khi bạn thiết lập chứng thực. Bạn cần phải thêm pod:

    pod 'Firebase/Database'

Run pod install Một khi bạn đã khởi tạo cơ sở dữ liệu Realtime database, xác định và tạo ra một tham chiếu đến cơ sở dữ liệu của bạn như sau:

@property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase database] reference];

  • Cấu trúc data

Data được xây dựng theo hình cây

{ "users": { "alovelace": { "name": "Ada Lovelace", "contacts": { "ghopper": true }, }, "ghopper": { ... }, "eclarke": { ... } } }

Như ở trên bảng users có các user là alovelace, ghopper... Mỗi user thì có name,contact...

Ghi data Khi add một user chúng ta cần thực thi method:

[[[_ref child:@"users"] child:user.uid] setValue:@{@"name": username}];

Lệnh trên sẽ được hiểu như sau: bảng users/uid được thêm một phần tử user có name = username. Đọc một data Bạn có thể sử dụng các sự kiện FIRDataEventTypeValue để đọc dữ liệu tại một path nhất định, vì nó tồn tại thời gian của sự kiện. Phương pháp này được kích hoạt một lần khi nghe được gắn và một lần nữa mỗi khi dữ liệu, bao gồm bất kỳ children nào thay đổi. Việc gọi lại sự kiện được thông qua một bản chụp có chứa tất cả các dữ liệu tại vị trí đó, bao gồm cả dữ liệu con. Nếu không có dữ liệu, giá trị của ảnh chụp trở lại là con số không.

_refHandle = [_postRef observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { NSDictionary *postDict = snapshot.value; // ... }];

Update data Khi gọi updateChildValues, bạn có thể cập nhật các giá trị con cấp dưới bằng cách xác định một đường dẫn cho các phím. Nếu dữ liệu được lưu trữ tại nhiều địa điểm để mở rộng quy mô tốt hơn, bạn có thể cập nhật tất cả các trường hợp của dữ liệu sử dụng dữ liệu fan-out. Ví dụ, một ứng dụng viết blog xã hội có thể muốn tạo một bài đăng và đồng thời cập nhật vào báo cáo hoạt động gần đây và hoạt động của người dùng đăng tải. Để làm được điều này, các ứng dụng viết blog sử dụng mã như thế này:

NSString *key = [[_ref child:@"posts"] childByAutoId].key; NSDictionary *post = @{@"uid": userID, @"author": username, @"title": title, @"body": body}; NSDictionary *childUpdates = @{[@"/posts/" stringByAppendingString:key]: post, [NSString stringWithFormat:@"/user-posts/%@/%@/", userID, key]: post}; [_ref updateChildValues:childUpdates];

Delete data

Cách tốt nhất để xóa một data là gọi removeValue trỏ đến vị trí của data Bạn cũng có thể xóa một data bằng cách truyền vào một giá trị nil vào vị trí cần xóa rồi gọi phương thức updateChildValue.

Bài viết này tôi chỉ giới thiệu qua các thao tác căn bản với firebase, sẽ có những bài viết nâng cao hơn ở phần sau.Cảm ơn bạn đã đọc bài viết này 😄

All Rights Reserved