> [!NOTE]
> **Note:** The 1st-gen functionality described in this page is also supported in Cloud Functions (2nd gen) with improved features and performance. For more information about 2nd gen, see the [version comparison](https://firebase.google.com/docs/functions/version-comparison.md.txt). To go directly to the 2nd gen guide for this feature, see [Call functions from your app](https://firebase.google.com/docs/functions/callable.md.txt).

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 to** HTTP 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 13.1.1
- Firebase SDK for Android 23.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`](https://firebase.google.com/docs/functions/callable-reference.md.txt). 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`](https://firebase.google.com/docs/reference/functions/firebase-functions.https.md.txt#httpsoncall)
to create an HTTPS callable function. This method
takes two parameters: `data`, and optional `context`:

<br />

```javascript
  // Saves a message to the Firebase Realtime Database but sanitizes the
  // text by removing swearwords.
  exports.addMessage = functions.https.onCall((data, context) => {
    // ...
  });
  
```

<br />

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](https://firebase.google.com/docs/functions/locations.md.txt) where
applicable, and make sure to align the callable's location with the location
set when you [initialize the SDK](https://firebase.google.com/docs/functions/1st-gen/callable-1st.md.txt#initialize-client-1gen)
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](https://firebase.google.com/docs/app-check/cloud-functions.md.txt).

> [!NOTE]
> **Note:** Use only the [`functions.https`](https://firebase.google.com/docs/reference/functions/firebase-functions.https.md.txt) backend API to write callable functions. The **[HTTP trigger API](https://firebase.google.com/docs/reference/functions/firebase-functions.httpsfunction.md.txt#httpsfunction_interface) is
> entirely separate and not interoperable with callable 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`](https://firebase.google.com/docs/reference/functions/firebase-functions.https.httpserror.md.txt).
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](https://firebase.google.com/docs/cli.md.txt#partial_deploys):

```
firebase deploy --only functions:addMessage
```

If you encounter permissions errors when deploying functions, make sure that
the appropriate [IAM roles](https://firebase.google.com/docs/projects/iam/permissions.md.txt#functions) 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](https://firebase.google.com/docs/ios/setup.md.txt).

Use Swift Package Manager to install and manage Firebase dependencies.

> [!NOTE]
> Visit [our installation guide](https://firebase.google.com/docs/ios/installation-methods.md.txt) to learn about the different ways you can add Firebase SDKs to your Apple project.

1. In Xcode, with your app project open, navigate to **File \> Add Packages**.
2. When prompted, add the Firebase Apple platforms SDK repository:

```
  https://github.com/firebase/firebase-ios-sdk.git
```

> [!NOTE]
> **Note:** New projects should use the default (latest) SDK version, but you can choose an older version if needed.

3. Choose the Cloud Functions library.
4. Add the `-ObjC` flag to the *Other Linker Flags* section of your target's build settings.
5. When finished, Xcode will automatically begin resolving and downloading your dependencies in the background.

### Web

1. Follow the instructions to [add Firebase to your Web app](https://firebase.google.com/docs/web/setup.md.txt). Make sure to run the following command from your terminal:

   ```
   npm install firebase@13.2.0 --save
   ```
2. 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

1. Follow the instructions to [add Firebase to your Web app](https://firebase.google.com/docs/web/setup.md.txt).
2. 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.

1. Run the following command from your terminal:

   ```
   npm install firebase@8.10.1 --save
   ```
2. Manually require both Firebase core and Cloud Functions:

   ```
   const firebase = require("firebase");
   // Required for side-effects
   require("firebase/functions");
   ```

### Kotlin

1. Follow the instructions to
   [add Firebase to your Android app](https://firebase.google.com/docs/android/setup.md.txt).

2.


   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](https://firebase.google.com/docs/android/learn-more.md.txt#bom)
   to control library versioning.


   ```kotlin
   dependencies {
       // Import the BoM for the Firebase platform
       implementation(platform("com.google.firebase:firebase-bom:35.1.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](https://firebase.google.com/docs/android/learn-more.md.txt#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.**

   ```groovy
   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:23.0.0")
   }
   ```

   <br />

### Java

1. Follow the instructions to
   [add Firebase to your Android app](https://firebase.google.com/docs/android/setup.md.txt).

2.


   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](https://firebase.google.com/docs/android/learn-more.md.txt#bom)
   to control library versioning.


   ```java
   dependencies {
       // Import the BoM for the Firebase platform
       implementation(platform("com.google.firebase:firebase-bom:35.1.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](https://firebase.google.com/docs/android/learn-more.md.txt#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.**

   ```groovy
   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:23.0.0")
   }
   ```

   <br />

### Dart

1. Follow the instructions to
   [add Firebase to your Flutter app](https://firebase.google.com/docs/flutter/setup.md.txt).

2. From the root of your Flutter project, run the following command to
   install the plugin:

   ```bash
   flutter pub add cloud_functions
   ```
3. Once complete, rebuild your Flutter application:

   ```bash
   flutter run
   ```
4. Once installed, you can access the `cloud_functions`
   plugin by importing it in your Dart code:

   ```dart
   import 'package:cloud_functions/cloud_functions.dart';
   ```

### C++

For **C++ with Android**:

1. Follow the instructions to [add Firebase to your C++ project](https://firebase.google.com/docs/cpp/setup.md.txt?platform=android).
2. Add the **`firebase_functions`** library to your `CMakeLists.txt` file.

For **C++ with Apple platforms**:

1. Follow the instructions to [add Firebase to your C++ project](https://firebase.google.com/docs/cpp/setup.md.txt?platform=ios).
2. Use Swift Package Manager to add the `FirebaseFunctions` library (version `13.1.1`) from the `https://github.com/firebase/firebase-ios-sdk.git` repository to your Xcode project.
3. Add the Firebase core and Cloud Functions XCFrameworks from the `xcframeworks` directory of the [Firebase C++ SDK](https://firebase.google.com/download/cpp) to your Xcode project:
   - `firebase.xcframework`
   - `firebase_functions.xcframework`

### Unity

1. Follow the instructions to [add Firebase to your Unity project](https://firebase.google.com/docs/unity/setup.md.txt).
2. Add the `FirebaseFunctions.unitypackage` from the [Firebase Unity SDK](https://firebase.google.com/download/unity) to your Unity project.

## Initialize the client SDK

Initialize an instance of Cloud Functions:

### Swift

```swift
lazy var functions = Functions.functions()
```

### Objective-C

```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

```kotlin
private lateinit var functions: FirebaseFunctions
// ...
functions = Firebase.functions
```

### Java

```java
private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance();
```

### Dart

```dart
final functions = FirebaseFunctions.instance;
```

### C++

```c++
firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance(app);
```

### Unity

```c#
functions = Firebase.Functions.DefaultInstance;
```

> [!NOTE]
> **Note:** To call a function running in any [location](https://firebase.google.com/docs/functions/locations.md.txt) other than `us-central1`, you must set the appropriate value at initialization. For example, on Android you would initialize with `getInstance(FirebaseApp app, String region)`.

## Call the function

### Swift

```swift
functions.httpsCallable("addMessage").call(["text": inputField.text]) { result, error in
  if let error = error as NSError? {
    if error.domain == FunctionsErrorDomain {
      let code = FunctionsErrorCode(rawValue: error.code)
      let message = error.localizedDescription
      let details = error.userInfo[FunctionsErrorDetailsKey]
    }
    // ...
  }
  if let data = result?.data as? [String: Any], let text = data["text"] as? String {
    self.resultField.text = text
  }
}
```

### Objective-C

```objective-c
[[_functions HTTPSCallableWithName:@"addMessage"] callWithObject:@{@"text": _inputField.text}
                                                      completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) {
  if (error) {
    if ([error.domain isEqual:@"com.firebase.functions"]) {
      FIRFunctionsErrorCode code = error.code;
      NSString *message = error.localizedDescription;
      NSObject *details = error.userInfo[@"details"];
    }
    // ...
  }
  self->_resultField.text = result.data[@"text"];
}];
```

### Web

    var addMessage = firebase.functions().httpsCallable('addMessage');
    addMessage({ text: messageText })
      .then((result) => {
        // Read result of the Cloud Function.
        var sanitizedMessage = result.data.text;
      });

### Web

    import { getFunctions, httpsCallable } from "firebase/functions";

    const functions = getFunctions();
    const addMessage = httpsCallable(functions, 'addMessage');
    addMessage({ text: messageText })
      .then((result) => {
        // Read result of the Cloud Function.
        /** @type {any} */
        const data = result.data;
        const sanitizedMessage = data.text;
      });

### Kotlin

```kotlin
private fun addMessage(text: String): Task<String> {
    // Create the arguments to the callable function.
    val data = hashMapOf(
        "text" to text,
        "push" to true,
    )

    return functions
        .getHttpsCallable("addMessage")
        .call(data)
        .continueWith { task ->
            // This continuation runs on either success or failure, but if the task
            // has failed then result will throw an Exception which will be
            // propagated down.
            val result = task.result?.data as String
            result
        }
}
```

### Java

```java
private Task<String> addMessage(String text) {
    // Create the arguments to the callable function.
    Map<String, Object> data = new HashMap<>();
    data.put("text", text);
    data.put("push", true);

    return mFunctions
            .getHttpsCallable("addMessage")
            .call(data)
            .continueWith(new Continuation<HttpsCallableResult, String>() {
                @Override
                public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                    // This continuation runs on either success or failure, but if the task
                    // has failed then getResult() will throw an Exception which will be
                    // propagated down.
                    String result = (String) task.getResult().getData();
                    return result;
                }
            });
}
```

### Dart

```dart
    final result = await FirebaseFunctions.instance.httpsCallable('addMessage').call(
      {
        "text": text,
        "push": true,
      },
    );
    _response = result.data as String;
```

### C++

```c++
firebase::Future<firebase::functions::HttpsCallableResult> AddMessage(
    const std::string& text) {
  // Create the arguments to the callable function.
  firebase::Variant data = firebase::Variant::EmptyMap();
  data.map()["text"] = firebase::Variant(text);
  data.map()["push"] = true;

  // Call the function and add a callback for the result.
  firebase::functions::HttpsCallableReference doSomething =
      functions->GetHttpsCallable("addMessage");
  return doSomething.Call(data);
}
```

### Unity

```c#
private Task<string> addMessage(string text) {
  // Create the arguments to the callable function.
  var data = new Dictionary<string, object>();
  data["text"] = text;
  data["push"] = true;

  // Call the function and extract the operation from the result.
  var function = functions.GetHttpsCallable("addMessage");
  return function.CallAsync(data).ContinueWith((task) => {
    return (string) task.Result.Data;
  });
}
```

### Handle errors on the client

The client receives an error if the server threw an error or if the
resulting promise was rejected.

If the error returned by the function is of type `function.https.HttpsError`,
then the client receives the error `code`, `message`, and `details` from the
server error. Otherwise, the error contains the message `INTERNAL` and the
code `INTERNAL`. See guidance for how to
[handle errors](https://firebase.google.com/docs/functions/1st-gen/callable-1st.md.txt#handle-errors-1gen) in your callable function.

### Swift

```swift
if let error = error as NSError? {
  if error.domain == FunctionsErrorDomain {
    let code = FunctionsErrorCode(rawValue: error.code)
    let message = error.localizedDescription
    let details = error.userInfo[FunctionsErrorDetailsKey]
  }
  // ...
}
```

### Objective-C

```objective-c
if (error) {
  if ([error.domain isEqual:@"com.firebase.functions"]) {
    FIRFunctionsErrorCode code = error.code;
    NSString *message = error.localizedDescription;
    NSObject *details = error.userInfo[@"details"];
  }
  // ...
}
```

### Web

    var addMessage = firebase.functions().httpsCallable('addMessage');
    addMessage({ text: messageText })
      .then((result) => {
        // Read result of the Cloud Function.
        var sanitizedMessage = result.data.text;
      })
      .catch((error) => {
        // Getting the Error details.
        var code = error.code;
        var message = error.message;
        var details = error.details;
        // ...
      });

### Web

    import { getFunctions, httpsCallable } from "firebase/functions";

    const functions = getFunctions();
    const addMessage = httpsCallable(functions, 'addMessage');
    addMessage({ text: messageText })
      .then((result) => {
        // Read result of the Cloud Function.
        /** @type {any} */
        const data = result.data;
        const sanitizedMessage = data.text;
      })
      .catch((error) => {
        // Getting the Error details.
        const code = error.code;
        const message = error.message;
        const details = error.details;
        // ...
      });

### Kotlin

```kotlin
addMessage(inputMessage)
    .addOnCompleteListener { task ->
        if (!task.isSuccessful) {
            val e = task.exception
            if (e is FirebaseFunctionsException) {
                val code = e.code
                val details = e.details
            }
        }
    }
```

### Java

```java
addMessage(inputMessage)
  .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
      if (!task.isSuccessful()) {
        Exception e = task.getException();
        if (e instanceof FirebaseFunctionsException) {
          FirebaseFunctionsException ffe = (FirebaseFunctionsException) e;
          FirebaseFunctionsException.Code code = ffe.getCode();
          Object details = ffe.getDetails();
        }
      }
    }
  });
```

### Dart

```dart
try {
  final result =
      await FirebaseFunctions.instance.httpsCallable('addMessage').call();
} on FirebaseFunctionsException catch (error) {
  print(error.code);
  print(error.details);
  print(error.message);
}
```

### C++

```c++
void OnAddMessageCallback(
    const firebase::Future<firebase::functions::HttpsCallableResult>& future) {
  if (future.error() != firebase::functions::kErrorNone) {
    // Function error code, will be kErrorInternal if the failure was not
    // handled properly in the function call.
    auto code = static_cast<firebase::functions::Error>(future.error());

    // Display the error in the UI.
    DisplayError(code, future.error_message());
    return;
  }

  const firebase::functions::HttpsCallableResult* result = future.result();
  firebase::Variant data = result->data();
  // This will assert if the result returned from the function wasn't a string.
  std::string message = data.string_value();
  // Display the result in the UI.
  DisplayResult(message);
}

// ...

// ...
  auto future = AddMessage(message);
  future.OnCompletion(OnAddMessageCallback);
  // ...
```

### Unity

```c#
 addMessage(text).ContinueWith((task) => {
  if (task.IsFaulted) {
    foreach (var inner in task.Exception.InnerExceptions) {
      if (inner is FunctionsException) {
        var e = (FunctionsException) inner;
        // Function error code, will be INTERNAL if the failure
        // was not handled properly in the function call.
        var code = e.ErrorCode;
        var message = e.ErrorMessage;
      }
    }
  } else {
    string result = task.Result;
  }
});
```

### Set a client timeout

By default, the Cloud Functions client SDKs use a 70-second timeout for
callable requests. If a callable function takes longer than 70 seconds to
complete, the client SDK terminates the request with a `DEADLINE_EXCEEDED`
(`deadline-exceeded`) error---even if you configured a longer server-side timeout.

To support long-running callable functions, you must increase the timeout on
**both** the server and the client:

1. Increase the server-side function timeout (see [Set timeout and memory allocation](https://firebase.google.com/docs/functions/1st-gen/manage-functions-1st.md.txt#1g-set-timeout)).
2. Increase the client-side timeout when configuring the callable reference in your app:

### Swift

```swift
let callable = functions.httpsCallable("addMessage")
callable.timeoutInterval = 300  // 300 seconds (default is 70)
let result = try await callable.call(["text": text, "push": true])
```

### Objective-C

```objective-c
FIRHTTPSCallable *callable = [self.functions HTTPSCallableWithName:@"addMessage"];
callable.timeoutInterval = 300;  // 300 seconds (default is 70)
[callable callWithObject:@{@"text": text, @"push": @YES}
              completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) {
  // ...
}];
```

### Web

```javascript
var addMessage = firebase.functions().httpsCallable('addMessage', {
  timeout: 300000,  // 300 seconds in milliseconds (default is 70000)
});
addMessage({ text: messageText })
  .then((result) => {
    // ...
  });
```

### Web

```javascript
import { getFunctions, httpsCallable } from "firebase/functions";

const functions = getFunctions();
const addMessage = httpsCallable(functions, 'addMessage', {
  timeout: 300000,  // 300 seconds in milliseconds (default is 70000)
});
const result = await addMessage({ text: messageText });
```

### Kotlin

```kotlin
val callable = functions.getHttpsCallable("addMessage")
callable.setTimeout(300L, TimeUnit.SECONDS)
val result = callable.call(data).await()
```

### Java

```java
HttpsCallableReference callable = mFunctions.getHttpsCallable("addMessage");
callable.setTimeout(300L, TimeUnit.SECONDS);
Task<HttpsCallableResult> result = callable.call(data);
```

### Dart

```dart
final callable = FirebaseFunctions.instance.httpsCallable(
  'addMessage',
  options: HttpsCallableOptions(
    timeout: const Duration(seconds: 300),
  ),
);
final result = await callable.call({
  'text': text,
  'push': true,
});
```

## Recommended: Prevent abuse with App Check

Before you launch your app, you should enable [App Check](https://firebase.google.com/docs/app-check/cloud-functions.md.txt)
to help ensure that only your apps can access your callable function endpoints.