The Cloud Functions for Firebase client SDKs let you call functions directly from a Firebase app. To call a function from your app in this way, write and deploy an HTTP Callable function in Cloud Functions , and then add client logic to call the function from your app.
It's important to keep in mind that HTTP callable functions are similar but not identical toHTTP functions. To use HTTP callable functions you must use the client SDK for your platform together with the backend API (or implement the protocol). Callables have these key difference from HTTP functions:
- With callables, Firebase Authentication tokens, FCM tokens, and App Check tokens, when available, are automatically included in requests.
- The trigger automatically deserializes the request body and validates auth tokens.
The Firebase SDK for Cloud Functions 2nd gen and higher interoperates with these Firebase client SDK minimum versions to support HTTPS Callable functions:
- Firebase SDK for Apple platforms 12.2.0
- Firebase SDK for Android 22.0.0
- Firebase Modular Web SDK v. 9.7.0
If you want to add similar functionality to an app built on an unsupported
platform, see the Protocol Specification for https.onCall
. The rest of this guide provides
instructions on how to write, deploy, and call
an HTTP callable function for Apple platforms, Android, web, C++, and Unity.
Write and deploy the callable function
Use functions.https.onCall
to create an HTTPS callable function. This method
takes two parameters: data
, and optional context
:
// Saves a message to the Firebase Realtime Database but sanitizes the // text by removing swearwords. exports . addMessage = functions . https . onCall (( data , context ) = > { // ... });
For a callable function that saves a text message to the Realtime Database
,
for example, data
could contain the message text, while context
parameters represent user auth information:
//
Message
text
passed
from
the
client
.
const
text
=
request
.
data
.
text
;
//
Authentication
/
user
information
is
automatically
added
to
the
request
.
const
uid
=
request
.
auth
.
uid
;
const
name
=
request
.
auth
.
token
.
name
||
null
;
const
picture
=
request
.
auth
.
token
.
picture
||
null
;
const
email
=
request
.
auth
.
token
.
email
||
null
;
Distance between the location of the callable function and the location of the calling client can create network latency. To optimize performance, consider specifying the function location where applicable, and make sure to align the callable's location with the location set when you initialize the SDK on the client side.
Optionally, you can attach an App Check attestation to help protect your backend resources from abuse, such as billing fraud or phishing. See Enable App Check enforcement for Cloud Functions .
Sending back the result
To send data back to the client, return data that can be JSON encoded. For example, to return the result of an addition operation:
// returning result.
return
{
firstNumber
:
firstNumber
,
secondNumber
:
secondNumber
,
operator
:
"+"
,
operationResult
:
firstNumber
+
secondNumber
,
};
To return data after an asynchronous operation, return a promise. The data returned by the promise is sent back to the client. For example, you could return sanitized text that the callable function wrote to the Realtime Database :
//
Saving
the
new
message
to
the
Realtime
Database
.
const
sanitizedMessage
=
sanitizer
.
sanitizeText
(
text
);
//
Sanitize
message
.
return
getDatabase
()
.
ref
(
"/messages"
)
.
push
({
text
:
sanitizedMessage
,
author
:
{
uid
,
name
,
picture
,
email
},
})
.
then
(()
=
>
{
logger
.
info
(
"New Message written"
);
//
Returning
the
sanitized
message
to
the
client
.
return
{
text
:
sanitizedMessage
};
})
Handle errors
To ensure the client gets useful error details, return errors from a callable
by throwing (or returning a Promise rejected with) an instance of functions.https.HttpsError
.
The error has a code
attribute that can be one of the values listed
at functions.https.HttpsError
.
The errors also have a string message
, which defaults
to an empty string. They can also have an optional details
field with an
arbitrary value. If an error other than HttpsError
is thrown from your functions,
your client instead receives an error with the message INTERNAL
and the code internal
.
For example, a function could throw data validation and authentication errors with error messages to return to the calling client:
// Checking attribute.
if
(!(
typeof
text
==
=
"string"
)
||
text
.
length
==
=
0
)
{
// Throwing an HttpsError so that the client gets the error details.
throw
new
HttpsError
(
"invalid-argument"
,
"The function must be called "
+
"with one arguments \"text\" containing the message text to add."
);
}
// Checking that the user is authenticated.
if
(!
request
.
auth
)
{
// Throwing an HttpsError so that the client gets the error details.
throw
new
HttpsError
(
"failed-precondition"
,
"The function must be "
+
"called while authenticated."
);
}
Deploy the callable function
After you save a completed callable function within index.js
, it
is deployed along with all other functions when you run firebase deploy
.
To deploy only the callable, use the --only
argument as shown to perform partial deploys
:
firebase deploy --only functions:addMessage
If you encounter permissions errors when deploying functions, make sure that the appropriate IAM roles are assigned to the user running the deployment commands.
Set up your client development environment
Make sure you meet any prerequisites, then add the required dependencies and client libraries to your app.
iOS+
Follow the instructions to add Firebase to your Apple app .
Use Swift Package Manager to install and manage Firebase dependencies.
- In Xcode, with your app project open, navigate to File > Add Packages .
- When prompted, add the Firebase Apple platforms SDK repository:
- Choose the Cloud Functions library.
- Add the
-ObjC
flag to the Other Linker Flags section of your target's build settings. - When finished, Xcode will automatically begin resolving and downloading your dependencies in the background.
https://github.com/firebase/firebase-ios-sdk.git
Web
- Follow the instructions to add Firebase to your Web app
. Make sure to run
the following command from your terminal:
npm install firebase @12.2.1 -- save
-
Manually require both Firebase core and Cloud Functions :
import { initializeApp } from 'firebase/app' ; import { getFunctions } from 'firebase/functions' ; const app = initializeApp ({ projectId : '### CLOUD FUNCTIONS PROJECT ID ###' , apiKey : '### FIREBASE API KEY ###' , authDomain : '### FIREBASE AUTH DOMAIN ###' , }); const functions = getFunctions ( app );
Web
- Follow the instructions to add Firebase to your Web app .
- Add the Firebase core and Cloud Functions
client libraries to your
app:
<script src="https://www.gstatic.com/firebasejs/8.10.1/firebase.js"></script> <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-functions.js"></script>
The Cloud Functions SDK is also available as an npm package.
- Run the following command from your terminal:
npm install firebase @8.10.1 -- save
- Manually require both Firebase core and Cloud Functions
:
const firebase = require ( "firebase" ); // Required for side - effects require ( "firebase/functions" );
Kotlin
-
Follow the instructions to add Firebase to your Android app .
-
In your module (app-level) Gradle file (usually
<project>/<app-module>/build.gradle.kts
or<project>/<app-module>/build.gradle
), add the dependency for the Cloud Functions library for Android. We recommend using the Firebase Android BoM to control library versioning.dependencies { // Import the BoM for the Firebase platform implementation ( platform ( "com.google.firebase:firebase-bom:34.2.0" )) // Add the dependency for the Cloud Functions library // When using the BoM , you don't specify versions in Firebase library dependencies implementation ( "com.google.firebase:firebase-functions" ) }
By using the Firebase Android BoM , your app will always use compatible versions of Firebase Android libraries.
(Alternative) Add Firebase library dependencies without using the BoM
If you choose not to use the Firebase BoM , you must specify each Firebase library version in its dependency line.
Note that if you use multiple Firebase libraries in your app, we strongly recommend using the BoM to manage library versions, which ensures that all versions are compatible.
dependencies { // Add the dependency for the Cloud Functions library // When NOT using the BoM , you must specify versions in Firebase library dependencies implementation ( "com.google.firebase:firebase-functions:22.0.0" ) }
Java
-
Follow the instructions to add Firebase to your Android app .
-
In your module (app-level) Gradle file (usually
<project>/<app-module>/build.gradle.kts
or<project>/<app-module>/build.gradle
), add the dependency for the Cloud Functions library for Android. We recommend using the Firebase Android BoM to control library versioning.dependencies { // Import the BoM for the Firebase platform implementation ( platform ( "com.google.firebase:firebase-bom:34.2.0" )) // Add the dependency for the Cloud Functions library // When using the BoM , you don't specify versions in Firebase library dependencies implementation ( "com.google.firebase:firebase-functions" ) }
By using the Firebase Android BoM , your app will always use compatible versions of Firebase Android libraries.
(Alternative) Add Firebase library dependencies without using the BoM
If you choose not to use the Firebase BoM , you must specify each Firebase library version in its dependency line.
Note that if you use multiple Firebase libraries in your app, we strongly recommend using the BoM to manage library versions, which ensures that all versions are compatible.
dependencies { // Add the dependency for the Cloud Functions library // When NOT using the BoM , you must specify versions in Firebase library dependencies implementation ( "com.google.firebase:firebase-functions:22.0.0" ) }
Dart
-
Follow the instructions to add Firebase to your Flutter app .
-
From the root of your Flutter project, run the following command to install the plugin:
flutter pub add cloud_functions
-
Once complete, rebuild your Flutter application:
flutter run
-
Once installed, you can access the
cloud_functions
plugin by importing it in your Dart code:import 'package:cloud_functions/cloud_functions.dart' ;
C++
For C++ with Android:
- Follow the instructions to add Firebase to your C++ project .
- Add the
firebase_functions
library to yourCMakeLists.txt
file.
For C++ with Apple platforms:
- Follow the instructions to add Firebase to your C++ project .
- Add the Cloud Functions
pod to your
Podfile
:pod ' Firebase / Functions '
- Save the file, then run:
pod install
- Add the Firebase core and Cloud Functions
frameworks from the Firebase
C++
SDK
to your Xcode project.
-
firebase.framework
-
firebase_functions.framework
-
Unity
- Follow the instructions to add Firebase to your Unity project .
- Add the
FirebaseFunctions.unitypackage
from the Firebase Unity SDK to your Unity project.
Initialize the client SDK
Initialize an instance of Cloud Functions :
Swift
lazy
var
functions
=
Functions
.
functions
()
Objective-C
@property
(
strong
,
nonatomic
)
FIRFunctions
*
functions
;
// ...
self
.
functions
=
[
FIRFunctions
functions
];
Web
firebase
.
initializeApp
({
apiKey
:
'### FIREBASE API KEY ###'
,
authDomain
:
'### FIREBASE AUTH DOMAIN ###'
,
projectId
:
'### CLOUD FUNCTIONS PROJECT ID ###'
databaseURL
:
'https://### YOUR DATABASE NAME ###.firebaseio.com'
,
});
//
Initialize
Cloud
Functions
through
Firebase
var
functions
=
firebase
.
functions
();
Web
const
app
=
initializeApp
({
projectId
:
'### CLOUD FUNCTIONS PROJECT ID ###'
,
apiKey
:
'### FIREBASE API KEY ###'
,
authDomain
:
'### FIREBASE AUTH DOMAIN ###'
,
});
const
functions
=
getFunctions
(
app
);
Kotlin
private lateinit var functions : FirebaseFunctions // ... functions = Firebase . functions . kt