nymea-app/3rdParty/android/firebase_cpp_sdk
Michael Zanetti 910171dcbc Fix firebase libs for android x86 2022-12-15 14:01:29 +01:00
..
Android Import firebase cpp sdk to get rid of external dependency 2021-01-04 16:45:59 +01:00
include Import firebase cpp sdk to get rid of external dependency 2021-01-04 16:45:59 +01:00
libs/android Fix firebase libs for android x86 2022-12-15 14:01:29 +01:00
readme.md Import firebase cpp sdk to get rid of external dependency 2021-01-04 16:45:59 +01:00

readme.md

Firebase C++ SDK

The Firebase C++ SDK provides C++ interfaces for the following Firebase services on iOS and Android:

  • AdMob
  • Firebase Analytics
  • Firebase Authentication
  • Firebase Cloud Messaging
  • Firebase Dynamic Links
  • Firebase Functions
  • Firebase Instance ID
  • Firebase Realtime Database
  • Firebase Remote Config
  • Firebase Storage

Desktop Workflow Implementations

The Firebase C++ SDK includes desktop workflow support for the following subset of Firebase features, enabling their use on Windows, OS X, and Linux:

  • Firebase Authentication
  • Firebase Functions
  • Firebase Remote Config
  • Firebase Realtime Database*
  • Firebase Storage

(* See Known Issues in the Release Notes below.)

This is a Beta feature, and is intended for workflow use only during the development of your app, not for publicly shipping code.

Stub Implementations

Stub (non-functional) implementations of the remaining libraries are provided for convenience when building for Windows, Mac OS, and Linux so that you don't need to conditionally compile code when also targeting the desktop.

Directory Structure

The following table provides an overview of the Firebase C++ SDK directory structure.

Directories Contents
include C++ headers
frameworks/ios/ARCH iOS frameworks (compiled against libc++)
A multi-architecture framework is
provided in the universal directory.
libs/ios/ARCH iOS static libraries (compiled against
libc++)
Multi-architecture libraries are
provided in the universal directory.
libs/android/ARCH/STL Android (GCC 4.8+ compatible) static
libraries for each architecture and STL
variant.
STL variants available:
* c++: LLVM libc++ runtime (recommended)
* gnustl: GNU STL
* stlport: STLport runtime
More information can be found in the
NDK C++ Helper Runtimes
documentation.
Desktop Implementations
libs/darwin OS X static libraries (desktop or stub
implementations, compiled against libc++)
frameworks/darwin OS X frameworks (desktop or stub
implementations, compiled against libc++)
libs/linux Linux static libraries (desktop or stub
implementations, GCC 4.8+, libc++).
libs/windows Windows static libraries (desktop or stub
implementations, MSVC 2015+)

Library / Framework Dependencies

Each feature has dependencies upon libraries in this SDK and components distributed as part of the core Firebase iOS SDK and Android SDK.

Android Dependencies

Feature Required Libraries and Gradle Packages
Firebase AdMob libfirebase_admob.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-ads:17.2.1
(Maven package)
com.google.android.gms:play-services-measurement-sdk-api:16.5.0
(Maven package)
Firebase Analytics libfirebase_analytics.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
Firebase Authentication libfirebase_auth.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-auth:17.0.0
(Maven package)
Firebase Dynamic Links libfirebase_dynamic_links.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-dynamic-links:17.0.0
(Maven package)
Firebase Functions libfirebase_functions
libfirebase_auth.a (optional)
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-functions:17.0.0
(Maven package)
com.google.firebase:firebase-auth:17.0.0
(Maven package)
Firebase Instance ID libfirebase_instance_id.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-iid:18.0.0
(Maven package)
Firebase Messaging libfirebase_messaging.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-messaging:18.0.0
(Maven package)
libmessaging_java.jar (Android service)
Firebase Realtime Database libfirebase_database.a
libfirebase_auth.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-database:17.0.0
(Maven package)
com.google.firebase:firebase-auth:17.0.0
(Maven package)
Firebase Remote Config libfirebase_remote_config.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-config:17.0.0
(Maven package)
Firebase Storage libfirebase_storage.a
libfirebase_auth.a
libfirebase_app.a
com.google.firebase:firebase-analytics:16.5.0
(Maven package)
com.google.firebase:firebase-storage:17.0.0
(Maven package)
com.google.firebase:firebase-auth:17.0.0
(Maven package)

Important: Each version of the Firebase C++ SDK supports specific Firebase Android SDK module versions. Please ensure that you reference the correct version of each Maven package listed above in your Gradle file.

iOS Dependencies

iOS users can include either frameworks or static libraries depending upon their preferred build environment.

Frameworks

Feature Required Frameworks and Cocoapods
Firebase AdMob firebase_admob.framework
firebase.framework
Firebase/AdMob Cocoapod (6.1.0)
Firebase/Analytics Cocoapod (6.1.0)
Firebase Analytics firebase_analytics.framework
firebase.framework
Firebase/Analytics Cocoapod (6.1.0)
Firebase Authentication firebase_auth.framework
firebase.framework
Firebase/Auth Cocoapod (6.1.0)
Firebase Dynamic Links firebase_dynamic_links.framework
firebase.framework
Firebase/DynamicLinks Cocoapod (6.1.0)
Firebase Functions firebase_functions.framework
firebase_auth.framework (optional)
firebase.framework
Firebase/Functions Cocoapod (6.1.0)
Firebase/Auth Cocoapod (6.1.0)
Firebase Instance ID firebase_instance_id.framework
firebase.framework
FirebaseInstanceID Cocoapod (4.1.0)
Firebase Cloud Messaging firebase_messaging.framework
firebase.framework
Firebase/Messaging Cocoapod (6.1.0)
Firebase Realtime Database firebase_database.framework
firebase_auth.framework
firebase.framework
Firebase/Database Cocoapod (6.1.0)
Firebase/Auth Cocoapod (6.1.0)
Firebase Remote Config firebase_remote_config.framework
firebase.framework
Firebase/RemoteConfig Cocoapod (6.1.0)
Firebase Storage firebase_storage.framework
firebase_auth.framework
firebase.framework
Firebase/Storage Cocoapod (6.1.0)
Firebase/Auth Cocoapod (6.1.0)

Important: Each version of the Firebase C++ SDK supports a specific version of the Firebase iOS SDK. Please ensure that you reference the Cocoapod versions listed above.

Libraries

If you prefer to link against static libraries instead of frameworks (see the previous section) the following table describes the libraries and Cocoapods required for each SDK feature.

Feature Required Libraries and Cocoapods
Firebase AdMob libfirebase_admob.a
libfirebase_app.a
Firebase/AdMob Cocoapod (6.1.0)
Firebase/Analytics Cocoapod (6.1.0)
Firebase Analytics libfirebase_analytics.a
libfirebase_app.a
Firebase/Analytics Cocoapod (6.1.0)
Firebase Authentication libfirebase_auth.a
libfirebase_app.a
Firebase/Auth Cocoapod (6.1.0)
Firebase Dynamic Links libfirebase_dynamic_links.a
libfirebase_app.a
Firebase/DynamicLinks Cocoapod (6.1.0)
Firebase Functions libfirebase_functions.a
libfirebase_app.a
libfirebase_auth.a (optional)
Firebase/Functions Cocoapod (6.1.0)
Firebase/Auth Cocoapod (6.1.0)
Firebase Instance ID libfirebase_instance_id.a
libfirebase_app.a
FirebaseInstanceID Cocoapod (4.1.0)
Firebase Cloud Messaging libfirebase_messaging.a
libfirebase_app.a
Firebase/CloudMessaging Cocoapod (6.1.0)
Firebase Realtime Database libfirebase_database.a
libfirebase_app.a
libfirebase_auth.a
Firebase/Database Cocoapod (6.1.0)
Firebase/Auth Cocoapod (6.1.0)
Firebase Remote Config libfirebase_remote_config.a
libfirebase_app.a
Firebase/RemoteConfig Cocoapod (6.1.0)
Firebase Storage libfirebase_storage.a
libfirebase_app.a
libfirebase_auth.a
Firebase/Storage Cocoapod (6.1.0)
Firebase/Auth Cocoapod (6.1.0)

Important: Each version of the Firebase C++ SDK supports a specific version of the Firebase iOS SDK. Please ensure that you reference the Cocoapod versions listed above.

Desktop Implementation Dependencies

Linux libraries

For Linux, library versions are provided for 32-bit (i386) and 64-bit (x86_64) platforms.

Feature Required Libraries
Firebase Authentication libfirebase_auth.a
libfirebase_app.a
Firebase Functions libfirebase_functions.a
libfirebase_auth.a (optional)
libfirebase_app.a
Firebase Realtime Database libfirebase_database.a
libfirebase_auth.a
libfirebase_app.a
Firebase Remote Config libfirebase_remote_config.a
libfirebase_app.a
Firebase Storage libfirebase_storage.a
libfirebase_auth.a
libfirebase_app.a
Firebase AdMob (stub) libfirebase_admob.a
libfirebase_app.a
Firebase Analytics (stub) libfirebase_analytics.a
libfirebase_app.a
Firebase Dynamic Links (stub) libfirebase_dynamic_links.a
libfirebase_app.a
Firebase Instance ID (stub) libfirebase_instance_id.a
libfirebase_app.a
Firebase Cloud Messaging (stub) libfirebase_messaging.a
libfirebase_app.a

The provided libraries have been tested using GCC 4.8.0, GCC 7.2.0, and Clang 5.0 on Ubuntu. When building C++ desktop apps on Linux, you will need to link the pthread system library (consult your compiler documentation for more information).

OS X libraries

For OS X (Darwin), library versions are only provided for the 64-bit (x86_64) platform. See the table above (in the "Linux libraries" section) for the list of library dependencies. Frameworks are also provided for convenience.

Feature Required Frameworks
Firebase Authentication firebase_auth.framework
firebase.framework
Firebase Functions firebase_functions.framework
firebase_auth.framework (optional)
firebase.framework
Firebase Realtime Database firebase_database.framework
firebase_auth.framework
firebase.framework
Firebase Remote Config firebase_remote_config.framework
firebase.framework
Firebase Storage firebase_storage.framework
firebase_auth.framework
firebase.framework
Firebase AdMob (stub) firebase_admob.framework
firebase.framework
Firebase Analytics (stub) firebase_analytics.framework
firebase.frameworkb
Firebase Dynamic Links (stub) firebase_dynamic_links.framework
firebase.framework
Firebase Instance ID (stub) firebase_instance_id.framework
firebase.framework
Firebase Cloud Messaging (stub) firebase_messaging.framework
firebase.framework

The provided libraries have been tested using Xcode 9.4.1. When building C++ desktop apps on OS X, you will need to link the pthread system library, as well as the CoreFoundation, Foundation, GSS, and Security OS X system frameworks (consult your compiler documentation for more information).

Windows libraries

For Windows, library versions are provided depending on whether your project is building in 32-bit (x86) or 64-bit (x64) mode, which Windows runtime environment you are using (Multithreaded /MT or Multithreaded DLL /MD), and whether you are targeting Release or Debug.

Feature Required Libraries and Gradle Packages
Firebase Authentication firebase_auth.lib
firebase_app.lib
Firebase Functions firebase_functions.lib
firebase_auth.lib (optional)
firebase_app.lib
Firebase Realtime Database firebase_database.lib
firebase_auth.lib
firebase_app.lib
Firebase Remote Config firebase_remote_config.lib
firebase_app.lib
Firebase Storage firebase_storage.lib
firebase_auth.lib
firebase_app.lib
Firebase AdMob (stub) firebase_admob.lib
firebase_app.lib
Firebase Analytics (stub) firebase_analytics.lib
firebase_app.lib
Firebase Dynamic Links (stub) firebase_dynamic_links.lib
firebase_app.lib
Firebase Instance ID (stub) firebase_instance_id.lib
firebase_app.lib
Firebase Cloud Messaging (stub) firebase_messaging.lib
firebase_app.lib

The provided libraries have been tested using Visual Studio 2015 and 2017. When building C++ desktop apps on Windows, you will need to link the following Windows SDK libraries (consult your compiler documentation for more information):

Firebase C++ Library Windows SDK library dependencies
Authentication advapi32, ws2_32, crypt32
Functions `advapi32, ws2_32, crypt32, rpcrt4, ole32
Realtime Database advapi32, ws2_32, crypt32, iphlpapi, psapi, userenv
Remote Config `advapi32, ws2_32, crypt32, rpcrt4, ole32
Storage advapi32, ws2_32, crypt32

Getting Started

See our setup guide to get started and download the prebuilt version of the Firebase C++ SDK.

Source Code

The Firebase C++ SDK is open source. You can find the source code (and information about building it) at github.com/firebase/firebase-cpp-sdk.

Platform Notes

iOS Method Swizzling

On iOS, some application events (such as opening URLs and receiving notifications) require your application delegate to implement specific methods. For example, receiving a notification may require your application delegate to implement application:didReceiveRemoteNotification:. Because each iOS application has its own app delegate, Firebase uses method swizzling, which allows the replacement of one method with another, to attach its own handlers in addition to any you may have implemented.

The Firebase Cloud Messaging library needs to attach handlers to the application delegate using method swizzling. If you are using these libraries, at load time, Firebase will identify your AppDelegate class and swizzle the required methods onto it, chaining a call back to your existing method implementation.

Custom Android Build Systems

We currently provide generate_xml_from_google_services_json.py to convert google-services.json to .xml resources to be included in an Android application. This script applies the same transformation that the Google Play Services Gradle plug-in performs when building Android applications. Users who don't use Gradle (e.g ndk-build, makefiles, Visual Studio etc.) can use this script to automate the generation of string resources.

ProGuard on Android

Many Android build systems use ProGuard for builds in Release mode to shrink application sizes and protect Java source code. If you use ProGuard, you will need to add the files in libs/android/*.pro corresponding to the Firebase C++ libraries you are using to your ProGuard configuration.

For example, with Gradle, build.gradle would contain:

  android {
    [...other stuff...]
    buildTypes {
      release {
        minifyEnabled true
        proguardFile getDefaultProguardFile('your-project-proguard-config.txt')
        proguardFile file(project.ext.firebase_cpp_sdk_dir + "/libs/android/app.pro")
        proguardFile file(project.ext.firebase_cpp_sdk_dir + "/libs/android/analytics.pro")
        [...and so on, for each Firebase C++ library you are using.]
      }
    }
  }

Requiring Google Play services on Android

Many Firebase C++ libraries require Google Play services on the user's Android device. If a Firebase C++ library returns kInitResultFailedMissingDependency on initialization, it means Google Play services is not available on the device (it needs to be updated, reactivated, permissions fixed, etc.) and that Firebase library cannot be used until the situation is corrected.

You can find out why Google Play services is unavailable (and try to fix it) by using the functions in google_play_services/availability.h.

Optionally, you can use ModuleInitializer to initialize one or more Firebase libraries, which will handle prompting the user to update Google Play services if required.

Note: Some libraries do not require Google Play services and don't return any initialization status. These can be used without Google Play services. The table below summarizes whether Google Play services is required by each Firebase C++ library.

Firebase C++ Library Google Play services required?
Analytics Not required
AdMob Not required (usually; see below)
Cloud Messaging Required
Auth Required
Dynamic Links Required
Functions Required
Instance ID Required
Realtime Database Required
Remote Config Required
Storage Required

A note on AdMob and Google Play services

Most versions of the Google Mobile Ads SDK for Android can work properly without Google Play services. However, if you are using the com.google.android.gms:play-services-ads-lite dependency instead of the standard com.google.firebase:firebase-ads dependency, Google Play services WILL be required in your specific case.

AdMob initialization will only return kInitResultFailedMissingDependency when Google Play services is unavailable AND you are using com.google.android.gms:play-services-ads-lite.

Desktop project setup

To use desktop workflow support, you must have an Android or iOS project set up in the Firebase console.

If you have an Android project, you can simply use the google-services.json file on desktop.

If you have an iOS project and don't wish to create an Android project, you can use the included Python script generate_xml_from_google_services_json.py --plist to convert your GoogleService-Info.plist file into a google-services-desktop.json file.

By default, when your app initializes, Firebase will look for a file named google-services.json or google-services-desktop.json in the current directory. Ensure that one of these files is present, or call AppOptions::LoadFromJsonConfig() before initializing Firebase to specify your JSON configuration data directly.

Note on Firebase C++ desktop support

Firebase C++ SDK desktop support is a Beta feature, and is intended for workflow use only during the development of your app, not for publicly shipping code.

Release Notes

6.1.0

  • Overview
    • Added Auth credential persistence on Desktop, fixed issues in Auth and Database, and added additional information to Messaging notifications.
  • Changes
    • Auth (Desktop): User's credentials will now persist between sessions. See the documentation for more information.
    • Auth (Desktop): As part of the above change, if you call current_user() immediately after creating the Auth instance, it will block until the saved user's state is finished loading.
    • Auth (Desktop): Fixed an issue where Database/Functions/Storage might not use the latest auth token immediately after sign-in.
    • Auth: Fixed an issue where an error code could get reported incorrectly on Android.
    • Database (Desktop): Fixed an issue that could cause a crash during shutdown.
    • Database (iOS): Fixed a race condition that could cause a crash when cleaning up database listeners on iOS.
    • Database (iOS): Fixed an issue where long (64-bit) values could get written to the database incorrectly (truncated to 32-bits).
    • Cloud Functions: Change assert to log warning when App is deleted before Cloud Functions instance is deleted.
    • Messaging (Android): Added channel_id to Messaging notifications.

6.0.0

  • Overview
    • Fixed issues in Auth and Messaging, removed Firebase Invites, removed deprecated functions in Firebase Remote Config, and deprecated a function in Firebase Analytics.
  • Changes
    • Updated Firebase iOS and Firebase Android dependencies.
    • Auth: Fixed a race condition updating the current user.
    • Messaging (iOS/Android): Fix an issue where Subscribe and Unsubscribe never returned if the API was configured not to receive a registration token.
    • Invites: Removed Firebase Invites library, as it is no longer supported.
    • Remote Config: Removed functions using config namespaces.
    • Analytics: Deprecated SetMinimumSessionDuration.
  • Known Issues
    • To work around a incompatible dependency, AdMob for Android temporarily requires an additional dependency on com.google.android.gms:play-services-measurement-sdk-api:16.5.0

5.7.0

  • Overview
    • Deprecated functions in Remote Config.
  • Changes
    • Remote Config: Config namespaces are now deprecated. You'll need to switch to methods that use the default namespace.
  • Known Issues
    • To work around a incompatible dependency, AdMob for Android temporarily requires an additional dependency on com.google.android.gms:play-services-measurement-sdk-api:16.4.0

5.6.1

  • Overview
    • Fixed race condition on iOS SDK startup.
  • Changes
    • General (iOS): Updated to the latest iOS SDK to fix a crash on firebase::App creation caused by a race condition. The crash could occur when accessing the [FIRApp firebaseUserAgent] property of the iOS FIRApp.

5.6.0

  • Overview
    • Released an open-source version, added Game Center sign-in to Auth, enhanced Database on desktop, and fixed a crash when deleting App.
  • Changes
    • Firebase C++ is now open source.
    • Auth (iOS): Added Game Center authentication.
    • Database (Desktop): Reworked how cached server values work to be more in line with mobile implementations.
    • Database (Desktop): Simultaneous transactions are now supported.
    • Database (Desktop): The special Timestamp ServerValue is now supported.
    • Database (Desktop): KeepSynchronized is now supported.
    • App, Auth, Database, Remote Config, Storage: Fixed a crash when deleting firebase::App before deleting other Firebase subsystems.

5.5.0

  • Overview
    • Deprecated Firebase Invites and updated how Android dependencies are included.
  • Changes

5.4.4

  • Overview
    • Fixed a bug in Cloud Functions on Android, and AdMob on iOS.
  • Changes
    • Cloud Functions (Android): Fixed an issue with error handling.
    • AdMob (iOS): Fixed an issue with Rewarded Video ad unit string going out of scope.

5.4.3

  • Overview
    • Bug fix for Firebase Storage on iOS.
  • Changes
    • Storage (iOS): Fixed an issue when downloading files with GetBytes.

5.4.2

  • Overview
    • Removed a spurious error message in Auth on Android.
  • Changes
    • Auth (Android): Removed an irrelevant error about the Java class FirebaseAuthWebException.

5.4.0

  • Overview
    • Bug fix for link shortening in Dynamic Links and a known issue in Database on Desktop.
  • Changes
    • Dynamic Links (Android): Fixed short link generation failing with "error 8".
  • Known Issues
    • The Realtime Database Desktop SDK uses REST to access your database. Because of this, you must declare the indexes you use with Query::OrderByChild() on Desktop or your listeners will fail.

5.3.1

  • Overview
    • Updated iOS and Android dependency versions and a bug fix for Invites.
  • Changes
    • Invites (Android): Fixed an exception when the Android Minimum Version code option is used on the Android.

5.3.0

  • Overview
    • Fixed bugs in Database and Functions; changed minimum Xcode version to 9.4.1.
  • Changes
    • General (iOS): Minimum Xcode version is now 9.4.1.
    • Functions (Android): Fixed an issue when a function returns an array.
    • Database (Desktop): Fixed issues in ChildListener.
    • Database (Desktop): Fixed crash that can occur if Database is deleted while asynchronous operations are still in progress.
  • Known Issues
    • Dynamic Links (Android): Shortening dynamic links fails with "Error 8".

5.2.1

  • Overview
    • Fixed bugs in Auth and Desktop.
  • Changes
    • Database (Desktop): Fixed support for ChildListener when used with Query::EqualTo(), Query::StartAt(), Query::EndAt(), Query::LimitToFirst() and Query::LimitToLast().
    • Database: Fixed a crash in DatabaseReference/Query copy assignment operator and copy constructor.
    • Auth, Database: Fixed a race condition returning Futures when calling the same method twice in quick succession.

5.2.0

  • Overview
    • Changes to Database, Functions, Auth, and Messaging.
  • Changes
    • Database: Added a version of GetInstance that allows passing in the URL of the database to use.
    • Functions: Added a way to specify which region to run the function in.
    • Messaging: Changed Subscribe and Unsubscribe to return a Future.
    • Auth (Android): Fixed a crash in User::UpdatePhoneNumberCredential().
    • General (Android): Fixed a null reference in the Google Play Services availability checker.

5.1.1

  • Overview
    • Updated Android and iOS dependency versions only.

5.1.0

  • Overview
    • Changes to Analytics, Auth, and Database; and added support for Cloud Functions for Firebase.
  • Changes
    • Analytics: Added ResetAnalyticsData() to clear all analytics data for an app from the device.
    • Analytics: Added GetAppInstanceId() which allows developers to retrieve the current app's analytics instance ID.
    • Auth: Linking a credential with a provider that has already been linked now produces an error.
    • Auth (iOS): Fixed crashes in User::LinkAndRetrieveDataWithCredential() and User::ReauthenticateAndRetrieveData().
    • Auth (iOS): Fixed photo URL never returning a value on iOS.
    • Auth (Android): Fixed setting profile photo URL with UpdateUserProfile.
    • Database: Added support for ServerValues in SetPriority methods.
    • Functions: Added support for Cloud Functions for Firebase on iOS, Android, and desktop.

5.0.0

  • Overview
    • Renamed the Android and iOS libraries to include firebase in their name, removed deprecated methods in App, AdMob, Auth, Database, and Storage, and exposed new APIs in Dynamic Links and Invites.
  • Changes
    • General (Android/iOS): Library names have been prefixed with "firebase_", for example libapp.a is now libfirebase_app.a. This brings them in line with the naming scheme used on desktop, and iOS frameworks.
    • General (Android): Improved error handling when device is out of space.
    • App: Removed deprecated accessor methods from Future.
    • AdMob: Removed deprecated accessor methods from BannerView and InterstitialAd.
    • Auth: Removed deprecated accessors from Auth, Credential, User, and UserInfoInterface, including User::refresh_token().
    • Database: Removed deprecated accessors from DatabaseReference, Query, DataSnapshot, and MutableData.
    • Dynamic Links: Added a field to received dynamic links describing the strength of the match.
    • Invites: Added OnInviteReceived to Listener base class that includes the strength of the match on the received invite as an enum. Deprecated prior function that received it as a boolean value.
    • Storage: Removed deprecated accessors from StorageReference.
    • Storage: Removed Metadata::download_url() and Metadata::download_urls(). Please use StorageReference::GetDownloadUrl() instead.
    • Messaging: Added an optional initialization options struct. This can be used to suppress the prompt on iOS that requests permission to receive notifications at start up. Permission can be requested manually using the function firebase::messaging::RequestPermission().

4.5.1

  • Overview
    • Fixed bugs in Database (Desktop) and Remote Config and exposed new APIs in Auth on Desktop and Messaging.
  • Changes
    • Messaging: Added the SetAutoTokenRegistrationOnInitEnabled() and IsAutoTokenRegistrationOnInitEnabled() methods to enable or disable auto-token generation.
    • Auth (Desktop): Added support for accessing user metadata.
    • Database (Desktop): Fixed a bug to make creation of database instances with invalid URLs return NULL.
    • Database (Desktop): Fixed an issue where incorrect values could be passed to OnChildAdded.
    • Remote Config: Fixed a bug causing incorrect reporting of success or failure during a Fetch().

4.5.0

  • Overview
    • Desktop workflow support for some features, Google Play Games authentication on Android, and changes to AdMob, Auth, and Storage.
  • Changes
    • Auth, Realtime Database, Remote Config, Storage (Desktop): Stub implementations have been replaced with functional desktop implementations on Windows, OS X, and Linux.
    • AdMob: Native Express ads have been discontinued, so NativeExpressAdView has been marked deprecated and will be removed in a future version.
    • Auth (Android): Added Google Play Games authentication.
    • Auth: Fixed a race condition initializing/destroying Auth instances.
    • Storage: Added MD5 hash to Metadata.
    • Storage: Fixed a crash when deleting listeners and other object instances.
    • Storage: Controller can now be used from any thread.
    • Storage (iOS): Fixed incorrect content type when uploading.
  • Known Issues
    • When using Firebase Realtime Database on desktop, only one Transaction may be run on a given subtree at the same time.
    • When using Firebase Realtime Database on desktop, data persistence is not available.

4.4.3

  • Overview
    • Fixed linking bug in App.
  • Changes
    • App (iOS): Removed unresolved symbols in the App library that could cause errors when forcing resolution.

4.4.2

  • Overview
    • Fixed bugs in Dynamic Links, Invites, Remote Config and Storage and fixed linking issues with the Windows and Linux stub libraries.
  • Changes
    • Dynamic Links (iOS): Now fetches the invite ID when using universal links.
    • Dynamic Links (iOS): Fixed crash on failure of dynamic link completion.
    • Dynamic Links (iOS): Fixed an issue where some errors weren't correctly reported.
    • Invites: Fixed SendInvite never completing in the stub implementation.
    • Remote Config (iOS): Fixed an issue where some errors weren't correctly reported.
    • Storage: Fixed Metadata::content_language returning the wrong data.
    • Storage (iOS): Reference paths formats are now consistent with other platforms.
    • Storage (iOS): Fixed an issue where trying to upload to a non-existent path would not complete the Future.
    • Storage (iOS): Fixed a crash when a download fails.
    • General (Windows): Updated all static libs to suppport different C runtime libraries and correspondingly updated the package directory structure.
    • Linux: Fixed linking problems with all of the C++ stub libraries.

4.4.1

  • Overview
    • Bug fixes for Realtime Database and Instance ID.
  • Changes
    • Realtime Database: SetPersistenceEnabled now sets persistence enabled.
    • Instance ID (iOS): GetToken no longer fails without an APNS certificate, and no longer forces registering for notifications.

4.4.0

  • Overview
    • Support for Instance ID.
  • Changes
    • Instance ID: Added Instance ID library.

4.3.0

  • Overview
    • Bug fix for Remote Config and a new feature for Auth.
  • Changes
    • Auth: Added support for accessing user metadata.
    • Remote Config (Android): Fixed remote_config::ValueSource conversion.

4.2.0

  • Overview
    • Bug fixes for Analytics, Database, and Messaging; and updates for Auth and Messaging.
  • Changes
    • Analytics (iOS): Fixed a bug which prevented the user ID and user properties being cleared.
    • Database (Android): Fixed MutableData::children_count().
    • Messaging (Android): Fixed a bug which prevented the message ID field being set.
    • Auth: Failed operations now return more specific error codes.
    • Auth (iOS): Phone Authentication no longer requires push notifications. When push notifications aren't available, reCAPTCHA verification is used instead.
    • Messaging: Messages sent to users can now contain a link URL.

4.1.0

  • Overview
    • Bug fixes for AdMob, Auth, Messaging, Database, Storage, and Remote Config, and added features for Future's OnCompletion callbacks and Database transaction callbacks.
  • Changes
    • General: Futures are now invalidated when their underlying Firebase API is destroyed.
    • General: Added std::function support to Future::OnCompletion, to allow use of C++11 lambdas with captures.
    • AdMob (iOS): Fixed a crash if a BannerView is deleted while a call to Destroy() is still pending.
    • Auth (Android): Now assert fails if you call GetCredential without an Auth instance created.
    • Database: DataSnapshot, DatabaseReference, Query, and other objects are invalidated when their Database instance is destroyed.
    • Database: Added a context pointer to DatabaseReference::RunTransaction, as well as std::function support to allow use of C++11 lambdas with captures.
    • Messaging (Android): Fixed a bug where message_type was not set in the Message struct.
    • Messaging (iOS): Fixed a race condition if a message is received before Firebase Cloud Messaging is initialized.
    • Messaging (iOS): Fixed a bug detecting whether the notification was opened if the app was running in the background.
    • Remote Config: When listing keys, the list now includes keys with defaults set, even if they were not present in the fetched config.
    • Storage: StorageReference objects are invalidated when their Storage instance is destroyed.
  • Known Issues
    • When building on Android using STLPort, the std::function versions of Future::OnCompletion and DatabaseReference::RunTransaction are not available.

4.0.4

  • Changes
    • Messaging (Android): Fixed a bug resulting in Messages not having their message_type field populated.

4.0.3

  • Overview
    • Bug fixes for Dynamic Links, Messaging and iOS SDK compatibility.
  • Changes
    • General (iOS): Fixed an issue which resulted in custom options not being applied to firebase::App instances.
    • General (iOS): Fixed a bug which caused method implementation look ups to fail when other iOS SDKs rename the selectors of swizzled methods.
    • Dynamic Links (Android): Fixed future completion if short link creation fails.
    • Messaging (iOS): Fixed message handling when messages they are received via the direct channel to the FCM backend (i.e not via APNS).

4.0.2

  • Overview
    • Bug fixes for Analytics, Auth, Dynamic Links, and Messaging.
  • Changes
    • Analytics (Android): Fix SetCurrentScreen to work from any thread.
    • Auth (iOS): Fixed user being invalidated when linking a credential fails.
    • Dynamic Links: Fixed an issue which caused an app to crash or not receive a Dynamic Link if the link is opened when the app is installed and not running.
    • Messaging (iOS): Fixed a crash when no Listener is set.
    • Messaging: Fixed Listener::OnTokenReceived occasionally being called twice with the same token.

4.0.1

  • Overview
    • Bug fixes for Dynamic links and Invites on iOS and Cloud Messaging on Android and iOS.
  • Changes
    • Cloud Messaging (Android): Fixed an issue where Terminate was not correctly shutting down the Cloud Messaging library.
    • Cloud Messaging (iOS): Fixed an issue where library would crash on start up if there was no registration token.
    • Dynamic Links & Invites (iOS): Fixed an issue that resulted in apps not receiving a link when opening a link if the app is installed and not running.

4.0.0

  • Overview
    • Added support for phone number authentication, access to user metadata, a standalone dynamic library and bug fixes.
  • Changes
    • Auth: Added support for phone number authentication.
    • Auth: Added the ability to retrieve user metadata.
    • Auth: Moved token notification to a separate listener object.
    • Dynamic Links: Added a standalone library separate from Invites.
    • Invites (iOS): Fixed an issue in the analytics SDK's method swizzling which resulted in dynamic links / invites not being sent to the application.
    • Messaging (Android): Fixed a regression introduced in 3.0.3 which caused a crash when opening up a notification when the app is running in the background.
    • Messaging (iOS): Fixed interoperation with other users of local notifications.
    • General (Android): Fixed crash in some circumstances after resolving dependencies by updating Google Play services.

3.1.2

  • Overview
    • Bug fixes for Auth.
  • Changes
    • Auth: Fixed a crash caused by a stale memory reference when a firebase::auth::Auth object is destroyed and then recreated for the same App object.
    • Auth: Fixed potential memory corruption when AuthStateListener is destroyed.

3.1.1

  • Overview
    • Bug fixes for Auth, Invites, Messaging, and Storage, plus a general fix.
  • Changes
    • General (Android): Fixed Google Play Services updater crash when clicking outside of the dialog on Android 4.x devices.
    • Auth: Fixed user being invalidated when linking a credential fails.
    • Auth: Deprecated User::refresh_token().
    • Messaging: Fixed incorrectly notifying the app of a message when a notification is received while the app is in the background and the app is then opened by via the app icon rather than the notification.
    • Invites (iOS): Fixed an issue which resulted in the app delegate method application:openURL:sourceApplication:annotation: not being called when linking the invites library.
    • Storage: Fixed a bug that prevented the construction of Metadata without a storage reference.

3.1.0

  • Overview
    • Added support for multiple storage buckets in Cloud Storage for Firebase, and fixed a bug in Invites.
  • Changes
    • Storage: Renamed "Firebase Storage" to "Cloud Storage for Firebase".
    • Storage: Added an overload for Storage::GetInstance() that accepts a gs://... URL, so you can use Cloud Storage with multiple buckets.
    • Invites: (Android) Fixed an issue where invites with empty links would fail to be received.

3.0.0

  • Overview
    • Renamed some methods, fixed some bugs, and added some features.
  • Changes
    • General: Renamed and deprecated methods that were inconsistent with the Google C++ Style Guide. Deprecated methods will be removed in a future release (approximately 2-3 releases from now).
    • Analytics: Added SetCurrentScreen().
    • Auth: Fixed a race condition accessing user data in callbacks.
    • Auth: (Android) Added is_valid() to check if a credential returned by GetCredential() is valid.
    • Invites: (Android) Added a Fetch() function to fetch incoming invitations at times other than application start. You must call this on Android when your app returns to the foreground (on iOS, this is handled automatically).
    • Messaging: Added a field to firebase::messaging::Message specifying whether the message was received when the app was in the background.
    • Messaging: (Android) Added an AAR file containing the Android manifest changes needed for receiving notifications. You can add this to your project instead of modifying the manifest directly.
    • Messaging: (iOS) Fixed regression since 2.1.1 that broke messaging on iOS 8 & 9 when an AppDelegate did not implement remote notification methods.
    • Invites: (iOS) Fixed regression since 2.1.1 that broke invites if the AppDelegate did not implement the open URL method.
    • Remote Config: Added support for initializing Remote Config defaults from firebase::Variant values, including binary data.

2.1.3

  • Overview
    • Bug fixes for Auth and Messaging, and a fix for Future callbacks.
  • Changes
    • General: Fixed a potential deadlock when running callbacks registered via firebase::Future::OnCompletion().
    • Auth: (Android) Fixed an error in firebase::auth::User::PhotoUri().
    • Messaging: (Android) Fixed an issue where a blank message would appear.
    • Messaging: (iOS) Removed hard dependency on Xcode 8.

2.1.2

  • Overview
    • Bug fix for AdMob on Android.
  • Changes
    • AdMob: (Android) Fixed an issue in firebase::admob::InterstitialAd that caused a crash after displaying multiple interstitial ads.

2.1.1

  • Overview
    • Bug fixes for Firebase Authentication, Messaging and Invites.
  • Changes
    • Auth: (Android) Fixed an issue that caused a future to never complete when signing in while a user is already signed in.
    • Messaging / Invites: (iOS) Fixed an issue with method swizzling that caused some of the application's UIApplicationDelegate methods to not be called.
    • Messaging: (iOS) Fixed a bug which caused a crash when initializing the library when building with Xcode 8 for iOS 10.

2.1.0

  • Overview
    • Support for Firebase Storage and minor bugfixes in other libraries.
  • Changes
    • Storage: Added the Firebase Storage C++ client library.
    • Auth: Added a check for saved user credentials when Auth is initialized.
  • Known Issues
    • Storage: On Android, pausing and resuming storage operations will cause the transfer to fail with the error code kErrorUnknown.

2.0.0

  • Overview
    • Support for AdMob Native Express Ads, Realtime Database and simplified the Invites API.
  • Changes
    • AdMob: Added support for AdMob Native Express Ads.
    • Auth: Added AuthStateListener class which provides notifications when a user is logged in or logged out.
    • Realtime Database: Added a client library.
    • Invites: Breaking change which significantly simplifies the API.
  • Known Issues
    • AdMob: When calling Initialize, the optional admob_app_id argument is ignored.

1.2.1

  • Overview
    • Bug fixes in Messaging.
  • Changes
    • Messaging: Fixed a bug that prevented Android apps from terminating properly.
    • Messaging: Added missing copy constructor implementation in iOS and stub libraries.

1.2.0

  • Overview
    • New features in AdMob, Authentication, Messaging, and Remote Config, a helper class for initialization, and bug fixes.
  • Changes
    • General: Added firebase::ModuleInitializer, a helper class to initialize Firebase modules and handle any missing dependency on Google Play services on Android.
    • AdMob: Added Rewarded Video feature. For more information, see the Rewarded Video C++ guide.
    • AdMob: You can now pass your AdMob App ID to firebase::admob::Initialize() to help reduce latency for the initial ad request.
    • AdMob: On both iOS and Android, you must call BannerView::Show() to display the ad. Previously, this was only required on Android.
    • AdMob: Fixed an issue where BannerView::Listener received an incorrect bounding box.
    • AdMob: BannerView now has a black background, rather than transparent.
    • Authentication: Implemented User::SendEmailVerification() and User::EmailVerified() methods on Android.
    • Invites: Fixed a bug that occurred when initializing InvitesSender and InvitesReceiver at the same time.
    • Invites: Fixed a potential crash at app shutdown on iOS when InvitesReceiver::Fetch() is pending.
    • Messaging: Added firebase::messaging::Notification and associated methods for retrieving the contents of a notification on Android and iOS.
    • Messaging: Added support for iOS 10 notifications.
    • Messaging: Fixed a crash that occurred on Android if Messaging was initialized before the native library was loaded.
    • RemoteConfig: Added GetKeys() and GetKeysByPrefix() methods, which get a list of the app's Remote Config parameter keys.

1.1.0

  • Overview
    • Minor bug fixes and new way of checking Google Play services availability.
  • Changes
    • Reverted the firebase::App changes from version 1.0.1 relating to Google Play services; this has been replaced with a new API.
    • Each Firebase C++ library that requires Google Play services now checks for its availability at initialization time. See "Requiring Google Play services on Android".
      • firebase::auth::GetAuth() now has an optional output parameter that indicates whether initialization was successful, and will return nullptr if not.
      • firebase::messaging::Initialize() now returns a result that indicates whether initialization was successful.
      • Added firebase::invites::Initialize(), which you must call once prior to creating InvitesSender or InvitesReceiver instances. This function returns a result that indicates whether initialization was successful.
      • firebase::remote_config::Initialize() now returns a result that indicates whether initialization was successful.
      • firebase::admob::Initialize() now returns a result that indicates whether initialization was successful.
    • Added utility functions to check whether Google Play services is available. See google_play_services::CheckAvailability() and google_play_services::MakeAvailable() for more information.
  • Known Issues
    • Invites: If you call InvitesReceiver::Fetch() or InvitesReceiver::ConvertInvitation() without first calling firebase::invites::Initialize(), the operation will never complete. To work around the issue, ensure that firebase::invites::Initialize() is called once before creating any InvitesReceiver instances.

1.0.1

  • Overview
    • Minor bug fixes.
  • Changes
    • Modified firebase::App to check for the required version of Google Play services on creation to prevent firebase::App creation failing if a user's device is out of date. If Google Play services is out of date, a dialog will prompt the user to install a new version. See "Requiring Google Play services on Android". With the previous version (version 1.0.0) the developer needed to manually check for an up to date Google Play services using GoogleApiClient.
    • Fixed potential deadlock when using SetListener from a notification callback in firebase::admob::InterstitialAd and firebase::admob::BannerView on iOS.
    • Fixed race condition on destruction of admob::BannerView on Android.
    • Fixed Future handle leak. An internal memory leak would manifest for objects or modules that use futures for the lifetime of the object or module. For example, during the lifetime of BannerView each call to a method which returns a Future could potentially allocate memory which wouldn't be reclaimed until the BannerView is destroyed.

1.0.0

  • Overview
    • First public release. See our setup guide to get started.
  • Known Issues
    • Android armeabi libraries must be linked with gcc 4.8.