using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; namespace AppsFlyerSDK { #if UNITY_IOS public class AppsFlyeriOS { /// /// Start Session. /// This will record a session and then record all background forground sessions during the lifecycle of the app. /// public static void startSDK() { #if !UNITY_EDITOR _startSDK(); #endif } /// /// Send an In-App Event. /// In-App Events provide insight on what is happening in your app. /// /// Name of event. /// Contains dictionary of values for handling by backend. public static void sendEvent(string eventName, Dictionary eventValues) { #if !UNITY_EDITOR _afSendEvent(eventName, AFMiniJSON.Json.Serialize(eventValues)); #endif } /// /// 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. /// public static void getConversionData(string objectName) { #if !UNITY_EDITOR _getConversionData(objectName); #endif } /// /// 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. /// /// Customer ID for client. public static void setCustomerUserID(string customerUserID) { #if !UNITY_EDITOR _setCustomerUserID(customerUserID); #endif } /// /// 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. /// /// additional data Dictionary. public static void setAdditionalData(Dictionary customData) { #if !UNITY_EDITOR _setAdditionalData(AFMiniJSON.Json.Serialize(customData)); #endif } /// /// Use this method to set your AppsFlyer's dev key. /// /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. public static void setAppsFlyerDevKey(string appsFlyerDevKey) { #if !UNITY_EDITOR _setAppsFlyerDevKey(appsFlyerDevKey); #endif } /// /// Use this method to set your app's Apple ID(taken from the app's page on iTunes Connect). /// /// your app's Apple ID. public static void setAppleAppID(string appleAppID) { #if !UNITY_EDITOR _setAppleAppID(appleAppID); #endif } /// /// 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. /// /// 3 character ISO 4217 code. public static void setCurrencyCode(string currencyCode) { #if !UNITY_EDITOR _setCurrencyCode(currencyCode); #endif } /// /// 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. /// /// boolean to disableCollectAppleAdSupport public static void setDisableCollectAppleAdSupport(bool disableCollectAppleAdSupport) { #if !UNITY_EDITOR _setDisableCollectAppleAdSupport(disableCollectAppleAdSupport); #endif } /// /// Enables Debug logs for the AppsFlyer SDK. /// Should only be set to true in development / debug. /// The default value is false. /// /// shouldEnable boolean.. public static void setIsDebug(bool isDebug) { #if !UNITY_EDITOR _setIsDebug(isDebug); #endif } /// /// Set this flag to true, to collect the current device name(e.g. "My iPhone"). Default value is false. /// /// boolean shouldCollectDeviceName. public static void setShouldCollectDeviceName(bool shouldCollectDeviceName) { #if !UNITY_EDITOR _setShouldCollectDeviceName(shouldCollectDeviceName); #endif } /// /// 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. /// /// OneLink ID obtained from the AppsFlyer Dashboard. public static void setAppInviteOneLinkID(string appInviteOneLinkID) { #if !UNITY_EDITOR _setAppInviteOneLinkID(appInviteOneLinkID); #endif } /// /// Anonymize user Data. /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. /// Default is false /// /// boolean shouldAnonymizeUser. public static void anonymizeUser(bool shouldAnonymizeUser) { #if !UNITY_EDITOR _anonymizeUser(shouldAnonymizeUser); #endif } /// /// Opt-out for Apple Search Ads attributions. /// /// boolean disableCollectIAd. public static void setDisableCollectIAd(bool disableCollectIAd) { #if !UNITY_EDITOR _setDisableCollectIAd(disableCollectIAd); #endif } /// /// In app purchase receipt validation Apple environment(production or sandbox). The default value is false. /// /// boolean useReceiptValidationSandbox. public static void setUseReceiptValidationSandbox(bool useReceiptValidationSandbox) { #if !UNITY_EDITOR _setUseReceiptValidationSandbox(useReceiptValidationSandbox); #endif } /// /// Set this flag to test uninstall on Apple environment(production or sandbox). The default value is false. /// /// boolean useUninstallSandbox. public static void setUseUninstallSandbox(bool useUninstallSandbox) { #if !UNITY_EDITOR _setUseUninstallSandbox(useUninstallSandbox); #endif } /// /// 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. /// /// Array of urls. public static void setResolveDeepLinkURLs(params string[] resolveDeepLinkURLs) { #if !UNITY_EDITOR _setResolveDeepLinkURLs(resolveDeepLinkURLs.Length,resolveDeepLinkURLs); #endif } /// /// For advertisers who use vanity OneLinks. /// /// Array of domains. public static void setOneLinkCustomDomains(params string[] oneLinkCustomDomains) { #if !UNITY_EDITOR _setOneLinkCustomDomains(oneLinkCustomDomains.Length, oneLinkCustomDomains); #endif } /// /// Set the user emails and encrypt them. /// cryptMethod Encryption method: /// EmailCryptType.EmailCryptTypeMD5 /// EmailCryptType.EmailCryptTypeSHA1 /// EmailCryptType.EmailCryptTypeSHA256 /// EmailCryptType.EmailCryptTypeNone /// /// type Hash algoritm. /// length of userEmails array. /// userEmails The list of strings that hold mails. public static void setUserEmails(EmailCryptType cryptType, int length, params string[] userEmails) { #if !UNITY_EDITOR _setUserEmails(cryptType, length, userEmails); #endif } /// /// Set the user phone number. /// /// User phoneNumber. public static void setPhoneNumber(string phoneNumber){ #if !UNITY_EDITOR _setPhoneNumber(phoneNumber); #endif } /// /// To send and validate in app purchases you can call this method from the processPurchase method. /// /// The product identifier. /// The product price. /// The product currency. /// The purchase transaction Id. /// The additional param, which you want to receive it in the raw reports. public static void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string tranactionId, Dictionary additionalParameters, MonoBehaviour gameObject) { #if !UNITY_EDITOR _validateAndSendInAppPurchase(productIdentifier, price, currency, tranactionId, AFMiniJSON.Json.Serialize(additionalParameters), gameObject ? gameObject.name : null); #endif } /// /// To record location for geo-fencing. Does the same as code below. /// /// The location longitude. /// The location latitude. public static void recordLocation(double longitude, double latitude) { #if !UNITY_EDITOR _recordLocation(longitude, latitude); #endif } /// /// Get AppsFlyer's unique device ID, which is created for every new install of an app. /// public static string getAppsFlyerId() { #if !UNITY_EDITOR return _getAppsFlyerId(); #else return ""; #endif } /// /// Register uninstall - you should register for remote notification and provide AppsFlyer the push device token. /// /// deviceToken The `deviceToken` from `-application:didRegisterForRemoteNotificationsWithDeviceToken:`. public static void registerUninstall(byte[] deviceToken) { #if !UNITY_EDITOR _registerUninstall(deviceToken); #endif } /// /// Enable AppsFlyer to handle a push notification. /// /// pushPayload The `userInfo` from received remote notification. One of root keys should be @"af".. public static void handlePushNotification(Dictionary pushPayload) { #if !UNITY_EDITOR _handlePushNotification(AFMiniJSON.Json.Serialize(pushPayload)); #endif } /// /// Get SDK version. /// public static string getSDKVersion() { #if !UNITY_EDITOR return _getSDKVersion(); #else return ""; #endif } /// /// 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. /// /// Host Name. /// Host prefix. public static void setHost(string host, string hostPrefix) { #if !UNITY_EDITOR _setHost(host, hostPrefix); #endif } /// /// This property is responsible for timeout between sessions in seconds. /// Default value is 5 seconds. /// /// minimum time between 2 separate sessions in seconds. public static void setMinTimeBetweenSessions(int minTimeBetweenSessions) { #if !UNITY_EDITOR _setMinTimeBetweenSessions(minTimeBetweenSessions); #endif } /// /// 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. /// /// boolean isSDKStopped. public static void stopSDK(bool isSDKStopped) { #if !UNITY_EDITOR _stopSDK(isSDKStopped); #endif } // /// Was the stopSDK(boolean) API set to true. /// /// boolean isSDKStopped. public static bool isSDKStopped() { #if !UNITY_EDITOR return _isSDKStopped(); #else return false; #endif } /// /// 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. /// /// The URL to be passed to your AppDelegate. /// The sourceApplication to be passed to your AppDelegate. /// The annotation to be passed to your app delegate. public static void handleOpenUrl(string url, string sourceApplication, string annotation) { #if !UNITY_EDITOR _handleOpenUrl(url, sourceApplication, annotation); #endif } /// /// Used by advertisers to exclude all networks/integrated partners from getting data. /// public static void setSharingFilterForAllPartners() { #if !UNITY_EDITOR _setSharingFilterForAllPartners(); #endif } /// /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. /// /// partners to exclude from getting data public static void setSharingFilter(params string[] partners) { #if !UNITY_EDITOR _setSharingFilter(partners.Length, partners); #endif } /// /// To record an impression use the following API call. /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. /// /// promoted App ID. /// cross promotion campaign. /// parameters Dictionary. public static void recordCrossPromoteImpression(string appID, string campaign, Dictionary parameters) { #if !UNITY_EDITOR _recordCrossPromoteImpression(appID, campaign, AFMiniJSON.Json.Serialize(parameters)); #endif } /// /// Use the following API to attribute the click and launch the app store's app page. /// /// promoted App ID /// cross promotion campaign /// additional user params public static void attributeAndOpenStore(string appID, string campaign, Dictionary parameters, MonoBehaviour gameObject) { #if !UNITY_EDITOR _attributeAndOpenStore(appID, campaign, AFMiniJSON.Json.Serialize(parameters), gameObject ? gameObject.name : null); #endif } /// /// 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- /// /// parameters Dictionary. public static void generateUserInviteLink(Dictionary parameters, MonoBehaviour gameObject) { #if !UNITY_EDITOR _generateUserInviteLink(AFMiniJSON.Json.Serialize(parameters), gameObject ? gameObject.name : null); #endif } /// /// 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. /// /// channel string. /// parameters Dictionary.. public static void recordInvite(string channel, Dictionary parameters) { #if !UNITY_EDITOR _recordInvite(channel, AFMiniJSON.Json.Serialize(parameters)); #endif } /* * AppsFlyer ios method mapping */ [DllImport("__Internal")] private static extern void _startSDK(); [DllImport("__Internal")] private static extern void _getConversionData(string objectName); [DllImport("__Internal")] private static extern void _setCustomerUserID(string customerUserID); [DllImport("__Internal")] private static extern void _setAdditionalData(string customData); [DllImport("__Internal")] private static extern void _setAppsFlyerDevKey(string appsFlyerDevKey); [DllImport("__Internal")] private static extern void _setAppleAppID(string appleAppID); [DllImport("__Internal")] private static extern void _setCurrencyCode(string currencyCode); [DllImport("__Internal")] private static extern void _setDisableCollectAppleAdSupport(bool disableCollectAppleAdSupport); [DllImport("__Internal")] private static extern void _setIsDebug(bool isDebug); [DllImport("__Internal")] private static extern void _setShouldCollectDeviceName(bool shouldCollectDeviceName); [DllImport("__Internal")] private static extern void _setAppInviteOneLinkID(string appInviteOneLinkID); [DllImport("__Internal")] private static extern void _anonymizeUser(bool shouldAnonymizeUser); [DllImport("__Internal")] private static extern void _setDisableCollectIAd(bool disableCollectIAd); [DllImport("__Internal")] private static extern void _setUseReceiptValidationSandbox(bool useReceiptValidationSandbox); [DllImport("__Internal")] private static extern void _setUseUninstallSandbox(bool useUninstallSandbox); [DllImport("__Internal")] private static extern void _setResolveDeepLinkURLs(int length, params string[] resolveDeepLinkURLs); [DllImport("__Internal")] private static extern void _setOneLinkCustomDomains(int length, params string[] oneLinkCustomDomains); [DllImport("__Internal")] private static extern void _setUserEmails(EmailCryptType cryptType, int length, params string[] userEmails); [DllImport("__Internal")] private static extern void _setPhoneNumber(string phoneNumber); [DllImport("__Internal")] private static extern void _afSendEvent(string eventName, string eventValues); [DllImport("__Internal")] private static extern void _validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string tranactionId, string additionalParameters, string objectName); [DllImport("__Internal")] private static extern void _recordLocation(double longitude, double latitude); [DllImport("__Internal")] private static extern string _getAppsFlyerId(); [DllImport("__Internal")] private static extern void _registerUninstall(byte[] deviceToken); [DllImport("__Internal")] private static extern void _handlePushNotification(string pushPayload); [DllImport("__Internal")] private static extern string _getSDKVersion(); [DllImport("__Internal")] private static extern void _setHost(string host, string hostPrefix); [DllImport("__Internal")] private static extern void _setMinTimeBetweenSessions(int minTimeBetweenSessions); [DllImport("__Internal")] private static extern void _stopSDK(bool isStopSDK); [DllImport("__Internal")] private static extern bool _isSDKStopped(); [DllImport("__Internal")] private static extern void _handleOpenUrl(string url, string sourceApplication, string annotation); [DllImport("__Internal")] private static extern void _setSharingFilterForAllPartners(); [DllImport("__Internal")] private static extern void _setSharingFilter(int length, params string[] partners); [DllImport("__Internal")] private static extern void _recordCrossPromoteImpression(string appID, string campaign, string parameters); [DllImport("__Internal")] private static extern void _attributeAndOpenStore(string appID, string campaign, string parameters, string gameObject); [DllImport("__Internal")] private static extern void _generateUserInviteLink(string parameters, string gameObject); [DllImport("__Internal")] private static extern void _recordInvite(string channel, string parameters); } #endif }