Skip to content

Latest commit

Β 

History

1,051 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Cordova AppsFlyer plugin for Android and iOS.

npm version
License: MIT
Downloads

πŸ›  In order for us to provide optimal support, please contact AppsFlyer support through the Customer Assistant Chatbot for assistance with troubleshooting issues or product guidance.
To do so, please follow this article


Please check out our brand new Capacitor plugin.

This plugin is not 100% compatible for use with Capacitor! To use this plugin with Capacitor, you have to make changes and customize the code by yourself. (Feel free to fork the project)


❗️Important

  • Cordova AppsFlyer plugin version 4.4.0 and higher are meant to be used with cordova-android@7.0.0 and up

    For lower versions of cordova-android please use plugin version 4.3.3 available @ https://github.com/AppsFlyerSDK/cordova-plugin-appsflyer-sdk/tree/4.3.3
  • From version 6.1.10 the plugin uses cocoapods(NOT StaticLib) in order to support iOS app-kids Strict mode.

    You can read more here
  • From version 6.10.2 the plugin requires using the implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.6.20' in Android.
  • From version 6.14.3 the plugin requires Target version 12 and higher in iOS.
  • From version 6.15.11 the plugin requires adding the value '/usr/lib/swift' to Build Settings 'RunPath Search Paths' key in iOS.

Table of content

  • iOS AppsFlyerSDK v7.0.13 (AppsFlyerRPC v7.0.13)
  • Android AppsFlyerSDK v7.0.1 (af-android-plugin-bridge v7.0.13)

Plugin v7.0.2 moves onto AppsFlyer's shared RPC core (AppsFlyerRPC on iOS, af-android-plugin-bridge on Android, @appsflyer-sdk/js-core-plugin in JS). This is a major, intentionally breaking release β€” old method names, callback-style calls, and a few methods with no equivalent in the new schema are gone, not deprecated. There is no compatibility shim; update every call site. Full method-by-method mapping: RELEASENOTES.md / API.md.

  • Every method is now Promise-based. fn(args, successCB, errorCB) β†’ await AppsFlyer.fn(params). Failures throw (AppsFlyerRpcError for transport failures, AppsFlyerError for SDK failures) instead of calling an error callback.
  • Renamed: initSdkβ†’init, startSdkβ†’start, setAppUserIdβ†’setCustomerUserId, Stopβ†’stop, logCrossPromotionAndOpenStoreβ†’logAndOpenStore, setPhoneNumberβ†’setUserPhone (now requires countryCode), setUserEmailsβ†’setUserEmail (single email, not an array), and more β€” see API.md for every signature.
  • Removed, no replacement: registerOnAppOpenAttribution (folded into registerDeepLinkListener), registerUninstall, setSharingFilter/setSharingFilterForAllPartners (already deprecated, superseded by setSharingFilterForPartners), the AppsFlyerConsent and AFPurchaseDetails classes (pass a plain object instead).
  • start() is no longer implicit after init() β€” call it from inside registerSessionReadyListener's callback. See the updated example below.
  • Dependencies: iOS pod is now AppsFlyerRPC (was AppsFlyerFramework). Android needs JDK 21 to build (was 17). See Installation.md.

iOS platform: The plugin requires adding the value '/usr/lib/swift' to Build Settings 'RunPath Search Paths' key in iOS, Otherwise there might be some compilation errors.

Android platform: In order to receive data regarding install-referrer from AppGallery now, there is a need to add implementation to the gradle file.
following the instructions in this link.
please follow also these Cordova doc guidlines here.

We have renamed the following APIs:

Old API New API
trackEvent logEvent
stopTracking Stop
trackCrossPromotionImpression logCrossPromotionImpression
trackAndOpenStore logCrossPromotionAndOpenStore
setDeviceTrackingDisabled anonymizeUser
$ cordova plugin add cordova-plugin-appsflyer-sdk  

To install cordova manually check out the doc here.

NOTE: for Ionic installation see this section

⚠️ Adding AD_ID permission for Android ⚠️

In v6.8.0 of the AppsFlyer SDK, we added the normal permission com.google.android.gms.permission.AD_ID to the SDK's AndroidManifest, to allow the SDK to collect the Android Advertising ID on apps targeting API 33. If your app is targeting children, you need to revoke this permission to comply with Google's Data policy. You can read more about it here.

Use strict mode to completely remove IDFA and Advertising ID collection (for example, when developing apps for kids under COPPA or Google Play Families policy).

Enabling strict mode

Add the AppsFlyerStrictMode preference to your app's config.xml:

<preference name="AppsFlyerStrictMode" value="true" />

During cordova prepare, the plugin automatically:

  • iOS: Switches the CocoaPods dependency to AppsFlyerRPC/Strict (which pulls AppsFlyerFramework/Strict) and runs pod install.
  • Android: Removes the com.google.android.gms.permission.AD_ID permission from the prepared AndroidManifest.xml.

To disable strict mode, remove the preference or set its value to "false". The hook restores the standard dependencies on the next cordova prepare.

Great installation and setup guides can be viewed here.

Set your App_ID (iOS only), Dev_Key and enable AppsFlyer to detect installations, sessions (app opens) and updates. > This is the minimum requirement to start tracking your app installs and is already implemented in this plugin. You MUST modify this call and provide:

devKey - Your application devKey provided by AppsFlyer.

appId - For iOS only. Your iTunes Application ID.

Add the following lines to your code to be able to initialize tracking with your own AppsFlyer dev key:

document.addEventListener('deviceready', async function() {  

  const AppsFlyer = window.plugins.appsFlyer;

  // Register the deep-link listener before init().
  await AppsFlyer.registerDeepLinkListener({
    onDeepLinking: (data) => console.log(data),
  });

  await AppsFlyer.init({
    devKey: 'K2***************99', // your AppsFlyer devKey
    appId: '41*****44', // your iOS appID
  });

  // start() is no longer implicit after init() β€” call it once the session is ready.
  await AppsFlyer.registerSessionReadyListener(() => {
    AppsFlyer.start().catch((error) => console.error(error));
  });

}, false);  

See the full API available for this plugin.

Clone this Git repository to use the demo apps; the npm package doesn't include examples/. The repository contains two demos, each with its own Makefile:

In either folder, copy .env.example to .env and fill in your DEV_KEY and APP_ID, then run:

make ios      # build and run on an iOS simulator  
make android  # build and run on an Android emulator  

make help lists the available targets, and make clean removes the synced-out build copy.
Check out our Sample-App Let's cook! here if you want to implement our SDK inside React-Cordova app

NOTICE! In AppsFlyer Cordova plugin version 6.x.x we replaced the word track with log from all our api but Ionic-Navite Appsflyer plugin still uses track

So the latest version that can work with Ionic-Native for now is 5.4.30

Using the window object directly

Install the cordova plugin:

$ ionic cordova plugin add cordova-plugin-appsflyer-sdk  

In your main ts file, declare a window variable:

declare var window;  

Now you can use the AppsFlyer plugin directly from cordova:

import {Component} from '@angular/core';  
import {Platform} from '@ionic/angular';  
  
declare var window;  
...  
export class HomePage {  
  constructor(public platform: Platform) {  
  this.platform.ready().then(async () => {  
  const AppsFlyer = window.plugins.appsFlyer;
  await AppsFlyer.registerDeepLinkListener({ onDeepLinking: (data) => console.log(data) });
  await AppsFlyer.init({ devKey, appId });
  await AppsFlyer.registerSessionReadyListener(() => {
    AppsFlyer.start().catch((error) => console.error(error));
  });
 }); }}  

Check out the full API for more information

About

AppsFlyer plugin for Cordova

Resources

Stars

39 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages