Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Di chuyển ứng dụng phân tích cú pháp iOS của bạn sang Firebase

Nếu bạn là người dùng Parse đang tìm kiếm một Backend thay thế dưới dạng giải pháp Dịch vụ, thì Firebase có thể là lựa chọn lý tưởng cho ứng dụng iOS của bạn.

Hướng dẫn này mô tả cách tích hợp các dịch vụ cụ thể vào ứng dụng của bạn. Để biết hướng dẫn thiết lập Firebase cơ bản, hãy xem hướng dẫn thiết lập iOS + .

Google Analytics

Google Analytics là một giải pháp đo lường ứng dụng miễn phí cung cấp thông tin chi tiết về việc sử dụng ứng dụng và mức độ tương tác của người dùng. Analytics tích hợp trên các tính năng của Firebase và cung cấp cho bạn báo cáo không giới hạn cho tối đa 500 sự kiện riêng biệt mà bạn có thể xác định bằng cách sử dụng SDK Firebase.

Xem tài liệu Google Analytics để tìm hiểu thêm.

Chiến lược di chuyển được đề xuất

Sử dụng các nhà cung cấp phân tích khác nhau là một tình huống phổ biến dễ áp ​​dụng cho Google Analytics. Chỉ cần thêm nó vào ứng dụng của bạn để hưởng lợi từ các sự kiện và thuộc tính người dùng mà Analytics tự động thu thập, như lần mở đầu tiên, bản cập nhật ứng dụng, kiểu thiết bị, độ tuổi.

Đối với các sự kiện tùy chỉnh và thuộc tính người dùng, bạn có thể sử dụng chiến lược ghi kép bằng cách sử dụng cả Phân tích cú pháp và Google Analytics để ghi lại các sự kiện và thuộc tính, cho phép bạn dần dần triển khai giải pháp mới.

So sánh mã

Phân tích cú pháp

// Start collecting data
[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];

NSDictionary *dimensions = @{
  // Define ranges to bucket data points into meaningful segments
  @"priceRange": @"1000-1500",
  // Did the user filter the query?
  @"source": @"craigslist",
  // Do searches happen more often on weekdays or weekends?
  @"dayType": @"weekday"
};
// Send the dimensions to Parse along with the 'search' event
[PFAnalytics trackEvent:@"search" dimensions:dimensions];

Google Analytics

// Obtain the AppMeasurement instance and start collecting data
[FIRApp configure];

// Send the event with your params
[FIRAnalytics logEventWithName:@"search" parameters:@{
  // Define ranges to bucket data points into meaningful segments
  @"priceRange": @"1000-1500",
  // Did the user filter the query?
  @"source": @"craigslist",
  // Do searches happen more often on weekdays or weekends?
  @"dayType": @"weekday"
}];

Cơ sở dữ liệu thời gian thực của Firebase

Cơ sở dữ liệu thời gian thực của Firebase là cơ sở dữ liệu được lưu trữ trên đám mây của NoSQL. Dữ liệu được lưu trữ dưới dạng JSON và được đồng bộ hóa trong thời gian thực cho mọi máy khách được kết nối.

Xem tài liệu về Cơ sở dữ liệu thời gian thực của Firebase để tìm hiểu thêm.

Sự khác biệt với dữ liệu phân tích cú pháp

Các đối tượng

Trong Phân tích cú pháp, bạn lưu trữ một PFObject hoặc một lớp con của nó, chứa các cặp khóa-giá trị của dữ liệu tương thích với JSON. Dữ liệu là không có lớp, có nghĩa là bạn không cần chỉ định khóa nào tồn tại trên mỗi PFObject .

Tất cả dữ liệu Cơ sở dữ liệu thời gian thực của Firebase được lưu trữ dưới dạng các đối tượng JSON và không có dữ liệu tương đương cho PFObject ; bạn chỉ cần ghi vào cây JSON các giá trị kiểu tương ứng với các kiểu JSON có sẵn.

Sau đây là một ví dụ về cách bạn có thể lưu điểm cao cho một trò chơi.

Phân tích cú pháp
PFObject *gameScore = [PFObject objectWithClassName:@"GameScore"];
gameScore[@"score"] = @1337;
gameScore[@"playerName"] = @"Sean Plott";
gameScore[@"cheatMode"] = @NO;
[gameScore saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  if (succeeded) {
    // The object has been saved.
  } else {
    // There was a problem, check error.description
  }
}];
Firebase
// Create a reference to the database
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
NSString *key = [[ref child:@"scores"] childByAutoId].key;
NSDictionary *score = @{@"score": @1337,
                        @"playerName": @"Sean Plott",
                        @"cheatMode": @NO};
[key setValue:score withCompletionBlock:^(NSError *error,  FIRDatabaseReference *ref) {
  if (error) {
    // The object has been saved.
  } else {
    // There was a problem, check error.description
  }
}];
Để biết thêm chi tiết, hãy xem hướng dẫn Đọc và Ghi Dữ liệu trên các nền tảng của Apple .

Mối quan hệ giữa dữ liệu

Một PFObject có thể có mối quan hệ với một PFObject khác: bất kỳ đối tượng nào cũng có thể sử dụng các đối tượng khác làm giá trị.

Trong Cơ sở dữ liệu thời gian thực của Firebase, các mối quan hệ được thể hiện tốt hơn bằng cách sử dụng cấu trúc dữ liệu phẳng chia dữ liệu thành các đường dẫn riêng biệt để chúng có thể được tải xuống một cách hiệu quả trong các lệnh gọi riêng biệt.

Sau đây là một ví dụ về cách bạn có thể cấu trúc mối quan hệ giữa các bài đăng trong một ứng dụng blog và tác giả của chúng.

Phân tích cú pháp
// Create the author
PFObject *myAuthor = [PFObject objectWithClassName:@"Author"];
myAuthor[@"name"] = @"Grace Hopper";
myAuthor[@"birthDate"] = @"December 9, 1906";
myAuthor[@"nickname"] = @"Amazing Grace";

// Create the post
PFObject *myPost = [PFObject objectWithClassName:@"Post"];
myPost[@"title"] = @"Announcing COBOL, a New Programming Language";

// Add a relation between the Post and the Author
myPost[@"parent"] = myAuthor;

// This will save both myAuthor and myPost
[myPost saveInBackground];
Firebase
// Create a reference to the database
FIRDatabaseReference *ref = [[FIRDatabase database] reference];

// Create the author
NSString *myAuthorKey = @"ghopper";
NSDictionary *author = @{@"name": @"Grace Hopper",
                         @"birthDate": @"December 9, 1906",
                         @"nickname": @"Amazing Grace"};
// Save the author
[[ref child:myAuthorKey] setValue:author]

// Create and save the post
NSString *key = [[ref child:@"posts"] childByAutoId].key;
NSDictionary *post = @{@"author": myAuthorKey,
                       @"title": @"Announcing COBOL, a New Programming Language"};
[key setValue:post]

Bố cục dữ liệu sau đây là kết quả.

{
  // Info about the authors
  "authors": {
    "ghopper": {
      "name": "Grace Hopper",
      "date_of_birth": "December 9, 1906",
      "nickname": "Amazing Grace"
    },
    ...
  },
  // Info about the posts: the "author" fields contains the key for the author
  "posts": {
    "-JRHTHaIs-jNPLXOQivY": {
      "author": "ghopper",
      "title": "Announcing COBOL, a New Programming Language"
    }
    ...
  }
}
Để biết thêm chi tiết, hãy xem hướng dẫn Cấu trúc Cơ sở dữ liệu của Bạn .

Đọc dữ liệu

Trong Phân tích cú pháp, bạn đọc dữ liệu bằng cách sử dụng ID của một đối tượng Phân tích cú pháp cụ thể hoặc thực hiện các truy vấn bằng PFQuery .

Trong Firebase, bạn truy xuất dữ liệu bằng cách đính kèm trình nghe không đồng bộ vào tham chiếu cơ sở dữ liệu. Trình lắng nghe được kích hoạt một lần cho trạng thái ban đầu của dữ liệu và một lần nữa khi dữ liệu thay đổi, vì vậy bạn sẽ không cần thêm bất kỳ mã nào để xác định xem dữ liệu có thay đổi hay không.

Sau đây là ví dụ về cách bạn có thể lấy điểm cho một người chơi cụ thể, dựa trên ví dụ được trình bày trong phần "Đối tượng" .

Phân tích cú pháp
PFQuery *query = [PFQuery queryWithClassName:@"GameScore"];
[query whereKey:@"playerName" equalTo:@"Dan Stemkoski"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
  if (!error) {
    for (PFObject *score in objects) {
      NSString *gameScore = score[@"score"];
      NSLog(@"Retrieved: %@", gameScore);
    }
  } else {
    // Log details of the failure
    NSLog(@"Error: %@ %@", error, [error userInfo]);
  }
}];
Firebase
// Create a reference to the database
FIRDatabaseReference *ref = [[FIRDatabase database] reference];

// This type of listener is not one time, and you need to cancel it to stop
// receiving updates.
[[[[ref child:@"scores"] queryOrderedByChild:@"playerName"] queryEqualToValue:@"Dan Stemkoski"]
    observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
  // This will fire for each matching child node.
  NSDictionary *score = snapshot.value;
  NSString gameScore = score[@"score"];
  NSLog(@"Retrieved: %@", gameScore);
}];
Để biết thêm chi tiết về các loại trình nghe sự kiện có sẵn cũng như cách sắp xếp và lọc dữ liệu, hãy xem hướng dẫn Đọc và Ghi dữ liệu trên nền tảng Apple .

Chiến lược di chuyển được đề xuất

Suy nghĩ lại về dữ liệu của bạn

Cơ sở dữ liệu thời gian thực của Firebase được tối ưu hóa để đồng bộ hóa dữ liệu tính bằng mili giây trên tất cả các máy khách được kết nối và cấu trúc dữ liệu kết quả khác với dữ liệu cốt lõi Phân tích cú pháp. Điều này có nghĩa là bước đầu tiên của quá trình di chuyển của bạn là xem xét những thay đổi nào mà dữ liệu của bạn yêu cầu, bao gồm:

  • Cách các đối tượng Phân tích cú pháp của bạn sẽ ánh xạ tới dữ liệu Firebase
  • Nếu bạn có quan hệ cha mẹ-con, hãy làm thế nào để chia dữ liệu của bạn theo các đường dẫn khác nhau để có thể tải dữ liệu xuống một cách hiệu quả trong các cuộc gọi riêng biệt.

Di chuyển dữ liệu của bạn

Sau khi quyết định cách cấu trúc dữ liệu của mình trong Firebase, bạn cần lập kế hoạch cách xử lý khoảng thời gian mà ứng dụng của bạn cần ghi vào cả hai cơ sở dữ liệu. Lựa chọn của bạn là:

Đồng bộ hóa nền

Trong trường hợp này, bạn có hai phiên bản ứng dụng: phiên bản cũ sử dụng Phân tích cú pháp và phiên bản mới sử dụng Firebase. Đồng bộ hóa giữa hai cơ sở dữ liệu được xử lý bởi Phân tích cú pháp mã đám mây (Phân tích cú pháp thành Firebase), với mã của bạn lắng nghe các thay đổi trên Firebase và đồng bộ hóa những thay đổi đó với Phân tích cú pháp. Trước khi có thể bắt đầu sử dụng phiên bản mới, bạn phải:

  • Chuyển đổi Dữ liệu phân tích cú pháp hiện có của bạn sang cấu trúc Firebase mới và ghi nó vào Cơ sở dữ liệu thời gian thực của Firebase.
  • Viết các hàm Phân tích cú pháp mã đám mây sử dụng API REST của Firebase để ghi vào Cơ sở dữ liệu thời gian thực Firebase các thay đổi được thực hiện trong Phân tích dữ liệu bởi các máy khách cũ.
  • Viết và triển khai mã lắng nghe các thay đổi trên Firebase và đồng bộ hóa chúng với cơ sở dữ liệu Phân tích cú pháp.

Kịch bản này đảm bảo sự tách biệt rõ ràng giữa mã cũ và mã mới, đồng thời giữ cho máy khách đơn giản. Những thách thức của kịch bản này là xử lý các bộ dữ liệu lớn trong lần xuất đầu tiên và đảm bảo rằng đồng bộ hóa hai chiều không tạo ra đệ quy vô hạn.

Viết đôi

Trong trường hợp này, bạn viết một phiên bản mới của ứng dụng sử dụng cả Firebase và Parse, sử dụng Parse Cloud Code để đồng bộ hóa các thay đổi do khách hàng cũ thực hiện từ Phân tích dữ liệu sang Cơ sở dữ liệu thời gian thực của Firebase. Khi đủ số người đã di chuyển từ phiên bản chỉ Phân tích cú pháp của ứng dụng, bạn có thể xóa mã Phân tích cú pháp khỏi phiên bản ghi kép.

Trường hợp này không yêu cầu bất kỳ mã phía máy chủ nào. Nhược điểm của nó là dữ liệu không được truy cập sẽ không được di chuyển và kích thước ứng dụng của bạn tăng lên do sử dụng cả hai SDK.

Xác thực Firebase

Xác thực Firebase có thể xác thực người dùng bằng mật khẩu và các nhà cung cấp danh tính liên kết phổ biến như Google, Facebook và Twitter. Nó cũng cung cấp các thư viện giao diện người dùng để giúp bạn tiết kiệm khoản đầu tư đáng kể cần thiết để triển khai và duy trì trải nghiệm xác thực đầy đủ cho ứng dụng của bạn trên tất cả các nền tảng.

Xem tài liệu Xác thực Firebase để tìm hiểu thêm.

Sự khác biệt với Parse Auth

Phân tích cú pháp cung cấp một lớp người dùng chuyên biệt gọi là PFUser tự động xử lý các chức năng cần thiết để quản lý tài khoản người dùng. PFUser là một lớp con của PFObject , có nghĩa là dữ liệu người dùng có sẵn trong Dữ liệu phân tích cú pháp và có thể được mở rộng với các trường bổ sung giống như bất kỳ PFObject nào khác.

FIRUser có một tập hợp các thuộc tính cơ bản cố định — ID duy nhất, địa chỉ email chính, tên và URL ảnh — được lưu trữ trong cơ sở dữ liệu người dùng của dự án riêng biệt; những thuộc tính đó có thể được cập nhật bởi người dùng. Bạn không thể thêm trực tiếp các thuộc tính khác vào đối tượng FIRUser ; thay vào đó, bạn có thể lưu trữ các thuộc tính bổ sung trong Cơ sở dữ liệu thời gian thực của Firebase.

Sau đây là ví dụ về cách bạn có thể đăng ký người dùng và thêm trường số điện thoại bổ sung.

Phân tích cú pháp
PFUser *user = [PFUser user];
user.username = @"my name";
user.password = @"my pass";
user.email = @"email@example.com";

// other fields can be set just like with PFObject
user[@"phone"] = @"415-392-0202";

[user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  if (!error) {
    // Hooray! Let them use the app now.
  } else {
    // Something went wrong
    NSString *errorString = [error userInfo][@"error"];
  }
}];
Firebase
[[FIRAuth auth] createUserWithEmail:@"email@example.com"
                           password:@"my pass"
                         completion:^(FIRUser *_Nullable user, NSError *_Nullable error) {
  if (!error) {
    FIRDatabaseReference *ref = [[FIRDatabase database] reference];
    [[[[ref child:@"users"] child:user.uid] child:@"phone"] setValue:@"415-392-0202"
  } else {
    // Something went wrong
    NSString *errorString = [error userInfo][@"error"];
  }
}];

Chiến lược di chuyển được đề xuất

Di chuyển tài khoản

Để di chuyển tài khoản người dùng từ Phân tích cú pháp sang Firebase, hãy xuất cơ sở dữ liệu người dùng của bạn sang tệp JSON hoặc CSV, sau đó nhập tệp vào dự án Firebase của bạn bằng lệnh auth:import của Firebase CLI.

Đầu tiên, xuất cơ sở dữ liệu người dùng của bạn từ bảng điều khiển Phân tích cú pháp hoặc cơ sở dữ liệu tự lưu trữ của bạn. Ví dụ: tệp JSON được xuất từ ​​bảng điều khiển Phân tích cú pháp có thể trông giống như sau:

{ // Username/password user
  "bcryptPassword": "$2a$10$OBp2hxB7TaYZgKyTiY48luawlTuYAU6BqzxJfpHoJMdZmjaF4HFh6",
  "email": "user@example.com",
  "username": "testuser",
  "objectId": "abcde1234",
  ...
},
{ // Facebook user
  "authData": {
    "facebook": {
      "access_token": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
      "expiration_date": "2017-01-02T03:04:05.006Z",
      "id": "1000000000"
    }
  },
  "username": "wXyZ987654321StUv",
  "objectId": "fghij5678",
  ...
}

Sau đó, chuyển đổi tệp đã xuất sang định dạng theo yêu cầu của Firebase CLI. Sử dụng objectId của người dùng Phân tích cú pháp của bạn làm localId của người dùng Firebase của bạn. Ngoài ra, base64 mã hóa các giá trị bcryptPassword từ Phân tích cú pháp và sử dụng chúng trong trường passwordHash . Ví dụ:

{
  "users": [
    {
      "localId": "abcde1234",  // Parse objectId
      "email": "user@example.com",
      "displayName": "testuser",
      "passwordHash": "JDJhJDEwJE9CcDJoeEI3VGFZWmdLeVRpWTQ4bHVhd2xUdVlBVTZCcXp4SmZwSG9KTWRabWphRjRIRmg2",
    },
    {
      "localId": "fghij5678",  // Parse objectId
      "displayName": "wXyZ987654321StUv",
      "providerUserInfo": [
        {
          "providerId": "facebook.com",
          "rawId": "1000000000",  // Facebook ID
        }
      ]
    }
  ]
}

Cuối cùng, nhập tệp đã chuyển đổi với Firebase CLI, chỉ định bcrypt làm thuật toán băm:

firebase auth:import account_file.json --hash-algo=BCRYPT

Di chuyển dữ liệu người dùng

Nếu bạn đang lưu trữ dữ liệu bổ sung cho người dùng của mình, bạn có thể di chuyển dữ liệu đó sang Cơ sở dữ liệu thời gian thực của Firebase bằng cách sử dụng các chiến lược được mô tả trong phần di chuyển dữ liệu . Nếu bạn di chuyển tài khoản bằng cách sử dụng quy trình được mô tả trong phần di chuyển tài khoản , thì tài khoản Firebase của bạn có cùng id của tài khoản Phân tích cú pháp, cho phép bạn dễ dàng di chuyển và tái tạo bất kỳ mối quan hệ nào do id người dùng khóa.

Nhắn tin qua đám mây Firebase

Nhắn tin qua đám mây Firebase (FCM) là một giải pháp nhắn tin đa nền tảng cho phép bạn gửi tin nhắn và thông báo một cách đáng tin cậy mà không mất phí. Trình tổng hợp Thông báo là một dịch vụ miễn phí được xây dựng trên Nhắn tin qua đám mây của Firebase cho phép thông báo người dùng được nhắm mục tiêu cho các nhà phát triển ứng dụng dành cho thiết bị di động.

Xem tài liệu về Nhắn tin qua đám mây của Firebase để tìm hiểu thêm.

Sự khác biệt với thông báo đẩy phân tích cú pháp

Mọi ứng dụng Phân tích cú pháp được cài đặt trên thiết bị được đăng ký nhận thông báo đều có đối tượng Installation được liên kết, nơi bạn lưu trữ tất cả dữ liệu cần thiết để nhắm mục tiêu thông báo. Installation là một lớp con của PFUser , có nghĩa là bạn có thể thêm bất kỳ dữ liệu bổ sung nào bạn muốn vào các phiên bản Installation của mình.

Trình tổng hợp Thông báo cung cấp các phân khúc người dùng được xác định trước dựa trên thông tin như ứng dụng, phiên bản ứng dụng và ngôn ngữ thiết bị. Bạn có thể tạo các phân đoạn người dùng phức tạp hơn bằng cách sử dụng các sự kiện và thuộc tính của Google Analytics để tạo đối tượng. Xem hướng dẫn trợ giúp về khán giả để tìm hiểu thêm. Những thông tin nhắm mục tiêu này không hiển thị trong Cơ sở dữ liệu thời gian thực của Firebase.

Chiến lược di chuyển được đề xuất

Di chuyển mã thông báo thiết bị

Trong khi Parse sử dụng mã thông báo thiết bị APN để nhắm mục tiêu cài đặt cho các thông báo, FCM sử dụng mã thông báo đăng ký FCM được ánh xạ tới mã thông báo thiết bị APN. Chỉ cần thêm FCM SDK vào ứng dụng Apple của bạn và nó sẽ tự động tìm nạp mã thông báo FCM .

Di chuyển kênh sang chủ đề FCM

Nếu đang sử dụng Phân tích cú pháp các kênh để gửi thông báo, bạn có thể chuyển sang các chủ đề FCM, các chủ đề này cung cấp cùng một mô hình nhà xuất bản - người đăng ký. Để xử lý quá trình chuyển đổi từ Phân tích cú pháp sang FCM, bạn có thể viết một phiên bản mới của ứng dụng sử dụng SDK phân tích cú pháp để hủy đăng ký kênh Phân tích cú pháp và FCM SDK để đăng ký các chủ đề FCM tương ứng.

Ví dụ: nếu người dùng của bạn đã đăng ký chủ đề "Người khổng lồ", bạn sẽ làm điều gì đó như:

PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation removeObject:@"Giants" forKey:@"channels"];
[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  if (succedeed) {
    [[FIRMessaging messaging] subscribeToTopic:@"/topics/Giants"];
  } else {
    // Something went wrong unsubscribing
  }
}];

Sử dụng chiến lược này, bạn có thể gửi tin nhắn đến cả kênh Phân tích cú pháp và chủ đề FCM tương ứng, hỗ trợ người dùng cả phiên bản cũ và mới. Khi đủ người dùng đã di chuyển từ phiên bản chỉ Phân tích cú pháp của ứng dụng, bạn có thể ngừng phiên bản đó và chỉ bắt đầu gửi bằng FCM.

Xem tài liệu về chủ đề FCM để tìm hiểu thêm.

Cấu hình từ xa Firebase

Firebase Remote Config là một dịch vụ đám mây cho phép bạn thay đổi hành vi và giao diện của ứng dụng mà không yêu cầu người dùng tải xuống bản cập nhật ứng dụng. Khi sử dụng Cấu hình từ xa, bạn tạo các giá trị mặc định trong ứng dụng để kiểm soát hành vi và giao diện của ứng dụng của bạn. Sau đó, bạn có thể sử dụng bảng điều khiển Firebase sau đó để ghi đè các giá trị mặc định trong ứng dụng cho tất cả người dùng ứng dụng hoặc cho các phân đoạn trong cơ sở người dùng của bạn.

Cấu hình từ xa Firebase có thể rất hữu ích trong quá trình di chuyển của bạn trong trường hợp bạn muốn thử nghiệm các giải pháp khác nhau và có thể chuyển động nhiều máy khách hơn sang một nhà cung cấp khác. Ví dụ: nếu bạn có một phiên bản ứng dụng của mình sử dụng cả Firebase và Parse cho dữ liệu, bạn có thể sử dụng quy tắc phần trăm ngẫu nhiên để xác định khách hàng nào đọc từ Firebase và tăng dần tỷ lệ phần trăm.

Để tìm hiểu thêm về Cấu hình từ xa Firebase, hãy xem phần giới thiệu Cấu hình từ xa .

Sự khác biệt với cấu hình phân tích cú pháp

Với cấu hình phân tích cú pháp, bạn có thể thêm các cặp khóa / giá trị vào ứng dụng của mình trên Bảng điều khiển cấu hình phân tích cú pháp, sau đó tìm nạp PFConfig trên máy khách. Mỗi PFConfig mà bạn nhận được luôn là bất biến. Khi bạn truy xuất một PFConfig mới trong tương lai từ mạng, nó sẽ không sửa đổi bất kỳ phiên bản PFConfig hiện có nào, mà thay vào đó sẽ tạo một phiên bản mới và cung cấp nó qua currentConfig .

Với Cấu hình từ xa Firebase, bạn tạo các giá trị mặc định trong ứng dụng cho các cặp khóa / giá trị mà bạn có thể ghi đè từ bảng điều khiển Firebase và bạn có thể sử dụng các quy tắc và điều kiện để cung cấp các biến thể về trải nghiệm người dùng của ứng dụng cho các phân đoạn khác nhau của cơ sở người dùng. Cấu hình từ xa của Firebase triển khai một lớp singleton làm cho các cặp khóa / giá trị có sẵn cho ứng dụng của bạn. Ban đầu, singleton trả về các giá trị mặc định mà bạn xác định trong ứng dụng. Bạn có thể tìm nạp một bộ giá trị mới từ máy chủ bất kỳ lúc nào thuận tiện cho ứng dụng của bạn; sau khi tập hợp mới được tìm nạp thành công, bạn có thể chọn thời điểm kích hoạt tập hợp đó để cung cấp các giá trị mới cho ứng dụng.

Chiến lược di chuyển được đề xuất

Bạn có thể chuyển sang Cấu hình từ xa Firebase bằng cách sao chép các cặp khóa / giá trị của cấu hình Phân tích cú pháp của bạn vào bảng điều khiển Firebase, sau đó triển khai phiên bản mới của ứng dụng sử dụng Cấu hình từ xa Firebase.

Nếu muốn thử nghiệm với cả Cấu hình phân tích cú pháp và Cấu hình từ xa Firebase, bạn có thể triển khai phiên bản mới của ứng dụng sử dụng cả hai SDK cho đến khi có đủ người dùng di chuyển từ phiên bản Chỉ phân tích cú pháp.

So sánh mã

Phân tích cú pháp

[PFConfig getConfigInBackgroundWithBlock:^(PFConfig *config, NSError *error) {
  if (!error) {
    NSLog(@"Yay! Config was fetched from the server.");
  } else {
    NSLog(@"Failed to fetch. Using Cached Config.");
    config = [PFConfig currentConfig];
  }

  NSString *welcomeMessage = config[@"welcomeMessage"];
  if (!welcomeMessage) {
    NSLog(@"Falling back to default message.");
    welcomeMessage = @"Welcome!";
  }
}];

Firebase

FIRRemoteConfig remoteConfig = [FIRRemoteConfig remoteConfig];
// Set defaults from a plist file
[remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

[remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
  if (status == FIRRemoteConfigFetchStatusSuccess) {
    NSLog(@"Yay! Config was fetched from the server.");
    // Once the config is successfully fetched it must be activated before newly fetched
    // values are returned.
    [self.remoteConfig activateFetched];
  } else {
    NSLog(@"Failed to fetch. Using last fetched or default.");
  }
}];

// ...

// When this is called, the value of the latest fetched and activated config is returned;
// if there's none, the default value is returned.
NSString welcomeMessage = remoteConfig[@"welcomeMessage"].stringValue;