class FirebaseInstallations implements FirebaseInstallationsApi {

  @NonNull
  @Override
  public Task<String> getId() {
    preConditionChecks();

    // Return cached fid if available.
    String fid = getCacheFid();
    if (fid != null) {
      return Tasks.forResult(fid);
    }

    Task<String> task = addGetIdListener();
    backgroundExecutor.execute(() -> doRegistrationOrRefresh(false));
    return task;
  }

    FirebaseInstallations(
      FirebaseApp firebaseApp,
      @NonNull Provider<UserAgentPublisher> publisher,
      @NonNull Provider<HeartBeatInfo> heartbeatInfo);
    FirebaseInstallations(
      ExecutorService backgroundExecutor,
      FirebaseApp firebaseApp,
      FirebaseInstallationServiceClient serviceClient,
      PersistedInstallation persistedInstallation,
      Utils utils,
      IidStore iidStore,
      RandomFidGenerator fidGenerator);

}