@moxspoy/react-native-idfa-aaid
v2.0.0
Published
React Native module to get IDFA (iOS) or AAID (Android) with New Architecture support
Maintainers
Readme
@moxspoy/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.
Note: This is a maintained fork of the original
@sparkfabrik/react-native-idfa-aaidpackage with React Native New Architecture (TurboModules) support and updated dependencies.
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
Features
- ✅ React Native New Architecture (TurboModules) support
- ✅ Backward compatible with legacy architecture
- ✅ TypeScript support
- ✅ Updated dependencies compatible with Node.js 18+
- ✅ iOS 17.4+ bug fixes
Installation
npm install @moxspoy/react-native-idfa-aaidor
yarn add @moxspoy/react-native-idfa-aaidThen run pod install in your ios folder after installation.
Requirements
- React Native >= 0.70.0
- Node.js >= 18.0.0
- iOS >= 11.0
- Android minSdkVersion >= 21
Migration from @sparkfabrik/react-native-idfa-aaid
If you're migrating from the original @sparkfabrik/react-native-idfa-aaid package:
Uninstall the old package:
npm uninstall @sparkfabrik/react-native-idfa-aaid # or yarn remove @sparkfabrik/react-native-idfa-aaidInstall the new package:
npm install @moxspoy/react-native-idfa-aaid # or yarn add @moxspoy/react-native-idfa-aaidUpdate imports in your code:
- import ReactNativeIdfaAaid from '@sparkfabrik/react-native-idfa-aaid'; + import ReactNativeIdfaAaid from '@moxspoy/react-native-idfa-aaid';Run
pod installin your iOS directoryRebuild your app - no code changes required, the API remains the same!
React Native New Architecture Support
This package fully supports React Native's New Architecture (TurboModules). It automatically detects whether your app is using the new or legacy architecture and uses the appropriate implementation.
Enabling New Architecture
To enable the New Architecture in your React Native app, follow the official React Native documentation.
The package will automatically work with TurboModules when New Architecture is enabled in your app.
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": "..."
}
]
]
}
}⚠️ iOS Simulator Note: The iOS Simulator always returns a zeroed-out IDFA (
00000000-0000-0000-0000-000000000000). This is expected Apple behavior. To test with real IDFA values, use a physical iOS device.
React Native components
Example of a basic integration in a RN component.
import ReactNativeIdfaAaid, { AdvertisingInfoResponse } from '@moxspoy/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 '@moxspoy/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
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
Credits
This package is a maintained fork of @sparkfabrik/react-native-idfa-aaid. Original work by Sparkfabrik.
