> Documentation index: https://firebase.google.com/support/llms.txt

To review release notes for the Firebase console and for other Firebase
platforms and related SDKs, refer to the
[Firebase Release Notes](https://firebase.google.com/support/releases.md.txt).

## Version 9.12.0 - 11 November 2026

- Switched the default `JsonFactory` to `GsonFactory` and deferred default `JsonFactory` initialization until first use. This fixes a `NoClassDefFoundError` when `google-cloud-storage` or `google-http-client-jackson2` is excluded from the classpath.

### App Check

- Added the `FirebaseAppCheck` API with `verifyToken()` and `verifyTokenAsync()` methods for verifying App Check tokens.
- Added support for App Check replay protection, using `VerifyAppCheckTokenOptions` to consume tokens during verification and `VerifyAppCheckTokenResponse.isAlreadyConsumed()` to detect replayed tokens.

### Authentication

- Validated `tenantId` and `providerId` URL path segments and percent-encoded query parameters in Authentication and project management requests.

## Version 9.11.0 - 24 September 2026

### Cloud Messaging

- Migrated the `subscribeToTopic()`, `subscribeToTopicAsync()`, `unsubscribeFromTopic()`, and `unsubscribeFromTopicAsync()` methods in the `FirebaseMessaging` class from the legacy Instance ID API to the Cloud Messaging v1 topic subscription API.
- Added the `subscribeToTopicLegacy()`, `subscribeToTopicLegacyAsync()`, `unsubscribeFromTopicLegacy()`, and `unsubscribeFromTopicLegacyAsync()` methods, which continue to call the legacy Instance ID API. These methods are deprecated and will be removed in a future release.

## Version 9.10.0 - 02 July 2026

### Cloud Messaging

- Deprecated the `token` field in the `Message` class and the `tokens` field in the `MulticastMessage` class. Use the new `fid` and `fids` fields instead.
- Deprecated the `setToken()` method in `Message.Builder` along with the `addToken()` and `addAllTokens()` methods in `MulticastMessage.Builder`.
- Added support for sending messages using Firebase installation IDs (FIDs) via the new `fid` field in the `Message` class and the `fids` field in the `MulticastMessage` class.
- Added the `setFid()` method to `Message.Builder`. Added the `addFid()` and `addAllFids()` methods to `MulticastMessage.Builder`. `MulticastMessage` class supports both `tokens` and `fids`, but `tokens` are deprecated.

## Version 9.9.0 - 14 May 2026

### Firebase Phone Number Verification

- Added a new `FirebasePhoneNumberVerification.verifyToken()` API to verify Firebase Phone Number Verification tokens.

### Remote Config

- Added `exposurePercent` to `ExperimentValue` class to set the percentage of users exposed to an experiment.

### Cloud Messaging

- Added support for `bandwidthConstrainedOk` field in
  `AndroidConfig`. Thanks
  [andrew-signal](https://github.com/andrew-signal) for the
  [contribution](https://github.com/firebase/firebase-admin-java/pull/1145).

- Added support for `restrictedSatelliteOk` field in
  `AndroidConfig`.

## Version 9.8.0 - 25 February, 2026

- Fixed an issue where Apache HTTP response decompression was
  attempted twice.

- Upgraded the dependency on `libraries-bom` to `v26.76.0`. This fixes
  a dependency resolution issue related to the `google-cloud-firestore`
  and `google-cloud-storage` libraries.

### Remote Config

- Added support for Rollouts and Personalization value types in the Remote Config API.

## Version 9.7.1 - 29 January, 2026

### Cloud Messaging

- Fixed an issue where unmapped `TopicManagementResponse` error messages did not provide any actionable debug information. Thanks [JosRoseboom](https://github.com/JosRoseboom) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/1073).

## Version 9.7.0 - 24 September, 2025

### Remote Config

- Added support for configuring Remote Config [server applications](https://firebase.google.com/docs/remote-config/server.md.txt?serverplatform=java).

## Version 9.6.0 - 08 September, 2025

### Authentication

- Updated `ActionCodeSettings` to support `linkDomain`, allowing
  you to customize the Firebase Hosting domain used in email action flows. As
  part of this change, `dynamicLinkDomain` has been deprecated.

- Fixed an issue where Auth error codes were not correctly mapped
  to their corresponding `FirebaseAuthException`.

## Version 9.5.0 - 29 May, 2025

- Updated `ApiClientUtils.getDefaultTransport()` to return a cached instance of `ApacheHttp2Transport`.

### Authentication

- Fixed an issue where string comparisons were being performed using the `==` operator instead of the `.equals()` method. Thanks [yanikapitanov](https://github.com/yanikapitanov) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/1065).

### Cloud Messaging

- Support `proxy` field in FCM `AndroidNotification`. Thanks
  [vitvvv1](https://github.com/vitvvv1) for the
  [contribution](https://github.com/firebase/firebase-admin-java/pull/1084).

- Support `liveActivityToken` field in FCM `ApnsConfig`.

## Version 9.4.3 - 09 January, 2024

- Upgraded the dependency on `libraries-bom` to v26.52.0. This fixes a dependency resolution issue related to the `google-auth-library-credentials` library.

## Version 9.4.2 - 05 December, 2024

- Added metrics headers to outgoing HTTP requests.

## Version 9.4.1 - 15 October, 2024

- Removed the `mockserver-junit-rule-no-dependencies` dependency that was incorrectly scoped.

## Version 9.4.0 - 09 October, 2024

- Added HTTP/2 enabled transport, which is now used as the default HTTP transport.

### Cloud Messaging

- Limited the max thread count in the default `ThreadPoolExecutor` to 100 and removed a deadlock scenario when using `sendEachAsync()` or `sendEachForMulticastAsync()` APIs.

## Version 9.3.0 - 21 May, 2024

- Upgraded the dependency on `libraries-bom` to
  v26.39.0 and higher. This in turns upgrades the dependency on
  `google-cloud-firestore` and `google-cloud-storage` to the latest versions.

- Added the `setWriteTimeout()` method to
  the [`FirebaseOptions.Builder`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt)
  class. These methods enable configuring timeouts
  for outgoing HTTP requests made by the SDK. These settings affect all
  requests except for the requests made to Firebase Realtime Database and
  Cloud Firestore. Thanks
  [TheRittler](https://github.com/TheRittler) for the
  [contribution](https://github.com/firebase/firebase-admin-java/pull/900).

## Version 9.2.0 - 22 June, 2023

### Cloud Messaging

- Added `sendEach()`, `sendEachAsync()`, `sendEachForMulticast()`,
  and `sendEachForMulticastAsync()` APIs.

- `sendAll()`, `sendAllAsync()`, `sendMulticast()`, and
  `sendMulticastAsync()` APIs are now deprecated. Use `sendEach()`,
  `sendEachAsync()`, `sendEachForMulticast()`, and `sendEachForMulticastAsync()`
  APIs instead.

### Cloud Firestore

- Added support for multiple named databases. This feature is currently in public preview.

## Version 9.1.1 - 10 November, 2022

### Authentication

- Fixed an issue in the Authentication API to correctly set the emulator credentials when the `FIREBASE_AUTH_EMULATOR_HOST` environment variable is set to point to the emulator Auth endpoint.

## Version 9.1.0 - 17 October, 2022

### Cloud Firestore

- Upgraded the dependency on `libraries-bom` to v26.1.3 and higher. This in turns upgrades the dependency on `google-cloud-firestore` to the latest version, adding support for `COUNT` queries.

## Version 9.0.0 - 16 June, 2022

- **Breaking change:** Dropped support for Java 7. Developers should
  use Java 8 or higher when deploying the Admin SDK.

- **Breaking change:** Upgraded the dependency on `libraries-bom` to
  v25 and higher. This in turns upgrades the dependencies on
  `google-cloud-firestore` and `google-cloud-storage` to the latest versions.

## Version 8.2.0 - 02 June, 2022

- Deprecated support for Java 7. Instead use Java 8 or higher when deploying the Admin SDK. Java 7 support will be dropped in the next major version.

### Authentication

- Added `Argon2` hashing algorithm support in the `importUsers()` API.

## Version 8.1.0 - 23 September, 2021

### Firebase Remote Config

- Added support for [Parameter value data types](https://firebase.google.com/docs/remote-config/parameters.md.txt#parameter_value_data_types).

## Version 8.0.1 - 13 August, 2021

### Authentication

- When `checkRevoked` is set to `true`, the `verifyIdToken()` and `verifySessionCookie()` APIs now throw an error if the user record is disabled.

## Version 8.0.0 - 30 June, 2021

- Upgraded the dependency on `libraries-bom` to v20 and higher. This in turns upgrades the dependencies on `google-cloud-firestore` and `google-cloud-storage` to latest available.
- The latest `google-cloud-firestore` library contains several new features and breaking API changes. See the [Firestore 2.0.0 release notes](https://github.com/googleapis/java-firestore/releases/tag/v2.0.0) for more details.
- The Admin SDK no longer retries RPCs that fail with HTTP 500 internal server errors. For certain services, retrying on HTTP 500 errors is not idempotent. The SDK will continue to retry RPCs that fail with HTTP 503 unavailable errors.

## Version 7.3.0 - 11 May, 2021

### Authentication

- Added support for [configuring the authorization code flow for
  OIDC providers](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/OidcProviderConfig).
- Added the missing `EMAIL_NOT_FOUND` error code.

## Version 7.2.0 - 28 April, 2021

### Authentication

- The Authentication API now supports running against Firebase emulator suite. Enable the emulator mode by setting the `FIREBASE_AUTH_EMULATOR_HOST` environment variable to point to the emulator Auth endpoint.
- Added a new `getUserByProviderUid()` method to look up user accounts by their providers.
- Added the ability to link a federated ID with the `updateUser()` method.

## Version 7.1.1 - 10 March, 2021

### Cloud Messaging

- Improved support for handling certain non-JSON error responses sent by the FCM backend service.

## Version 7.1.0 - 14 December, 2020

### Firebase Remote Config

- Added support for the Remote Config API. This API enables Firebase developers to [programmatically manage](https://firebase.google.com/docs/remote-config/automate-rc.md.txt) the set of JSON-formatted parameters and conditions known as the Remote Config template.

## Version 7.0.1 - 07 October, 2020

### Authentication

- Migrated the `createCustomToken()` API to use the new IAM credentials API for remote token signing.

## Version 7.0.0 - 19 August, 2020

- This release contains several breaking API changes. See the Java Admin SDK [v7 migration guide](https://firebase.google.com/docs/admin/migrate-java-v7.md.txt) for more details.
- Added a collection of new APIs for implementing advanced error handling logic. See the [error handling guide](https://firebase.google.com/docs/reference/admin/error-handling.md.txt) for more details.
- Added a new `ErrorCode` enum that defines all platform error codes.
- Added a new `IncomingHttpResponse` class that can be used to access the HTTP response object associated with an exception.

### Authentication

- Added a new `AuthErrorCode` enum that defines all Firebase Auth error codes.
- `FirebaseAuthException` now exposes its error code as an `AuthErrorCode` value.
- All implementations of the `UserImportHash` abstract class are now marked `final`.

### Cloud Messaging

- Added a new `MessagingErrorCode` enum that defines all FCM error codes.
- `FirebaseMessagingException` now exposes its error code as a `MessagingErrorCode` value.
- Public constructors of the `Notification` class have been removed. Use `Notification.builder()` to create new instances.

## Version 6.16.0 - 12 August, 2020

### Authentication

- Exposed `createSessionCookie()` and `verifySessionCookie()` methods from the `TenantAwareFirebaseAuth` class. This makes it possible to create and verify tenant-scoped session cookies.

## Version 6.15.0 - 23 July, 2020

- The Admin SDK now imports all Google Cloud Platform dependencies via `com.google.cloud:libraries-bom`.

### Authentication

- Added [`TenantManager`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/multitenancy/TenantManager.md.txt), [`TenantAwareFirebaseAuth`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/multitenancy/TenantAwareFirebaseAuth.md.txt), and [`ProviderConfig`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/ProviderConfig.md.txt) classes for tenant management operations.

## Version 6.14.0 - 17 June, 2020

- Upgraded Cloud Firestore dependency version to 1.34.0.
- Upgraded Cloud Storage dependency version to 1.108.0.
- Upgraded other SDK dependencies. Netty, Google API Client, Google HTTP Client, Google API Common, and JSON libraries that the SDK depends on have been upgraded to more recent versions.

### Cloud Messaging

- Added `FcmOptions` in `MulticastMessage`. Thanks [pavlospt](https://github.com/pavlospt) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/439).
- Added support for `direct_boot_ok` parameter.

## Version 6.13.0 - 14 May, 2020

### Authentication

- Added `getUsers()` and `deleteUsers()` APIs for retrieving and deleting user accounts in bulk.

## Version 6.12.2 - 11 February, 2020

- Project management APIs in the `FirebaseProjectManagement` class now automatically retry operations that fail due to retry-eligible HTTP errors.

### Authentication

- User management APIs in the `FirebaseAuth` class now automatically retry operations that fail due to retry-eligible HTTP errors.

## Version 6.12.1 - 23 January, 2020

### Cloud Messaging

- `AndroidNotification` class now correctly formats the `event_time` field sent to the Cloud Messaging service.

## Version 6.12.0 - 18 December, 2019

- Fixed a bug in date string parsing during error handling. Thanks [sakebook](https://github.com/sakebook) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/327).

### Cloud Firestore

- Upgraded `google-cloud-firestore` dependency version to 1.31.0, which provides support for `IN` queries. Thanks [achuinard](https://github.com/achuinard) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/331).

### Cloud Messaging

- Added `notificationCount` parameter to `AndroidNotification` class. Thanks [knocknarea](https://github.com/knocknarea) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/309).
- The SDK now correctly handles the `THIRD_PARTY_AUTH_ERROR` error code returned by the backend service when sending notifications to iOS and web targets.

## Version 6.11.0 - 30 October, 2019

- Upgraded Cloud Firestore dependency version to 1.21.0.
- Upgraded Cloud Storage dependency version to 1.91.0.

### Cloud Messaging

- Added a `Builder` for constructing `Notification` objects.
- Added a series of new parameters to the `AndroidNotification` class that allow further customization of notifications that target Android devices.
- Number of messages per batch increased to 500.

## Version 6.10.0 - 04 September, 2019

### Cloud Messaging

- Added a new `WebpushFcmOptions` API for configuring the features provided by the FCM SDK for Web. Thanks [kirmerzlikin](https://github.com/kirmerzlikin) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/295).
- Added new APIs for specifying an image URL in notifications.

### Realtime Database

- Developers can now test Realtime Database API calls by directing the SDK traffic to the RTDB emulator. Set the `FIREBASE_DATABASE_EMULATOR_HOST` environment variable to specify the emulator endpoint in `host:port` format.

## Version 6.9.0 - July 18, 2019

- Upgraded Cloud Firestore client version to 1.9.0.
- Upgraded Cloud Storage client version to 1.79.0.
- Upgraded Google API client version to 1.30.1.
- Upgraded Guava dependency version to 26.0-android.

### Firebase Cloud Messaging

- Added [`FcmOptions`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FcmOptions.md.txt), [`AndroidFcmOptions`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/AndroidFcmOptions.md.txt) and [`ApnsFcmOptions`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/ApnsFcmOptions.md.txt) classes for specifying analytics labels for FCM notifications.
- `MulticastMessage.Builder` API now supports specifying device registration tokens as a `Collection` instead of a `List`.

## Version 6.8.1 - April 24, 2019

### Firebase Cloud Messaging

- The SDK now automatically retries FCM API calls failing due to HTTP 500 and 503 errors.

### Realtime Database

- The SDK now throws exceptions with clear error messages when serializing POJOs with non-standard numeric objects.

## Version 6.8.0 - March 14, 2019

### Firebase Cloud Messaging

- A new [`sendMulticast()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FirebaseMessaging.md.txt#sendMulticast(com.google.firebase.messaging.MulticastMessage)) API for sending a message to a list of device registration tokens.
- A new [`sendAll()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FirebaseMessaging.md.txt#sendAll(java.util.List%3Ccom.google.firebase.messaging.Message%3E)) API for sending a list of messages as a single batch.

## Version 6.7.0 - January 9, 2019

- `Firestore` instances initialized by the SDK are now cleaned up when `FirebaseApp.delete()` is called.

### Authentication

- Added the email action link generation APIs for creating links for password reset, email verification, and email link sign-in via `generatePasswordResetLink()`, `generateEmailVerificationLink()` and `generateSignInWithEmailLink()`. See [documentation](https://firebase.google.com/docs/auth/admin/email-action-links.md.txt) for more details and code samples.

### Cloud Messaging

- [`Aps`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/Aps.md.txt) class now supports configuring a critical sound. A new [`CriticalSound`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/CriticalSound.md.txt) class has been introduced for this purpose.
- Added new `setChannelId()` method to the [`AndroidNotification.Builder`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/AndroidNotification.Builder.md.txt) API for setting the Android notification channel ID (new in Android O).

## Version 6.6.0 - November 28, 2018

- A new [`FirebaseProjectManagement`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/projectmanagement/FirebaseProjectManagement.md.txt) API for managing apps in a Firebase project.
- New `listAndroidApps()` and `listIosApps()` methods for listing the existing apps in a project.
- New `createAndroidApp()` and `createIosApp()` methods for creating new apps in a project.
- New [`AndroidApp`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/projectmanagement/AndroidApp.md.txt) and [`IosApp`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/projectmanagement/IosApp.md.txt) APIs for updating individual apps.

### Authentication

- User management APIs in `FirebaseAuth` have been migrated to the new Identity Toolkit REST endpoint. A project ID is now required to use `FirebaseAuth`. Developers using service account credentials or deploying to managed Google runtimes like App Engine will not notice a difference.

### Cloud Messaging

- `ApsAlert` class now supports specyfing a subtitle. Thanks [chemidy](https://github.com/chemidy) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/219).
- Improved error handling by requesting a more verbose error response from the FCM backend service.

## Version 6.5.0 - September 14, 2018

- [`FirebaseOptions.Builder`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt) exposes a new `setFirestoreOptions()` method that can be used to configure the `Firestore` instances initialized by the SDK.
- Upgraded Cloud Firestore client version to 0.61.0-beta.
- Upgraded Cloud Storage client version to 1.43.0.

## Version 6.4.0 - August 28, 2018

### Cloud Messaging

- The [`WebpushNotification`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/WebpushNotification.md.txt) type now provides a `Builder` API, and supports arbitrary key-value pairs in its payload.

## Version 6.3.0 - July 17, 2018

- The Admin SDK can now read the Firebase/Google Cloud Platform project ID from both `GCLOUD_PROJECT` and `GOOGLE_CLOUD_PROJECT` environment variables.

### Authentication

- The Admin SDK can now create custom tokens without being initialized with service account credentials.
- The SDK now provides a [`setServiceAccountId()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt#setServiceAccountId(java.lang.String)) option specifier, which can be used to set just the client email of a service account.
- When deployed in an environment managed by Google (e.g. Google App Engine), the SDK can auto discover a service account ID without any explicit configuration.

## Version 6.2.0 - May 31, 2018

### Authentication

- A new [`importUsers()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#importUsers(java.util.List%3Ccom.google.firebase.auth.ImportUserRecord%3E,%20com.google.firebase.auth.UserImportOptions)) method for [importing users](https://firebase.google.com/docs/auth/admin/import-users.md.txt) to Firebase Auth in bulk.

## Version 6.1.0 - May 15, 2018

### Authentication

- Deprecated the incorrectly named `setCustomClaims()` method. Developers should instead use the [`setCustomUserClaims()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#setCustomUserClaims(java.lang.String,%20java.util.Map%3Cjava.lang.String,%20java.lang.Object%3E)) method.

## Version 6.0.0 - May 8, 2018

- `FirebaseAuth`, `FirebaseMessaging`, and `FirebaseInstanceId` interfaces now expose a set of blocking methods. Each operation has blocking and asynchronous versions.
- Removed the deprecated `FirebaseCredential` interface.
- Removed the deprecated `Task` interface along with the `com.google.firebase.tasks` package.
- Dropped support for App Engine's Java 7 runtime. Developers are advised to use the Admin SDK with Java 8 when deploying to App Engine.
- Removed the deprecated `FirebaseDatabase.setLogLevel()` API and
  related logging utilities. Developers should use SLF4J to configure
  logging directly.

  For more detail on these breaking changes, see the
  [Admin SDK Migration Guide](https://firebase.google.com/docs/admin/migrate-admin).

## Version 5.11.0 - April 25, 2018

- Upgraded the Google Cloud Firestore dependency version to 0.45.0-beta.
- Upgraded the Google Cloud Storage dependency version to 1.27.0.
- Upgraded the Netty dependency version to 4.1.22.

### Authentication

- A new [`createSessionCookieAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#createSessionCookieAsync(java.lang.String,%20com.google.firebase.auth.SessionCookieOptions)) method for creating a session cookie from a Firebase ID token.
- A new [`verifySessionCookieAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#verifySessionCookieAsync(java.lang.String)) method for validating a given session cookie string.

## Version 5.10.0 - April 17, 2018

### Initialization

- Added the `setConnectTimeout()` and `setReadTimeout()` methods to the [`FirebaseOptions.Builder`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt) class. These methods enable configuring timeouts for outgoing HTTP requests made by the SDK. These settings affect all requests except for the requests made to Firebase Realtime Database and Cloud Firestore.

### Cloud Messaging

- Added the `setMutableContent()` method to the [`Aps.Builder`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/Aps.Builder.md.txt) class. This can be used to set the `mutable-content` property when sending FCM messages to APNs targets.
- Added support for specifying arbitrary key-value fields in the `Aps.Builder` class.
- Improved error handling in the [`FirebaseMessaging`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FirebaseMessaging.md.txt) API.

### Authentication

- The [`FirebaseAuth`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt) API now uses the `HttpTransport` configured via `FirebaseOptions` to fetch public key certificates when verifying ID tokens. Thanks [xbauquet](https://github.com/xbauquet) for the [contribution](https://github.com/firebase/firebase-admin-java/pull/151).

## Version 5.9.0 - February 14, 2018

### Cloud Messaging

- A new [`FirebaseMessaging`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FirebaseMessaging.md.txt) API for sending FCM messages and managing topic subscriptions.
- A new [`sendAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FirebaseMessaging.md.txt#sendAsync(com.google.firebase.messaging.Message)) method for sending FCM messages.
- A new [`subscribeToTopicAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FirebaseMessaging.md.txt#subscribeToTopicAsync(java.util.List%3Cjava.lang.String%3E,%20java.lang.String)) method for subscribing a list of device registration tokens to a FCM topic.
- A new [`unsubscribeFromTopicAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FirebaseMessaging.md.txt#unsubscribeFromTopicAsync(java.util.List%3Cjava.lang.String%3E,%20java.lang.String)) method for unsubscribing a list of device registration tokens from a FCM topic.

### Authentication

- The [`verifyIdTokenAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#verifyIdTokenAsync(java.lang.String,%20boolean)) method now has an overload that accepts a boolean `checkRevoked` parameter. When `true`, an additional check is performed to see whether the token has been revoked.
- A new [`revokeRefreshTokensAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#revokeRefreshTokensAsync(java.lang.String)) mathod to invalidate all tokens issued to a user.
- The `UserRecord` class introduces a new [`getTokensValidAfterTimestamp()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/UserRecord.md.txt#getTokensValidAfterTimestamp()) method to return the time before which tokens are not valid.

### Realtime Database

- Exceptions thrown by database event handlers are now logged.

### Cloud Firestore

- Upgraded the Cloud Firestore client to the latest available version.

### Initialization

- The [`FirebaseOptions.Builder.setStorageBucket()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt#setStorageBucket(java.lang.String)) method now throws a clear exception when invoked with a bucket URL instead of the name.
- Implemented a fix for a potential Guava version conflict which was causing an `IllegalStateException` (precondition failure) in some environments.

## Version 5.8.0 - January 11, 2018

### Initialization

- The [`FirebaseApp.initializeApp()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseApp.md.txt#initializeApp()) method now provides an overload that does not require any arguments. This initializes an app using Google Application Default Credentials, and other [`FirebaseOptions`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.md.txt) loaded from the `FIREBASE_CONFIG` environment variable.

### Authentication

- Improved error handling in user management APIs in the [`FirebaseAuth`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt) class. These operations now throw exceptions with well-defined [error codes](https://firebase.google.com/docs/auth/admin/errors.md.txt).

## Realtime Database

- The SDK now serializes large whole double values as longs when appropriate.

## Version 5.7.0 - December 21, 2017

- A new [`FirebaseInstanceId`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/iid/FirebaseInstanceId.md.txt) API that facilitates deleting instance IDs and associated user data from Firebase projects.

### Authentication

- No longer using `org.json` dependency in Authentication APIs, which makes it easier to use the API in environments with conflicting JSON libraries.

## Version 5.6.0 - December 08, 2017

- Upgraded the version of Google API Common dependency to the latest (1.2.0).

### Authentication

- Added the [`listUsersAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#listUsersAsync(java.lang.String)) method to the [`FirebaseAuth`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt) class. This method enables listing or iterating over all user accounts in a Firebase project.
- Added the [`setCustomUserClaimsAsync()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#setCustomUserClaimsAsync(java.lang.String,%20java.util.Map%3Cjava.lang.String,%20java.lang.Object%3E)) method to the [`FirebaseAuth`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt) class. This method enables setting custom claims on a Firebase user. The custom claims can be accessed via that user's ID token.

### Realtime Database

- Re-implemented the WebSocket communication layer of the Realtime Database client using Netty.

## Version 5.5.0 - November 07, 2017

- A new [`FirestoreClient`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/cloud/FirestoreClient.md.txt) API that enables access to [Cloud Firestore](https://firebase.google.com/docs/firestore.md.txt) databases.

### Realtime Database

- Ensured graceful termination of database worker threads upon callng [`FirebaseApp.delete()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseApp.md.txt#delete()).

## Version 5.4.0 - October 11, 2017

- A new [`ThreadManager`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/ThreadManager.md.txt) API that can be used to specify the thread pool and the `ThreadFactory` that should be used by the SDK.
- All APIs that support asynchronous operations now return an [`ApiFuture`](https://googleapis.github.io/api-common-java/1.1.0/apidocs/com/google/api/core/ApiFuture.html). The old [`Task`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/tasks/Task) API has been deprecated. For each method `x()` that returns a `Task`, a new `xAsync()` method that returns an `ApiFuture` has been introduced.
- The SDK now guarantees the graceful termination of all started threads. In most environments, the SDK will use daemons for all background activities. The developer can also initiate a graceful termination of threads by calling [`FirebaseApp.delete()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseApp.md.txt#delete()).

### Initialization

- [`FirebaseOptions`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.md.txt) can now be initialized with [`GoogleCredentials`](http://googleapis.github.io/google-auth-library-java/releases/0.7.1/apidocs/com/google/auth/oauth2/GoogleCredentials.html). This is the new recommended way to specify credentials when initializing the SDK. The old [`FirebaseCredential`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredential) and [`FirebaseCredentials`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredentials) APIs have been deprecated.

## Version 5.3.1 - September 13, 2017

### Authentication

- Throwing an accurate and more detailed error from [`verifyIdToken()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#verifyIdToken(java.lang.String)) in the event of a low-level exception.

### Realtime Database

- Proper handling and logging of exceptions thrown by the [`onComplete()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/database/Transaction.Handler.md.txt#onComplete(com.google.firebase.database.DatabaseError,%20boolean,%20com.google.firebase.database.DataSnapshot)) event of transaction handlers.

## Version 5.3.0 - August 14, 2017

- A new [Cloud Storage API](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/cloud/StorageClient.md.txt) that facilitates accessing Google Cloud Storage buckets using the [`google-cloud-storage`](http://googlecloudplatform.github.io/google-cloud-java/google-cloud-clients/apidocs/com/google/cloud/storage/Storage.html) library.
- Integrated with the [SLF4J](https://www.slf4j.org/) library for all logging purposes.

### Authentication

- Added the method [`getUserByPhoneNumber()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#getUserByPhoneNumber(java.lang.String)) to the [`FirebaseAuth`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt) interface. This method enables retrieving user profile information by a phone number.
- [`CreateRequest`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/UserRecord.CreateRequest.md.txt) and [`UpdateRequest`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/UserRecord.UpdateRequest.md.txt) types now provide setters for specifying a phone number, which can be used to create users with a phone number field and/or update the phone number associated with a user.
- Added the `getPhoneNumber()` method to [`UserRecord`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/UserRecord.md.txt), which exposes the phone number associated with a user account.
- Added the `getPhoneNumber()` method to [`UserInfo`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/UserInfo.md.txt), which exposes the phone number associated with a user account by a linked identity provider.

### Realtime Database

- Deprecated the `FirebaseDatabase.setLogLevel()` method. Use SLF4J to configure logging.
- Logging a detailed error when the database client fails to authenticate with the backend Firebase servers.

## Version 5.2.0 - June 14, 2017

- New factory methods in the [`FirebaseCredentials`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredentials) class that accept `HttpTransport` and `JsonFactory` arguments. These settings are used when the credentials make HTTP calls to obtain OAuth2 access tokens.
- New `setHttpTransport()` and `setJsonFactory()` methods in the [`FirebaseOptions`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.md.txt) class. These settings are used by all services of the SDK except `FirebaseDatabase`.

## Version 5.1.0 - June 07, 2017

### Authentication

- A new user management API that allows provisioning and managing Firebase users from Java applications. This API adds `getUser()`, `getUserByEmail()`, `createUser()`, `updateUser()` and `deleteUser()` methods to the [`FirebaseAuth`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt) interface.

## Version 5.0.1 - June 01, 2017

### Realtime Database

- Fixed a database API thread leak that made the SDK unstable when running in the Google App Engine environment.

## Version 5.0.0 - May 17, 2017

### Initialization

- Factory methods in [`FirebaseCredentials`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredentials) class can now throw `IOExceptions`, providing fail-fast semantics while facilitating simpler error handling.
- The deprecated `setServiceAccount()` method has been removed from the [`FirebaseOptions.Builder`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt) class in favor of the `setCredential()` method.
- Trying to initialize the SDK without setting a credential now results in an exception.
- The [`FirebaseCredential`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredential) interface now returns a new [`GoogleOAuthAccessToken`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/GoogleOAuthAccessToken.md.txt) type, which encapsulates both token string and its expiry time.

## Version 4.1.7 - April 20, 2017

- Introducing a new `FirebaseApp.delete()` method, which can
  be used to gracefully shut down app instances. All app invocations after a
  call to `delete()` will throw exceptions. Deleted app instances can also be
  re-initialized with the same name if necessary.

- Upgraded SDK dependencies. Guava, Google API Client, and JSON
  libraries that the SDK depends on have been upgraded to more recent versions.

## Version 4.1.6 - April 04, 2017

### Realtime Database

- Updated the SDK to select the correct thread pool implementation when running on a regular JVM with App Engine libraries in the `classpath`.

## Version 4.1.5 - March 28, 2017

### Realtime Database

- Fixed the invalid SDK version constant in the `FirebaseDatabase` class that was released in v4.1.4.

## Version 4.1.4 - March 28, 2017

### Authentication

- Updated the SDK to periodically refresh the OAuth access token internally used by `FirebaseApp`. This reduces the number of authentication failures encountered at runtime by various SDK components (e.g. Realtime Database) to nearly zero. This feature is active by default when running in typical Java environments, or the Google App Engine environment with background threads support.

## Version 4.1.3 - March 7, 2017

### Realtime Database

- Updated Realtime Database to properly swap out the ID token used to authenticate the underlying websocket when a new ID token is generated. The websocket connection is still disconnected and reconnected every hour when an ID token expires unless you manually call [`getAccessToken`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredential#getAccessToken(boolean)) on the `FirebaseCredential` used to authenticate the SDK. In a future release, the SDK will proactively refresh ID tokens automatically before they expire.

## Version 4.1.2 - February 14, 2017

### Initialization

- Updated `initializeApp()` to synchronously read from an `InputStream` to avoid issues with closing the stream after initializing the SDK.
- Improved confusing error messages when initializing the SDK with a `null` or malformed `InputStream`.

## Version 4.1.1 - February 1, 2017

### Authentication

- Fixed a dependency issue which caused the [`verifyIdToken()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#verifyIdToken(java.lang.String)) method to always throw an exception.

## Version 4.1.0 - January 24, 2017

### Initialization

- The [`FirebaseOptions.Builder.setServiceAccount()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt#setServiceAccount(java.io.InputStream)) method has been deprecated in favor of a new [`FirebaseOptions.Builder.setCredential()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt#setCredential(com.google.firebase.auth.FirebaseCredential)) method. See [Initialize the SDK](https://firebase.google.com/docs/admin/setup.md.txt#initialize_the_sdk) for usage instructions.
- The new [`FirebaseCredential.fromCertificate()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredentials#fromCertificate(java.io.InputStream)) method allows you to authenticate the SDK with a service account certificate file.
- The new [`FirebaseCredential.fromRefreshToken()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredentials#fromRefreshToken(java.io.InputStream)) method allows you to authenticate the SDK with a Google OAuth2 refresh token.
- The new [`FirebaseCredential.applicationDefault()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseCredentials#applicationDefault()) method allows you to authenticate the SDK with Google Application Default Credentials.

### Authentication

- The [`verifyIdToken()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#verifyIdToken(java.lang.String)) method is broken in this release and throws an exception due to an incorrect dependency. This was fixed in version [`4.1.1`](https://firebase.google.com/support/release-notes/admin/java.md.txt#4.1.1).

## Version 4.0.4 - January 17, 2017

- Fixed issue which caused threads to be terminated in Google App Engine after 24 hours, rendering the SDK unresponsive.
- Fixed issues which caused asynchronous task execution to fail on automatically-scaled Google App Engine instances.

### Authentication

- Improved error messages and added App Engine support for the [`verifyIdToken()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#verifyIdToken(java.lang.String)) method.

### Realtime Database

- Fixed a race condition which could occur when new writes are added while the connection is being closed.

## Version 4.0.3 - December 6, 2016

### Initialization

- Fixed an issue that caused a `null` input to the [`setDatabaseAuthVariableOverride()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseOptions.Builder.md.txt#setDatabaseAuthVariableOverride(java.util.Map%3Cjava.lang.String,%20java.lang.Object%3E)) method to be ignored, which caused the app to still have full admin access. Now, passing this value has the expected behavior: the app has unauthenticated access to the Realtime Database, and behaves as if no user is logged into the app.

### Realtime Database

- Use of the [`updateChildren()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/database/DatabaseReference.md.txt#updateChildren(java.util.Map%3Cjava.lang.String,%20java.lang.Object%3E)) method now only cancels transactions that are directly included in the updated paths (not transactions in adjacent paths). For example, an update at `/move` for a child node `walk` will cancel transactions at `/`, `/move`, and `/move/walk` and in any child nodes under `/move/walk`. But, it will no longer cancel transactions at sibling nodes, such as `/move/run`.

## Version 4.0.2 - November 15, 2016

- This update restores Java 7 compatibility for the Admin Java SDK.

## Version 4.0.1 - November 8, 2016

- Fixed an issue with a missing dependency in the [`4.0.0`](https://firebase.google.com/support/release-notes/admin/java.md.txt#4.0.0) JAR which caused the Database API to not work.
- This version was compiled for Java 8 and does not support Java 7. This was fixed in version [`4.0.2`](https://firebase.google.com/support/release-notes/admin/java.md.txt#4.0.2).

## Version 4.0.0 - November 7, 2016

- The Admin Java SDK (available on Maven as `firebase-admin`) replaces the pre-existing `firebase-server-sdk` Maven package, which is now deprecated. See [Add the Firebase Admin SDK to your Server](https://firebase.google.com/docs/admin/setup.md.txt) to get started.
- This version is missing a dependency which causes the Database API to not work. This was fixed in version [`4.0.1`](https://firebase.google.com/support/release-notes/admin/java.md.txt#4.0.1).
- This version was compiled for Java 8 and does not support Java 7. This was fixed in version [`4.0.2`](https://firebase.google.com/support/release-notes/admin/java.md.txt#4.0.2).

### Authentication

- The [`createCustomToken()`](https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/auth/FirebaseAuth.md.txt#createCustomToken(java.lang.String)) method is now asynchronous, returning a `Task<String>` instead of a `String`.