https://firebase.google.com/support/release-notes/admin/java

сто пытаюсь решить заметки об устаревании из своего Java-кода нового Firebase-Admin SDK, код написан в версии 5.3.1, но после обновления версии до 5.5.0 появились примечания об устаревании, вот пример моего код:

С помощьюFirebaseAuth (устарела на:Task, addOnSuccessListener а такжеaddOnFailureListener):

private CompletableFuture<FirebaseToken> getDecryptedTokenCompletableFuture(String firebaseTokenString) {
        CompletableFuture<FirebaseToken> tokenFuture = new CompletableFuture<>();
        Task<FirebaseToken> tokenTask = FirebaseAuth.getInstance(firebaseApp).verifyIdToken(firebaseTokenString);
        tokenTask.addOnSuccessListener(tokenFuture::complete);
        tokenTask.addOnFailureListener(exception -> tokenFuture.completeExceptionally(new AuthorizationException("Failed to verify token", exception)));
        return tokenFuture;
    }

И дляFirebaseDatabase (устарела на:Task, addOnSuccessListener, addOnFailureListener, updateChildren а такжеremoveValue):

public static <T> CompletableFuture<T> toCompletableFuture(Task<T> task) {
    CompletableFuture<T> future = new CompletableFuture<>();
    task.addOnCompleteListener(result -> {
        future.complete(result.getResult());
    }).addOnFailureListener(future::completeExceptionally);
    return future;
}

/**
 * @param updatedParams if null it will removed child
 * @param path          path to update
 * @return void when complete
 */
public CompletableFuture<Void> updateObjectData(Map<String, Object> updatedParams, String path) {
    if (updatedParams == null) {
        return removeObjectData(path);
    }
    logger.debug("Update ObjectData in firebase of ref ({}) with data: {}", path, updatedParams.toString());
    DatabaseReference child = this.getUserDataReference().child(path);
    return toCompletableFuture(child.updateChildren(updatedParams));
}

/**
 * @param path path to of node to remove
 * @return void when complete
 */
public CompletableFuture<Void> removeObjectData(String path) {
    logger.debug("Remove ObjectData in firebase of ref ({})", path);
    DatabaseReference child = this.getUserDataReference().child(path);
    return toCompletableFuture(child.removeValue());
}

Примечание амортизации, скажем, я должен использоватьApiFuture как говорится в примечаниях к выпуску:https://firebase.google.com/support/release-notes/admin/java

И внутри источника, как, например:

  /**
   * Similar to {@link #updateChildrenAsync(Map)} but returns a Task.
   *
   * @param update The paths to update and their new values
   * @return The {@link Task} for this operation.
   * @deprecated Use {@link #updateChildrenAsync(Map)}
   */

А также

/**
 * Represents an asynchronous operation.
 *
 * @param <T> the type of the result of the operation
 * @deprecated {@code Task} has been deprecated in favor of
 *     <a href="https://googleapis.github.io/api-common-java/1.1.0/apidocs/com/google/api/core/ApiFuture.html">{@code ApiFuture}</a>.
 *     For every method x() that returns a {@code Task<T>}, you should be able to find a
 *     corresponding xAsync() method that returns an {@code ApiFuture<T>}.
 */
 Doug Stevenson21 нояб. 2017 г., 20:33
Вы вообще пытались изучить новый API, чтобы узнать, как он работает?
 Al-Mothafar22 нояб. 2017 г., 11:25
@DougStevenson, если вы это имеете в видуfirebase.google.com/docs/database/admin или жеfirebase.google.com/docs/database/android документ кажется все еще для старой версии и еще не обновлен, если вы имеете в видуaddListener(Runnable listener, Executor executor) это то, что я прошу за то, чтоRunnable listener или скажем, как я могу сделатьtoCompletableFuture часть

Ответы на вопрос(2)

ApiFutures класс util, который позволяет добавлять обратные вызовы кApiFuture.

 Al-Mothafar22 нояб. 2017 г., 11:32
Интересно, я проверю это
 Joaquin Iurchuk24 янв. 2018 г., 01:59
Хороший ответ, парень! Спасибо!

пользованием ApiFuture:

ApiFutures.addCallback(FirebaseAuth.getInstance().verifyIdTokenAsync(token),
  new ApiFutureCallback<FirebaseToken>() {
      @Override
      public void onFailure(Throwable t) {
        // TODO handle failure
      }
      @Override
      public void onSuccess(FirebaseToken decodedToken) {
        // TODO handle success
      }
});

Подобный подход может быть использован для вашего кода, который использует FirebaseDatabase.

Хиранья Джаятхилака написал очень подробную статью, объясняющую, как перейти от Задачи к ApiFuture и что за этим стоит:https://medium.com/google-cloud/firebase-asynchronous-operations-with-admin-java-sdk-82ca9b4f6022

Этот код работает для версий 5.4.0 - 5.8.0, самых последних на момент написания этой статьи. Примечания к выпуску доступны здесь:https://firebase.google.com/support/release-notes/admin/java

Ваш ответ на вопрос