JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 19454
  • Score
    100M100P100Q176141F
  • License MIT

React Native module to get IDFA (iOS) or AAID (Android)

Package Exports

  • @sparkfabrik/react-native-idfa-aaid
  • @sparkfabrik/react-native-idfa-aaid/lib/commonjs/index.js
  • @sparkfabrik/react-native-idfa-aaid/lib/module/index.js
  • @sparkfabrik/react-native-idfa-aaid/src/index.tsx

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@sparkfabrik/react-native-idfa-aaid) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@sparkfabrik/react-native-idfa-aaid

React Native module to get IDFA (iOS) or AAID (Android)

Intro

React Native is a framework for creating native mobile apps based on React.

The Advertising Identifier (IDFA on iOS, AAID on Android) is a device-specific, unique, resettable ID for advertising that allows developers and marketers to track activity for advertising purposes.

This npm module allows any mobile application built with React Native to access the Advertising ID, following the OS specific definition and user permissions.

The module output in the RN framework is the following:

interface AdvertisingInfoResponse {
  id: string; // the Advertising ID (or null if not defined/permitted)
  isAdTrackingLimited: boolean; // the user defined permission to track
}

Supported platform

  • Android
  • iOS

Installation

npm install @sparkfabrik/react-native-idfa-aaid

or

yarn add @sparkfabrik/react-native-idfa-aaid

Then run pod install in your ios folder after installation.

Usage

iOS configuration

For native apps, in info.plist make sure to add:

<key>NSUserTrackingUsageDescription</key>
<string>...</string>

For Expo apps, in app.json make sure to add:

{
  "expo": {
    "plugins": [
      [
        "expo-tracking-transparency",
        {
          "userTrackingPermission": "..."
        }
      ]
    ]
  }
}

React Native components

Example of a basic integration in a RN component.

import ReactNativeIdfaAaid, { AdvertisingInfoResponse } from '@sparkfabrik/react-native-idfa-aaid';

const MyComponent: React.FC = () => {
  const [idfa, setIdfa] = useState<string | null>();

  useEffect(() => {
    ReactNativeIdfaAaid.getAdvertisingInfo()
      .then((res: AdvertisingInfoResponse) =>
        !res.isAdTrackingLimited ? setIdfa(res.id) : setIdfa(null),
      )
      .catch((err) => {
        console.log(err);
        return setIdfa(null);
      });
  }, []);

iOS 17.4

In order to prevent a bug present in iOS 17.4 we also expose the getAdvertisingInfoAndCheckAuthorization(check: boolean) which aims to solve the problem of ATT Tracking Manager returning status denied even if the ATT modal was not yet displayed to the user.

import ReactNativeIdfaAaid, { AdvertisingInfoResponse } from '@sparkfabrik/react-native-idfa-aaid';

const MyComponent: React.FC = () => {
  const [idfa, setIdfa] = useState<string | null>();

  useEffect(() => {
    ReactNativeIdfaAaid.getAdvertisingInfoAndCheckAuthorization(true)
      .then((res: AdvertisingInfoResponse) =>
        !res.isAdTrackingLimited ? setIdfa(res.id) : setIdfa(null),
      )
      .catch((err) => {
        console.log(err);
        return setIdfa(null);
      });
  }, []);

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT