2026-04-22 09:52:55 +08:00
using System ;
using System.Collections.Generic ;
using System.Runtime.InteropServices ;
using UnityEngine ;
using System.Reflection ;
namespace AppsFlyerSDK
{
#if UNITY_IOS | | UNITY_STANDALONE_OSX
public class AppsFlyeriOS : IAppsFlyerIOSBridge
{
public bool isInit { get ; set ; }
public AppsFlyeriOS ( ) { }
public AppsFlyeriOS ( string devKey , string appID , MonoBehaviour gameObject )
{
setAppsFlyerDevKey ( devKey ) ;
setAppleAppID ( appID ) ;
if ( gameObject ! = null )
{
#if UNITY_IOS
getConversionData ( gameObject . name ) ;
#elif UNITY_STANDALONE_OSX
getConversionData ( gameObject . GetType ( ) . ToString ( ) ) ;
#endif
}
}
/// <summary>
/// Start Session.
/// This will record a session and then record all background forground sessions during the lifecycle of the app.
/// </summary>
public void startSDK ( bool shouldCallback , string CallBackObjectName )
{
#if UNITY_STANDALONE_OSX & & ! UNITY_EDITOR
_startSDK ( shouldCallback , CallBackObjectName , getCallback ) ;
#elif UNITY_IOS & & ! UNITY_EDITOR
_startSDK ( shouldCallback , CallBackObjectName ) ;
#endif
}
/// <summary>
/// Send an In-App Event.
/// In-App Events provide insight on what is happening in your app.
/// </summary>
/// <param name="eventName">Name of event.</param>
/// <param name="eventValues">Contains dictionary of values for handling by backend.</param>
public void sendEvent ( string eventName , Dictionary < string , string > eventValues )
{
sendEvent ( eventName , eventValues , false , AppsFlyer . CallBackObjectName ) ;
}
public void sendEvent ( string eventName , Dictionary < string , string > eventValues , bool shouldCallback , string callBackObjectName )
{
#if ! UNITY_EDITOR
_afSendEvent ( eventName , AFMiniJSON . Json . Serialize ( eventValues ) , shouldCallback , callBackObjectName ) ;
#endif
}
/// <summary>
/// Get the conversion data.
/// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level.
/// By doing this you can serve users with personalized content or send them to specific activities within the app,
/// which can greatly enhance their engagement with your app.
/// </summary>
public void getConversionData ( string objectName )
{
#if ! UNITY_EDITOR
_getConversionData ( objectName ) ;
#endif
}
/// <summary>
/// In case you use your own user ID in your app, you can set this property to that ID.
/// Enables you to cross-reference your own unique ID with AppsFlyer’ s unique ID and the other devices’ IDs.
/// </summary>
/// <param name="customerUserID">Customer ID for client.</param>
public void setCustomerUserId ( string customerUserID )
{
#if ! UNITY_EDITOR
_setCustomerUserID ( customerUserID ) ;
#endif
}
/// <summary>
/// In case you use custom data and you want to receive it in the raw reports.
/// see [Setting additional custom data] (https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS#setting-additional-custom-data) for more information.
/// </summary>
/// <param name="customData">additional data Dictionary.</param>
public void setAdditionalData ( Dictionary < string , string > customData )
{
#if ! UNITY_EDITOR
_setAdditionalData ( AFMiniJSON . Json . Serialize ( customData ) ) ;
#endif
}
/// <summary>
/// Use this method to set your AppsFlyer's dev key.
/// </summary>
/// <param name="appsFlyerDevKey">AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param>
public void setAppsFlyerDevKey ( string appsFlyerDevKey )
{
#if ! UNITY_EDITOR
_setAppsFlyerDevKey ( appsFlyerDevKey ) ;
#endif
}
/// <summary>
/// Use this method to set your app's Apple ID(taken from the app's page on iTunes Connect).
/// </summary>
/// <param name="appleAppID">your app's Apple ID.</param>
public void setAppleAppID ( string appleAppID )
{
#if ! UNITY_EDITOR
_setAppleAppID ( appleAppID ) ;
#endif
}
/// <summary>
/// Setting user local currency code for in-app purchases.
/// The currency code should be a 3 character ISO 4217 code. (default is USD).
/// You can set the currency code for all events by calling the following method.
/// </summary>
/// <param name="currencyCode">3 character ISO 4217 code.</param>
public void setCurrencyCode ( string currencyCode )
{
#if ! UNITY_EDITOR
_setCurrencyCode ( currencyCode ) ;
#endif
}
/// <summary>
/// AppsFlyer SDK collect Apple's `advertisingIdentifier` if the `AdSupport.framework` included in the SDK.
/// You can disable this behavior by setting the following property to true.
/// </summary>
/// <param name="disableCollectAppleAdSupport">boolean to disableCollectAppleAdSupport</param>
public void setDisableCollectAppleAdSupport ( bool disableCollectAppleAdSupport )
{
#if ! UNITY_EDITOR
_setDisableCollectAppleAdSupport ( disableCollectAppleAdSupport ) ;
#endif
}
/// <summary>
/// Enables Debug logs for the AppsFlyer SDK.
/// Should only be set to true in development / debug.
/// The default value is false.
/// </summary>
/// <param name="isDebug">shouldEnable boolean..</param>
public void setIsDebug ( bool isDebug )
{
#if ! UNITY_EDITOR
_setIsDebug ( isDebug ) ;
#endif
}
/// <summary>
/// Set this flag to true, to collect the current device name(e.g. "My iPhone"). Default value is false.
/// </summary>
/// <param name="shouldCollectDeviceName">boolean shouldCollectDeviceName.</param>
[System.Obsolete("This is deprecated")]
public void setShouldCollectDeviceName ( bool shouldCollectDeviceName )
{
#if ! UNITY_EDITOR
_setShouldCollectDeviceName ( shouldCollectDeviceName ) ;
#endif
}
/// <summary>
/// Set the OneLink ID that should be used for User-Invites.
/// The link that is generated for the user invite will use this OneLink as the base link.
/// </summary>
/// <param name="appInviteOneLinkID">OneLink ID obtained from the AppsFlyer Dashboard.</param>
public void setAppInviteOneLinkID ( string appInviteOneLinkID )
{
#if ! UNITY_EDITOR
_setAppInviteOneLinkID ( appInviteOneLinkID ) ;
#endif
}
/// <summary>
/// Set the deepLink timeout value that should be used for DDL.
/// </summary>
/// <param name="deepLinkTimeout">deepLink timeout in milliseconds.</param>
public void setDeepLinkTimeout ( long deepLinkTimeout )
{
#if ! UNITY_EDITOR
_setDeepLinkTimeout ( deepLinkTimeout ) ;
#endif
}
/// <summary>
/// Calling enableTCFDataCollection(true) will enable collecting and sending any TCF related data.
/// Calling enableTCFDataCollection(false) will disable the collection of TCF related data and from sending it.
/// </summary>
/// <param name = "shouldCollectTcfData" >should start TCF Data collection boolean.</param>
public void enableTCFDataCollection ( bool shouldCollectTcfData )
{
#if ! UNITY_EDITOR
_enableTCFDataCollection ( shouldCollectTcfData ) ;
#endif
}
/// <summary>
/// Sets or updates the user consent data related to GDPR and DMA regulations for advertising and data usage purposes within the application.
/// </summary>
/// <param name = "appsFlyerConsent" >instance of AppsFlyerConsent.</param>
public void setConsentData ( AppsFlyerConsent appsFlyerConsent )
{
#if ! UNITY_EDITOR
2026-04-22 11:13:16 +08:00
string isUserSubjectToGDPR = appsFlyerConsent . isUserSubjectToGDPR ? . ToString ( ) . ToLower ( ) ? ? "null" ;
string hasConsentForDataUsage = appsFlyerConsent . hasConsentForDataUsage ? . ToString ( ) . ToLower ( ) ? ? "null" ;
string hasConsentForAdsPersonalization = appsFlyerConsent . hasConsentForAdsPersonalization ? . ToString ( ) . ToLower ( ) ? ? "null" ;
string hasConsentForAdStorage = appsFlyerConsent . hasConsentForAdStorage ? . ToString ( ) . ToLower ( ) ? ? "null" ;
_setConsentData ( isUserSubjectToGDPR , hasConsentForDataUsage , hasConsentForAdsPersonalization , hasConsentForAdStorage ) ;
2026-04-22 09:52:55 +08:00
#endif
}
/// <summary>
/// Logs ad revenue data along with additional parameters if provided.
/// </summary>
/// <param name = "adRevenueData" >instance of AFAdRevenueData containing ad revenue information.</param>
/// <param name = "additionalParameters" >An optional map of additional parameters to be logged with ad revenue data. This can be null if there are no additional parameters.</param>
public void logAdRevenue ( AFAdRevenueData adRevenueData , Dictionary < string , string > additionalParameters )
{
#if ! UNITY_EDITOR
_logAdRevenue ( adRevenueData . monetizationNetwork , adRevenueData . mediationNetwork , adRevenueData . currencyIso4217Code , adRevenueData . eventRevenue , AFMiniJSON . Json . Serialize ( additionalParameters ) ) ;
#endif
}
/// <summary>
/// Anonymize user Data.
/// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions.
/// Default is false
/// </summary>
/// <param name="shouldAnonymizeUser">boolean shouldAnonymizeUser.</param>
public void anonymizeUser ( bool shouldAnonymizeUser )
{
#if ! UNITY_EDITOR
_anonymizeUser ( shouldAnonymizeUser ) ;
#endif
}
/// <summary>
/// Opt-out for Apple Search Ads attributions.
/// </summary>
/// <param name="disableCollectIAd">boolean disableCollectIAd.</param>
public void setDisableCollectIAd ( bool disableCollectIAd )
{
#if ! UNITY_EDITOR
_setDisableCollectIAd ( disableCollectIAd ) ;
#endif
}
/// <summary>
/// In app purchase receipt validation Apple environment(production or sandbox). The default value is false.
/// </summary>
/// <param name="useReceiptValidationSandbox">boolean useReceiptValidationSandbox.</param>
public void setUseReceiptValidationSandbox ( bool useReceiptValidationSandbox )
{
#if ! UNITY_EDITOR
_setUseReceiptValidationSandbox ( useReceiptValidationSandbox ) ;
#endif
}
/// <summary>
/// Set this flag to test uninstall on Apple environment(production or sandbox). The default value is false.
/// </summary>
/// <param name="useUninstallSandbox">boolean useUninstallSandbox.</param>
public void setUseUninstallSandbox ( bool useUninstallSandbox )
{
#if ! UNITY_EDITOR
_setUseUninstallSandbox ( useUninstallSandbox ) ;
#endif
}
/// <summary>
/// For advertisers who wrap OneLink within another Universal Link.
/// An advertiser will be able to deeplink from a OneLink wrapped within another Universal Link and also record this retargeting conversion.
/// </summary>
/// <param name="resolveDeepLinkURLs">Array of urls.</param>
public void setResolveDeepLinkURLs ( params string [ ] resolveDeepLinkURLs )
{
#if ! UNITY_EDITOR
_setResolveDeepLinkURLs ( resolveDeepLinkURLs . Length , resolveDeepLinkURLs ) ;
#endif
}
/// <summary>
/// For advertisers who use vanity OneLinks.
/// </summary>
/// <param name="oneLinkCustomDomains">Array of domains.</param>
public void setOneLinkCustomDomain ( params string [ ] oneLinkCustomDomains )
{
#if ! UNITY_EDITOR
_setOneLinkCustomDomains ( oneLinkCustomDomains . Length , oneLinkCustomDomains ) ;
#endif
}
/// <summary>
/// Set the user emails and encrypt them.
/// cryptMethod Encryption method:
/// EmailCryptType.EmailCryptTypeMD5
/// EmailCryptType.EmailCryptTypeSHA1
/// EmailCryptType.EmailCryptTypeSHA256
/// EmailCryptType.EmailCryptTypeNone
/// </summary>
/// <param name="cryptType">type Hash algoritm.</param>
/// <param name="length">length of userEmails array.</param>
/// <param name="userEmails">userEmails The list of strings that hold mails.</param>}
public void setUserEmails ( EmailCryptType cryptType , params string [ ] userEmails )
{
#if ! UNITY_EDITOR
_setUserEmails ( cryptType , userEmails . Length , userEmails ) ;
#endif
}
/// <summary>
/// Set the user phone number.
/// </summary>
/// <param name="phoneNumber">User phoneNumber.</param>
public void setPhoneNumber ( string phoneNumber ) {
#if ! UNITY_EDITOR
_setPhoneNumber ( phoneNumber ) ;
#endif
}
/// <summary>
/// To send and validate in app purchases you can call this method from the processPurchase method - please use v2.
/// </summary>
/// <param name="productIdentifier">The product identifier.</param>
/// <param name="price">The product price.</param>
/// <param name="currency">The product currency.</param>
/// <param name="transactionId">The purchase transaction Id.</param>
/// <param name="additionalParameters">The additional param, which you want to receive it in the raw reports.</param>
public void validateAndSendInAppPurchase ( string productIdentifier , string price , string currency , string transactionId , Dictionary < string , string > additionalParameters , MonoBehaviour gameObject )
{
#if ! UNITY_EDITOR
_validateAndSendInAppPurchase ( productIdentifier , price , currency , transactionId , AFMiniJSON . Json . Serialize ( additionalParameters ) , gameObject ? gameObject . name : null ) ;
#endif
}
/// <summary>
/// V2
/// To send and validate in app purchases you can call this method from the processPurchase method.
/// </summary>
/// <param name="details">The AFSDKPurchaseDetailsIOS instance.</param>
/// <param name="extraEventValues">The extra params, which you want to receive it in the raw reports.</param>
public void validateAndSendInAppPurchase ( AFSDKPurchaseDetailsIOS details , Dictionary < string , string > extraEventValues , MonoBehaviour gameObject )
{
#if ! UNITY_EDITOR
_validateAndSendInAppPurchaseV2 ( details . productId , details . price , details . currency , details . transactionId , AFMiniJSON . Json . Serialize ( extraEventValues ) , gameObject ? gameObject . name : null ) ;
#endif
}
/// <summary>
/// To record location for geo-fencing. Does the same as code below.
/// </summary>
/// <param name="longitude">The location longitude.</param>
/// <param name="latitude">The location latitude.</param>
public void recordLocation ( double longitude , double latitude )
{
#if ! UNITY_EDITOR
_recordLocation ( longitude , latitude ) ;
#endif
}
/// <summary>
/// Get AppsFlyer's unique device ID, which is created for every new install of an app.
/// </summary>
public string getAppsFlyerId ( )
{
#if ! UNITY_EDITOR
return _getAppsFlyerId ( ) ;
#else
return "" ;
#endif
}
/// <summary>
/// Register uninstall - you should register for remote notification and provide AppsFlyer the push device token.
/// </summary>
/// <param name="deviceToken">deviceToken The `deviceToken` from `-application:didRegisterForRemoteNotificationsWithDeviceToken:`.</param>
public void registerUninstall ( byte [ ] deviceToken )
{
#if ! UNITY_EDITOR
_registerUninstall ( deviceToken ) ;
#endif
}
/// <summary>
/// Enable AppsFlyer to handle a push notification.
/// </summary>
/// <param name="pushPayload">pushPayload The `userInfo` from received remote notification. One of root keys should be @"af"..</param>
public void handlePushNotification ( Dictionary < string , string > pushPayload )
{
#if ! UNITY_EDITOR
_handlePushNotification ( AFMiniJSON . Json . Serialize ( pushPayload ) ) ;
#endif
}
/// <summary>
/// Get SDK version.
/// </summary>
public string getSdkVersion ( )
{
#if ! UNITY_EDITOR
return _getSDKVersion ( ) ;
#else
return "" ;
#endif
}
/// <summary>
/// This property accepts a string value representing the host name for all endpoints.
/// Can be used to Zero rate your application’ s data usage.Contact your CSM for more information.
/// </summary>
/// <param name="host">Host Name.</param>
/// <param name="host">Host prefix.</param>
public void setHost ( string hostPrefix , string host )
{
#if ! UNITY_EDITOR
_setHost ( host , hostPrefix ) ;
#endif
}
/// <summary>
/// This property is responsible for timeout between sessions in seconds.
/// Default value is 5 seconds.
/// </summary>
/// <param name="minTimeBetweenSessions">minimum time between 2 separate sessions in seconds.</param>
public void setMinTimeBetweenSessions ( int minTimeBetweenSessions )
{
#if ! UNITY_EDITOR
_setMinTimeBetweenSessions ( minTimeBetweenSessions ) ;
#endif
}
/// <summary>
/// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning.
/// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance.
/// This can be achieved with the stopSDK API.
/// </summary>
/// <param name="isSDKStopped">boolean isSDKStopped.</param>
public void stopSDK ( bool isSDKStopped )
{
#if ! UNITY_EDITOR
_stopSDK ( isSDKStopped ) ;
#endif
}
// <summary>
/// Was the stopSDK(boolean) API set to true.
/// </summary>
/// <returns>boolean isSDKStopped.</returns>
public bool isSDKStopped ( )
{
#if ! UNITY_EDITOR
return _isSDKStopped ( ) ;
#else
return false ;
#endif
}
/// <summary>
/// In case you want to track deep linking manually call handleOpenUrl.
/// The continueUserActivity and onOpenURL are implemented in the AppsFlyerAppController.mm class, so
/// only use this method if the other methods do not cover your apps deeplinking needs.
/// </summary>
/// <param name="url">The URL to be passed to your AppDelegate.</param>
/// <param name="sourceApplication">The sourceApplication to be passed to your AppDelegate.</param>
/// <param name="annotation">The annotation to be passed to your app delegate.</param>
public void handleOpenUrl ( string url , string sourceApplication , string annotation )
{
#if ! UNITY_EDITOR
_handleOpenUrl ( url , sourceApplication , annotation ) ;
#endif
}
/// <summary>
/// Used by advertisers to exclude all networks/integrated partners from getting data.
/// </summary>
public void setSharingFilterForAllPartners ( )
{
#if ! UNITY_EDITOR
_setSharingFilterForAllPartners ( ) ;
#endif
}
/// <summary>
/// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data.
/// </summary>
/// <param name="partners">partners to exclude from getting data</param>
public void setSharingFilter ( params string [ ] partners )
{
#if ! UNITY_EDITOR
_setSharingFilter ( partners . Length , partners ) ;
#endif
}
/// <summary>
/// Lets you configure how which partners should the SDK exclude from data-sharing.
/// <param name="partners">partners to exclude from getting data</param>
public static void setSharingFilterForPartners ( params string [ ] partners )
{
#if ! UNITY_EDITOR
_setSharingFilterForPartners ( partners . Length , partners ) ;
#endif
}
/// <summary>
/// To record an impression use the following API call.
/// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard.
/// </summary>
/// <param name="appID">promoted App ID.</param>
/// <param name="campaign">cross promotion campaign.</param>
/// <param name="parameters">parameters Dictionary.</param>
public void recordCrossPromoteImpression ( string appID , string campaign , Dictionary < string , string > parameters )
{
#if ! UNITY_EDITOR
_recordCrossPromoteImpression ( appID , campaign , AFMiniJSON . Json . Serialize ( parameters ) ) ;
#endif
}
/// <summary>
/// Use the following API to attribute the click and launch the app store's app page.
/// </summary>
/// <param name="appID">promoted App ID</param>
/// <param name="campaign">cross promotion campaign</param>
/// <param name="parameters">additional user params</param>
public void attributeAndOpenStore ( string appID , string campaign , Dictionary < string , string > parameters , MonoBehaviour gameObject )
{
#if ! UNITY_EDITOR
_attributeAndOpenStore ( appID , campaign , AFMiniJSON . Json . Serialize ( parameters ) , gameObject ? gameObject . name : null ) ;
#endif
}
/// <summary>
/// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click.
/// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution-
/// </summary>
/// <param name="parameters">parameters Dictionary.</param>
public void generateUserInviteLink ( Dictionary < string , string > parameters , MonoBehaviour gameObject )
{
#if ! UNITY_EDITOR
_generateUserInviteLink ( AFMiniJSON . Json . Serialize ( parameters ) , gameObject ? gameObject . name : null ) ;
#endif
}
/// <summary>
/// It is recommended to generate an in-app event after the invite is sent to record the invites from the senders' perspective.
/// This enables you to find the users that tend most to invite friends, and the media sources that get you these users.
/// </summary>
/// <param name="channel">channel string.</param>
/// <param name="parameters">parameters Dictionary..</param>
public void recordInvite ( string channel , Dictionary < string , string > parameters )
{
#if ! UNITY_EDITOR
_recordInvite ( channel , AFMiniJSON . Json . Serialize ( parameters ) ) ;
#endif
}
/// <summary>
/// Waits for request user authorization to access app-related data
/// </summary>
/// <param name="timeoutInterval">time to wait until session starts</param>
public void waitForATTUserAuthorizationWithTimeoutInterval ( int timeoutInterval )
{
#if ! UNITY_EDITOR
_waitForATTUserAuthorizationWithTimeoutInterval ( timeoutInterval ) ;
#endif
}
/// <summary>
/// </summary>
/// <param name="isDisabled">bool should diable</param>
public void disableSKAdNetwork ( bool isDisabled )
{
#if ! UNITY_EDITOR
_disableSKAdNetwork ( isDisabled ) ;
#endif
}
/// <summary>
/// Use this method if you’ re integrating your app with push providers
/// that don’ t use the default push notification JSON schema the SDK expects.
/// See docs for more info.
/// </summary>
/// <param name="paths">array of nested json path</param>
public void addPushNotificationDeepLinkPath ( params string [ ] paths )
{
#if ! UNITY_EDITOR
_addPushNotificationDeepLinkPath ( paths . Length , paths ) ;
#endif
}
/// <summary>
/// subscribe to unified deep link callbacks
/// </summary>
public void subscribeForDeepLink ( string objectName ) {
#if ! UNITY_EDITOR
_subscribeForDeepLink ( objectName ) ;
#endif
}
/// <summary>
/// Set the language of the device.
/// </summary>
public void setCurrentDeviceLanguage ( string language ) {
#if ! UNITY_EDITOR
_setCurrentDeviceLanguage ( language ) ;
#endif
}
/// <summary>
/// Allows sending custom data for partner integration purposes.
/// </summary>
public void setPartnerData ( string partnerId , Dictionary < string , string > partnerInfo ) {
#if ! UNITY_EDITOR
_setPartnerData ( partnerId , AFMiniJSON . Json . Serialize ( partnerInfo ) ) ;
#endif
}
/// <summary>
/// Use to disable app vendor identifier (IDFV) collection, 'true' to disable.
/// </summary>
public void disableIDFVCollection ( bool isDisabled ) {
#if ! UNITY_EDITOR
_disableIDFVCollection ( isDisabled ) ;
#endif
}
delegate void unityCallBack ( string message ) ;
[AOT.MonoPInvokeCallback(typeof(unityCallBack))]
public static void getCallback ( string gameObjectName , string callbackName , string message )
{
GameObject go = GameObject . Find ( "AppsFlyerObject" ) ;
var afscript = go . GetComponent ( "AppsFlyerObjectScript" ) as AppsFlyerObjectScript ;
Type type = typeof ( AppsFlyerObjectScript ) ;
MethodInfo info = type . GetMethod ( callbackName ) ;
info . Invoke ( afscript , new [ ] { message } ) ;
}
/*
* AppsFlyer ios method mapping
*/
#if UNITY_IOS
[DllImport("__Internal")]
private static extern void _startSDK ( bool shouldCallback , string objectName ) ;
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
private static extern void _startSDK ( bool shouldCallback , string objectName , Action < string , string , string > getCallback ) ;
#endif
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _getConversionData ( string objectName ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setCustomerUserID ( string customerUserID ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setAdditionalData ( string customData ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setAppsFlyerDevKey ( string appsFlyerDevKey ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setAppleAppID ( string appleAppID ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setCurrencyCode ( string currencyCode ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setDisableCollectAppleAdSupport ( bool disableCollectAppleAdSupport ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setIsDebug ( bool isDebug ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setShouldCollectDeviceName ( bool shouldCollectDeviceName ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setAppInviteOneLinkID ( string appInviteOneLinkID ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setDeepLinkTimeout ( long deepLinkTimeout ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _anonymizeUser ( bool shouldAnonymizeUser ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _enableTCFDataCollection ( bool shouldCollectTcfData ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
2026-04-22 11:13:16 +08:00
private static extern void _setConsentData ( string isUserSubjectToGDPR , string hasConsentForDataUsage , string hasConsentForAdsPersonalization , string hasConsentForAdStorage ) ;
2026-04-22 09:52:55 +08:00
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _logAdRevenue ( string monetizationNetwork , MediationNetwork mediationNetwork , string currencyIso4217Code , double eventRevenue , string additionalParameters ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setDisableCollectIAd ( bool disableCollectIAd ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setUseReceiptValidationSandbox ( bool useReceiptValidationSandbox ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setUseUninstallSandbox ( bool useUninstallSandbox ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setResolveDeepLinkURLs ( int length , params string [ ] resolveDeepLinkURLs ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setOneLinkCustomDomains ( int length , params string [ ] oneLinkCustomDomains ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setUserEmails ( EmailCryptType cryptType , int length , params string [ ] userEmails ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setPhoneNumber ( string phoneNumber ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _afSendEvent ( string eventName , string eventValues , bool shouldCallback , string objectName ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _validateAndSendInAppPurchase ( string productIdentifier , string price , string currency , string transactionId , string additionalParameters , string objectName ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _validateAndSendInAppPurchaseV2 ( string product , string price , string currency , string transactionId , string extraEventValues , string objectName ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _recordLocation ( double longitude , double latitude ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern string _getAppsFlyerId ( ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _registerUninstall ( byte [ ] deviceToken ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _handlePushNotification ( string pushPayload ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern string _getSDKVersion ( ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setHost ( string host , string hostPrefix ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setMinTimeBetweenSessions ( int minTimeBetweenSessions ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _stopSDK ( bool isStopSDK ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern bool _isSDKStopped ( ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _handleOpenUrl ( string url , string sourceApplication , string annotation ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setSharingFilterForAllPartners ( ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setSharingFilter ( int length , params string [ ] partners ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setSharingFilterForPartners ( int length , params string [ ] partners ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _recordCrossPromoteImpression ( string appID , string campaign , string parameters ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _attributeAndOpenStore ( string appID , string campaign , string parameters , string gameObject ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _generateUserInviteLink ( string parameters , string gameObject ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _recordInvite ( string channel , string parameters ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _waitForATTUserAuthorizationWithTimeoutInterval ( int timeoutInterval ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _disableSKAdNetwork ( bool isDisabled ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _addPushNotificationDeepLinkPath ( int length , params string [ ] paths ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _subscribeForDeepLink ( string objectName ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setCurrentDeviceLanguage ( string language ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _setPartnerData ( string partnerId , string partnerInfo ) ;
#if UNITY_IOS
[DllImport("__Internal")]
#elif UNITY_STANDALONE_OSX
[DllImport("AppsFlyerBundle")]
#endif
private static extern void _disableIDFVCollection ( bool isDisabled ) ;
}
#endif
}