Google cam kết thúc đẩy bình đẳng chủng tộc đối với cộng đồng đen. Xem cách.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Tuyên truyền thông tin cập nhật Config từ xa theo thời gian thực

Sử dụng chức năng nền từ xa Config kích hoạt được cung cấp bởi Mây Chức năng cho căn cứ hỏa lực cùng với FCM , bạn có thể truyền từ xa Config cập nhật trong thời gian thực. Trong kịch bản này, bạn tạo một hàm trigger khi bạn xuất bản hoặc cuộn lại mẫu Config từ xa của bạn từ bảng điều khiển hoặc API. Mẫu cập nhật kích hoạt chức năng để gửi một tin nhắn FCM để cho khách hàng biết rằng cấu hình hiện tại của họ là cũ và rằng họ tới lấy nên từ máy chủ:

Phần còn lại của tài liệu này bạn đi qua các bước sau để tuyên truyền thông tin cập nhật Config từ xa theo thời gian thực.

Theo dõi các trường hợp ứng dụng client đến một chủ đề FCM

Để nhắm mục tiêu một thông FCM cho một nhóm lớn các trường hợp ứng dụng client như toàn bộ cơ sở người dùng của bạn, tin nhắn chủ đề là cơ chế effecient nhất. Mỗi trường hợp ứng dụng mà sẽ nhận được bản cập nhật cấu hình thời gian thực từ xa phải đăng ký một tên chủ đề như thế nào, ví dụ, PUSH_RC :

Nhanh

extension AppDelegate : MessagingDelegate {
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
        messaging.subscribe(toTopic: "PUSH_RC") { error in
            print("Subscribed to PUSH_RC topic")
        }
    }
}
    

Objective-C

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    [[FIRMessaging messaging] subscribeToTopic:@"PUSH_RC" completion:^(NSError * _Nullable error) {
        NSLog(@"Subscribed to PUSH_RC topic");
    }];
}
    

Android

@Override
public void onNewToken(String s) {
    FirebaseMessaging.getInstance().subscribeToTopic("PUSH_RC");
}
    

Tạo một chức năng để gửi một ping FCM trên mẫu cập nhật

Bạn có thể kích hoạt một chức năng để đáp ứng với sự kiện Config từ xa, bao gồm các ấn phẩm của một phiên bản cấu hình mới hoặc rollback đến một phiên bản cũ. Để tuyên truyền thông tin cập nhật mẫu trong thời gian thực, tạo một hàm mà nghe cho các sự kiện mẫu ấn phẩm, và sau đó sử dụng FCM SDK quản trị từ chức năng của bạn để gửi một ping im lặng để các trường hợp ứng dụng client:

exports.pushConfig = functions.remoteConfig.onUpdate(versionMetadata => {
  // Create FCM payload to send data message to PUSH_RC topic.
  const payload = {
    topic: "PUSH_RC",
    data: {
      "CONFIG_STATE": "STALE"
    }
  };
  // Use the Admin SDK to send the ping via FCM.
  return admin.messaging().send(payload).then(resp => {
    console.log(resp);
    return null;
  });
});

Chức năng này đặt ra một CONFIG_STATE tham số, và sau đó gửi mà cho payload dữ liệu của thư FCM cho tất cả khách hàng đăng ký với PUSH_RC chủ đề.

Đặt trạng thái Config từ xa trên máy khách

Các tải trọng dữ liệu hiển thị trong bước trước luôn đặt CONFIG_STATE để STALE trong tùy chọn chia sẻ của ứng dụng. Điều này cho thấy rằng các mẫu từ xa Config đã được lưu trữ trên ứng dụng tại là cũ do việc tạo ra cái mới, mẫu được cập nhật mà ấn kích hoạt chức năng. Cập nhật xử lý thông báo của bạn để kiểm tra cho tình trạng này:

Nhanh

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    if (userInfo.index(forKey: "CONFIG_STATE") != nil) {
        print("Config set to stale")
        UserDefaults.standard.set(true, forKey:"CONFIG_STALE")
    }

    completionHandler(UIBackgroundFetchResult.newData)
}
    

Objective-C

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    if (userInfo[@"CONFIG_STATE"]) {
        NSLog(@"Config set to stale");
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"CONFIG_STALE"];
    }

    completionHandler(UIBackgroundFetchResultNewData);
}
    

Android

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if (remoteMessage.getData().containsKey("CONFIG_STATE")) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        sharedPreferences.edit().putBoolean("CONFIG_STALE", true).apply();
    }
}
    

Fetch các bản cập nhật cấu hình từ xa khi khởi động ứng dụng

Nhanh

func fetchConfig() {
  welcomeLabel.text = remoteConfig[loadingPhraseConfigKey].stringValue

  var expirationDuration = 3600
  // If your app is using developer mode, expirationDuration is set to 0, so each fetch will
  // retrieve values from the service.
  if remoteConfig.configSettings.isDeveloperModeEnabled || UserDefaults.standard.bool(forKey: "CONFIG_STALE") {
    expirationDuration = 0
  }

  remoteConfig.fetch(withExpirationDuration: TimeInterval(expirationDuration)) { (status, error) -> Void in
    if status == .success {
      print("Config fetched!")
      self.remoteConfig.activateFetched()
    } else {
      print("Config not fetched")
      print("Error: \(error?.localizedDescription ?? "No error available.")")
    }
    self.displayWelcome()
  }
}
    

Objective-C

- (void)fetchConfig {
    self.welcomeLabel.text = self.remoteConfig[kLoadingPhraseConfigKey].stringValue;

    long expirationDuration = 3600;
    // If your app is using developer mode, expirationDuration is set to 0, so each fetch will
    // retrieve values from the Remote Config service.
    if (self.remoteConfig.configSettings.isDeveloperModeEnabled || [[NSUserDefaults standardUserDefaults] boolForKey:@"CONFIG_STALE"]) {
        expirationDuration = 0;
    }

    [self.remoteConfig fetchWithExpirationDuration:expirationDuration completionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
        if (status == FIRRemoteConfigFetchStatusSuccess) {
            NSLog(@"Config fetched!");
            [self.remoteConfig activateFetched];
            [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"CONFIG_STALE"];
        } else {
            NSLog(@"Config not fetched");
            NSLog(@"Error %@", error.localizedDescription);
        }
        [self displayWelcome];
    }];
}
    

Android

private void fetchWelcomeMessage() {
    mWelcomeTextView.setText(mFirebaseRemoteConfig.getString("loading_phrase"));

    long cacheExpiration = 43200; // 12 hours in seconds.
    // If your app is using developer mode or cache is stale, cacheExpiration is set to 0,
    // so each fetch will retrieve values from the service.
    if (mFirebaseRemoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled() ||
            mSharedPreferences.getBoolean("CONFIG_STALE", false)) {
        cacheExpiration = 0;
    }

    mFirebaseRemoteConfig.fetch(cacheExpiration)
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(MainActivity.this, "Fetch Succeeded",
                                Toast.LENGTH_SHORT).show();

                        // After config data is successfully fetched, it must be activated before newly fetched
                        // values are returned.
                        mFirebaseRemoteConfig.activateFetched();
                    } else {
                        Toast.makeText(MainActivity.this, "Fetch Failed",
                                Toast.LENGTH_SHORT).show();
                    }
                    mWelcomeTextView.setText(mFirebaseRemoteConfig.getString("welcome_message"));
                }
            });
}
    

Cuối cùng, thêm logic để ứng dụng của bạn để buộc một Config từ xa lấy từ mạng (bỏ qua lưu trữ địa phương) vì CONFIG_STATESTALE . Nếu ứng dụng của bạn nạp từ mạng quá thường xuyên, nó có thể được tăng cường bằng cách căn cứ hỏa lực. Xem tốc độ nhâp .