Home

Awesome

capacitor-firebase-appcheck

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->

All Contributors

<!-- ALL-CONTRIBUTORS-BADGE:END -->

Allows usage of native AppCheck tokens in a Capacitor Hybrid application. From the Firebase Docs:

App Check works alongside other Firebase services to help protect your backend resources from abuse, such as billing fraud or phishing.

Install

npm install capacitor-firebase-appcheck
npx cap sync

Prereqs

You must enable AppCheck within your Firebase Project before installing this plugin. The location for both iOS and Android is the same, but the requirements for both are slightly different. See below for getting AppCheck set up in your console (note, you only need to follow step one as this plugin takes the place of everything after):

Set up AppCheck on iOS with AppAttest (>iOS 14)

Set up AppCheck on iOS with DeviceCheck (<iOS 14)

Set up AppCheck on Android with SafetyNet

iOS

For iOS, you need to ensure firebase is set up in your project before continuing. You can use this link to the iOS Firebase Docs to see how to set up your project.

Android

For Android, you also need to ensure firebase is set up in your project before continuing. You can use this link to the Android Firebase Docs (Step 3) to see how to set up your project.

Usage

// import firebase and appcheck
import { firebase } from 'firebase';
import { AppCheck } from 'capacitor-firebase-appcheck';

try {
  // initialise AppCheck
  AppCheck.initialize({
    // enable debugging if in staging or dev environments. Default is false.
    debug: true
  });

  // create custom appcheck provider
  const appCheckCustomProvider = {
    getToken: async () => {
      // get the token from native
      const { token, exp: expTimeMillis } = await AppCheck.getAppCheckToken();

      return {
        token,
        expireTimeMillis
      }
    }
  }

  // activate appcheck [set true to refresh the token automatically on expiry]
  firebase.appCheck().activate(appCheckCustomProvider, true);


} catch (err) {
  // log any errors
  console.error(err);
}

API

<docgen-index> </docgen-index> <docgen-api> <!--Update the source file JSDoc comments and rerun docgen to update the docs below-->

initialize(...)

initialize(options?: InitializationOptions | undefined) => Promise<boolean>

A method to initialise the AppCheck plugin. This must be called once and once only before calling any other method. Returns true on success or false on failure. Check native logs to see the actual problem.

ParamType
options<code><a href="#initializationoptions">InitializationOptions</a></code>

Returns: <code>boolean</code>

Since: 1.0.0


getAppCheckToken()

getAppCheckToken() => Promise<AppCheckToken>

Get's the native AppCheck token from AppAttest/DeviceCheck on iOS[>=14/<14] or SafetyNet on Android.

Returns: <code>Promise<<a href="#AppCheckToken">AppCheckToken</a>></code>

Since: 1.0.0


Interfaces

InitializationOptions

PropTypeDescriptionSince
debug<code>boolean</code>If debug is enabled, the native environment will log debug creds and use debug mode. Intended to be used with staging or development environmnets only. Do not set this to TRUE in production.1.0.0

AppCheckToken

PropTypeDescriptionSince
token<code>string</code>The token provided by the native environment to be sent to firebase.1.0.0
exp<code>number</code>The expiration date of the token in milliseconds since epoch [Unix time]1.0.0
</docgen-api>

Contributors ✨

Thanks goes to these wonderful people (emoji key):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tr> <td align="center"><a href="https://mattmilan.dev/"><img src="https://avatars.githubusercontent.com/u/49694881?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matt Milan</b></sub></a><br /><a href="https://github.com/mattmilan-dev/capacitor-firebase-appcheck/commits?author=mattmilan-dev" title="Code">💻</a></td> </tr> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the all-contributors specification. Contributions of any kind welcome!