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
}