# AppsFlyer

[AppsFlyer](https://www.appsflyer.com/overview/) is the market leader in mobile advertising attribution and analytics, helping marketers to pinpoint their targeting, optimize their ad spend and boost their ROI (Return on Investment).

AppsFlyer allows users to monitor and track application installations, downloads, and conversions. The AppsFlyer API allows developers to access and integrate the functionality of AppsFlyer with other applications.

## Prerequisite

In order to enable AppsFlyer to start tracking your app, you are required to have the following two information such as:

1. `devKey`: Your application devKey provided by AppsFlyer.
2. `appId`: (For iOS only) Your iOS app ID in the App Store.

## Adding AppsFlyer to Monaca Project

1. For Monaca Cloud IDE, go to `Configure → Service Integration Settings`.
2. Click on `Details` button of *AppsFlyer* service.
3. Then, click `Install` button to add it into your project.

![](/files/-MfbsWIJuG89bQtn6rMV)

&#x20;   4\. You will be asked to confirm the setup. Click  to start the installation.

## Configuration

Add the following lines to your code to initialize the tracking with your own AppsFlyer `devKey` and `appId`:

```javascript
document.addEventListener("deviceready", function(){

    var options = {
        devKey:  'xxXXXXXxXxXXXXxXXxxxx8'  // your AppsFlyer devKey
    };

    var userAgent = window.navigator.userAgent.toLowerCase();

    if (/iphone|ipad|ipod/.test(userAgent)) {
        options.appId = "123456789";       // your ios app id in app store
    }

    window.plugins.appsFlyer.initSdk(options);

}, false);
```

## Usage

### SDK Initialization

Initialize the SDK.

```javascript
initSdk(options, onSuccess, onError): void
```

**Parameter**

| Name        | Type                        | Description                                                                |
| ----------- | --------------------------- | -------------------------------------------------------------------------- |
| `options`   | Object                      | SDK configuration (please refer to the *options object* table below)       |
| `onSuccess` | (`message`: string) => void | (optional) Success callback: called after a successful SDK initialization. |
| `onError`   | (`message`: string) => void | (optional) Error callback: called when error occurs during initialization. |

**options object**

| Name                              | Type    | Default | Description                                                                                                                                                                                                                                                                                                                                                                                                    |
| --------------------------------- | ------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `devKey`                          | String  |         | [Appsflyer Dev key](https://support.appsflyer.com/hc/en-us/articles/211719806-App-Settings#sdk-dev-key)                                                                                                                                                                                                                                                                                                        |
| `appId`                           | String  |         | (For iOS only) Your iOS app ID in the App Store                                                                                                                                                                                                                                                                                                                                                                |
| `isDebug`                         | Boolean | `false` | (optional) Debug mode                                                                                                                                                                                                                                                                                                                                                                                          |
| `onInstallConversionDataListener` | Boolean | `false` | <p>Accessing AppsFlyer Attribution/Conversion Data from the SDK (Deferred Deeplinking). AppsFlyer plugin will return attribution data in onSuccess callback. For more information, please refer to: </p><p></p><ul><li><a href="https://support.appsflyer.com/hc/en-us/articles/207032096-Deferred-Deep-Linking-Getting-the-Conversion-Data">Deferred Deep Linking - Getting the Conversion Data</a></li></ul> |

**Example**

The following snippet shows how to use `initSdk()` function:

```javascript
var onSuccess = function(result) {
    //handle result
};

function onError(err) {
    // handle error
}

var options = {
    devKey:  'd3Ac9qPardVYZxfWmCspwL',
    appId: '123456789',
    isDebug: false,
    onInstallConversionDataListener: true
};

window.plugins.appsFlyer.initSdk(options, onSuccess, onError);
```

### In-App Events Tracking API

Allow you to send in-app events to AppsFlyer analytics. This method allows you to add events dynamically by adding them directly to the application code. These in-app events help you track how loyal users discover your app, and attribute them to specific campaigns/media-sources. Please take the time to define the event(s) you want to measure to allow you to track ROI (Return on Investment) and LTV (Lifetime Value).

```javascript
trackEvent(eventName, eventValues): void (optional)
```

**Parameter**

| Name         | Type   | Description                                        |
| ------------ | ------ | -------------------------------------------------- |
| `eventName`  | String | Custom event name, is presented in your dashboard. |
| `eventValue` | Object | Event details                                      |

**Example**

The following snippet shows how to use `trackEvent()` function:

```javascript
var eventName = "af_add_to_cart";

var eventValues = {
    "af_content_id": "id123",
    "af_currency":"USD",
    "af_revenue": "2"
};

window.plugins.appsFlyer.trackEvent(eventName, eventValues);
```

### Currency Code Setting

Change the currency code.

```javascript
setCurrencyCode(currencyId): void
```

**Parameter**

| Name         | Type   | Default | Description                                              |
| ------------ | ------ | ------- | -------------------------------------------------------- |
| `currencyId` | String | `USD`   | [ISO 4217 Currency Codes](http://www.xe.com/iso4217.php) |

**Example**

The following snippet shows how to use `setCurrencyCode()` function:

```javascript
window.plugins.appsFlyer.setCurrencyCode("USD");
window.plugins.appsFlyer.setCurrencyCode("GBP"); // British Pound
```

### Customer User ID Setting (Advanced)

Set your own custom ID. This enables you to cross-reference your own unique ID with AppsFlyer’s user ID and the other devices’ IDs. This ID is available in AppsFlyer CSV reports along with postbacks APIs for cross-referencing with you internal IDs.

{% hint style="info" %}
The ID must be set during the first launch of the app at the SDK initialization. The best practice is to call this API during the `deviceready` event, where possible.
{% endhint %}

```javascript
setAppUserId(customerUserId): void
```

**Parameter**

| Name             | Type   | Description    |
| ---------------- | ------ | -------------- |
| `customerUserId` | String | Your custom ID |

**Example**

The following snippet shows how to use `setAppUserId()` function:

```javascript
window.plugins.appsFlyer.setAppUserId(userId);
```

### GCM Project Number Setting

Set a GCM Project Number in order to enable app uninstall tracking for Android platform.

```javascript
setGCMProjectID(GCMProjectNumber): void
```

**Parameter**

| Name               | Type   | Description                                                                                                                                                                                                                                        |
| ------------------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GCMProjectNumber` | String | GCM Project number. It is obtained through your google developer console. For more information, please refer to [Android Uninstall Measurement](https://support.appsflyer.com/hc/en-us/articles/210289286-Uninstall-Measurement#AndroidUninstall). |

### Uninstall Tracking

Set your iOS device token in order to enable app uninstall tracking for iOS platform.

```javascript
registerUninstall(token): void
```

**Parameter**

| Name    | Type   | Description                                                                                                                                                                                                                                                                                                                           |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `token` | String | Your iOS device token. You can get your device token from `UnityEngine.iOS.NotificationServices.deviceToken`. For more information, please refer to [Unity](https://support.appsflyer.com/hc/en-us/articles/213766183-Unity) and [iOS Uninstall Measurement](https://support.appsflyer.com/hc/en-us/articles/210289286#iOSUninstall). |

### Getting AppsFlyer's Device ID

Get AppsFlyer’s proprietary Device ID. The AppsFlyer Device ID is the main ID used by AppsFlyer in Reports and APIs.

```javascript
getAppsFlyerUID(getUserIdCallbackFn): void
```

**Parameter**

| Name                  | Type       | Description      |
| --------------------- | ---------- | ---------------- |
| `getUserIdCallbackFn` | () => void | Success callback |

**Example**

The following snippet shows how to use `getAppsFlyerUID()` function:

```javascript
var getUserIdCallbackFn = function(id) {
    alert('received id is: ' + id);
}
window.plugins.appsFlyer.getAppsFlyerUID(getUserIdCallbackFn);
```

### Deeplinks Tracking

Track deeplinks with AppsFlyer attribution data (for iOS only).

{% hint style="info" %}
For Android version 4.2.5 and higher, the deeplinking metadata (scheme/host) is sent automatically.
{% endhint %}

```javascript
handleOpenUrl(url): void
```

**Parameter**

| Name  | Type   | Description |
| ----- | ------ | ----------- |
| `url` | String | Url         |

**Example**

The following snippet shows how to use `handleOpenUrl()` function:

```javascript
var handleOpenURL = function(url) {
    window.plugins.appsFlyer.handleOpenUrl(url);
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://en.docs.monaca.io/reference/service_integration/apps_flyer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
