Flutter Appsflyer
Flutter Appsflyer, a way to get ahead with deeplinking and analytics as well in our previous blogs on deeplinking we have discussed various integrations like app referrals, one signal, firebase and now appsflyer.
In this blog we will drive through the appsflyer integrations on both android and iOS, adding test devices and later implementing analytics, deeplinks.
You can find a series of tutorials categorising each task at our official youtube channel
Here you can find relevant code for the tutorials and will be updated accordingly
info.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> .... <key>AppleAppID</key> <string>YOUR_APPLE_APP_ID_HERE</string> <key>NSUserTrackingUsageDescription</key> <string>This identifier will be used to deliver personalized ads</string> </dict> </plist>
pubspec.yaml :
Here you can find following three dependencies
For..
Appsflyer integration in flutter app – appsflyer_sdk
Getting Device info (IDFV) for flutter i..e, android, iOS and more – device_info_plus
Requesting ATT for iOS – app_tracking_transparency
dependencies: flutter: sdk: flutter .... appsflyer_sdk: ^6.15.2 device_info_plus: ^11.3.0 app_tracking_transparency: ^2.0.6+1
main.dart :
import 'package:app_tracking_transparency/app_tracking_transparency.dart'; import 'package:appsflyer_sdk/appsflyer_sdk.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/material.dart'; void main(){ runApp(MyApp()); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { late AppsflyerSdk appsflyerSdk; @override void initState() { super.initState(); appsflyerSdk = AppsflyerSdk( AppsFlyerOptions( afDevKey: "dTUckosyNHAywNJJXAgNvH", appId: "", showDebug: true, timeToWaitForATTUserAuthorization: 0 ) ); appsflyerSdk.initSdk(); //getIDFV(); requestAtt(); } @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( appBar: AppBar( title: const Text("Live Template"), ), body: Center( child: TextButton( onPressed: (){}, child: const Text("Submit"), ), ), ), ); } void getIDFV() async { final deviceInfo = DeviceInfoPlugin(); final iosInfo = await deviceInfo.iosInfo; final idfv = iosInfo.identifierForVendor; print("IDFV : $idfv"); } void requestAtt() async { final status = await AppTrackingTransparency.trackingAuthorizationStatus; if(status== TrackingStatus.notDetermined){ await AppTrackingTransparency.requestTrackingAuthorization(); } getIDFA(); } void getIDFA() async { final status = await AppTrackingTransparency.trackingAuthorizationStatus; if(status == TrackingStatus.authorized){ final idfa = await AppTrackingTransparency.getAdvertisingIdentifier(); print("IDFA : $idfa"); }else{ print("Tracking not authorized : $status"); } } }
If you have ay query’s just let me know in comment section below or in tutorial page on youtube.