> [!WARNING]
> **Warning:** The Instance ID API is deprecated. If you need to access unique app installation identifiers, use the [Firebase installations](https://firebase.google.com/docs/projects/manage-installations) API. See also [Firebase installations and Instance ID](https://firebase.google.com/docs/projects/manage-installations#fid-iid). The [server-side topic management API](https://developers.google.com/instance-id/reference/server#create_relationship_maps_for_app_instances) is still available.

## Key features

In addition to providing unique IDs for authentication, Instance ID
can generate security tokens for use with other services. Other features
include:

### Generate Security Tokens

:   Instance ID provides a simple API to generate security tokens that
    authorize third parties to access your app's server side managed resources.

### Verify app authenticity

:   Pass Instance ID tokens to your server and use the Instance ID
    service to verify the app package name and check if it has a valid signature.
    Verifying tokens with the Instance ID Cloud Service helps identify known
    apps. To reduce cost and redundant round trip communications, configure your
    server to store these tokens so the check is needed only once.
    In the event of a security concern, your app can delete tokens, or
    Instance ID itself, and generate new ones. In addition, the
    Instance ID server initiates token or Instance ID refresh if it
    detects bugs or security issues.

### Confirm app device is active

:   The Instance ID server can tell you when the device on which your app
    is installed was last used. Use this to decide whether to keep data from your
    app or send a push message to reengage with your users.

### Identify and track apps

:   Instance ID is unique across all app instances across the world, so
    your database can use it to uniquely identify and track app instances. Your
    server-side code can verify, via the Instance ID cloud service, that an
    Instance ID is genuine and is the same ID as the original app that
    registered with your server. For privacy, your app can delete an Instance ID so
    it is no longer associated with any history in the database. The next time your
    app calls Instance ID it will get an entirely new Instance ID with no
    relationship to its previous one.

## Instance ID lifecycle

1. The Instance ID service issues an `InstanceID` when your app comes online. The `InstanceID` is backed by a public/private key pair with the private key stored on the local device and the public key registered with the Instance ID service.
2. Your app can request a fresh `InstanceID` whenever needed using the `getID()` method. Your app can store it on your server if you have one that supports your app.
3. Your app can request tokens from the Instance ID service as needed using the `getToken()` method, and like `InstanceID`, your app can also store tokens on your own server. All tokens issued to your app belong to the app's `InstanceID`.
4. Tokens are unique and secure, but your app or the Instance ID service may need to refresh tokens in the event of a security issue or when a user uninstalls and reinstalls your app during device restoration. Your app must implement a listener to respond to token refresh requests from the Instance ID service.

## Client implementation

Instance ID runs on both Android and iOS. Each requires you to include
the appropriate library in your client app. Android requires
[Google Play Services](https://developer.android.com/google/play-services/index.html). You will need a Project ID generated
by the [](https://developers.google.com/console/help/new)[Google Developers Console](https://console.developers.google.com/project) if you intend
to generate tokens.

For detailed instructions, see the [Android](https://developers.google.com/instance-id/guides/android-implementation)
and [iOS](https://developers.google.com/instance-id/guides/ios-implementation) implementation guides.