From 596405b5672f787fc848fc949f415c0f779536aa Mon Sep 17 00:00:00 2001 From: wsycarlos Date: Sat, 6 Dec 2025 16:42:27 +0800 Subject: [PATCH] First Version of AppsFlyerSDK Package --- .gitignore | 106 ++ .../com.bywaystudios.appsflyersdk/Editor.meta | 8 + .../Editor/AppsFlyer.Editor.asmdef | 17 + .../Editor/AppsFlyer.Editor.asmdef.meta | 7 + .../Editor/AppsFlyerDependencies.xml | 16 + .../Editor/AppsFlyerDependencies.xml.meta | 7 + .../Editor/AppsFlyerObjectEditor.cs | 84 ++ .../Editor/AppsFlyerObjectEditor.cs.meta | 11 + .../Editor/appsflyer_logo.png | Bin 0 -> 9426 bytes .../Editor/appsflyer_logo.png.meta | 92 ++ .../Plugins.meta | 8 + .../Plugins/Mac.meta | 8 + .../Plugins/Mac/AppsFlyerBundle.bundle.meta | 81 ++ .../Contents/Info.plist | 48 + .../Contents/MacOS/AppsFlyerBundle | Bin 0 -> 1132768 bytes .../Contents/_CodeSignature/CodeResources | 115 ++ .../Plugins/Windows.meta | 8 + .../Plugins/Windows/AppsFlyerLib.pri | Bin 0 -> 672 bytes .../Plugins/Windows/AppsFlyerLib.pri.meta | 7 + .../Plugins/Windows/AppsFlyerLib.winmd | Bin 0 -> 45056 bytes .../Plugins/Windows/AppsFlyerLib.winmd.meta | 92 ++ .../Plugins/Windows/AppsFlyerWindows.cs | 145 +++ .../Plugins/Windows/AppsFlyerWindows.cs.meta | 11 + .../Plugins/iOS.meta | 8 + .../Plugins/iOS/AFUnityStoreKit2Bridge.swift | 79 ++ .../iOS/AFUnityStoreKit2Bridge.swift.meta | 42 + .../Plugins/iOS/AFUnityUtils.h | 24 + .../Plugins/iOS/AFUnityUtils.h.meta | 81 ++ .../Plugins/iOS/AFUnityUtils.mm | 211 ++++ .../Plugins/iOS/AFUnityUtils.mm.meta | 37 + .../Plugins/iOS/AppsFlyer+AppController.m | 164 +++ .../iOS/AppsFlyer+AppController.m.meta | 37 + .../Plugins/iOS/AppsFlyerAppController.mm | 131 ++ .../iOS/AppsFlyerAppController.mm.meta | 37 + .../Plugins/iOS/AppsFlyerAttribution.h | 34 + .../Plugins/iOS/AppsFlyerAttribution.h.meta | 81 ++ .../Plugins/iOS/AppsFlyerAttribution.m | 86 ++ .../Plugins/iOS/AppsFlyerAttribution.m.meta | 37 + .../Plugins/iOS/AppsFlyeriOSWrapper.h | 71 ++ .../Plugins/iOS/AppsFlyeriOSWrapper.h.meta | 81 ++ .../Plugins/iOS/AppsFlyeriOSWrapper.mm | 620 ++++++++++ .../Plugins/iOS/AppsFlyeriOSWrapper.mm.meta | 37 + .../Runtime.meta | 8 + .../Runtime/AFAdRevenueData.cs | 71 ++ .../Runtime/AFAdRevenueData.cs.meta | 11 + .../Runtime/AFInAppEvents.cs | 72 ++ .../Runtime/AFInAppEvents.cs.meta | 11 + .../Runtime/AFMiniJSON.cs | 547 ++++++++ .../Runtime/AFMiniJSON.cs.meta | 11 + .../Runtime/AFPurchaseDetailsAndroid.cs | 30 + .../Runtime/AFPurchaseDetailsAndroid.cs.meta | 11 + .../Runtime/AFSDKPurchaseDetailsIOS.cs | 37 + .../Runtime/AFSDKPurchaseDetailsIOS.cs.meta | 11 + .../Runtime/AFSDKValidateAndLogResult.cs | 38 + .../Runtime/AFSDKValidateAndLogResult.cs.meta | 11 + .../Runtime/AppsFlyer.asmdef | 13 + .../Runtime/AppsFlyer.asmdef.meta | 7 + .../Runtime/AppsFlyer.cs | 1099 +++++++++++++++++ .../Runtime/AppsFlyer.cs.meta | 11 + .../Runtime/AppsFlyerAndroid.cs | 851 +++++++++++++ .../Runtime/AppsFlyerAndroid.cs.meta | 11 + .../Runtime/AppsFlyerConsent.cs | 71 ++ .../Runtime/AppsFlyerConsent.cs.meta | 11 + .../Runtime/AppsFlyerEventArgs.cs | 218 ++++ .../Runtime/AppsFlyerEventArgs.cs.meta | 11 + .../Runtime/AppsFlyerObject.prefab | 49 + .../Runtime/AppsFlyerObject.prefab.meta | 7 + .../Runtime/AppsFlyerObjectScript.cs | 70 ++ .../Runtime/AppsFlyerObjectScript.cs.meta | 11 + .../Runtime/AppsFlyerPurchaseConnector.cs | 426 +++++++ .../AppsFlyerPurchaseConnector.cs.meta | 11 + .../Runtime/AppsFlyeriOS.cs | 1021 +++++++++++++++ .../Runtime/AppsFlyeriOS.cs.meta | 11 + .../Runtime/IAppsFlyerAndroidBridge.cs | 31 + .../Runtime/IAppsFlyerAndroidBridge.cs.meta | 11 + .../Runtime/IAppsFlyerConversionData.cs | 31 + .../Runtime/IAppsFlyerConversionData.cs.meta | 11 + .../Runtime/IAppsFlyerIOSBridge.cs | 26 + .../Runtime/IAppsFlyerIOSBridge.cs.meta | 11 + .../Runtime/IAppsFlyerNativeBridge.cs | 76 ++ .../Runtime/IAppsFlyerNativeBridge.cs.meta | 11 + .../Runtime/IAppsFlyerPurchaseValidation.cs | 8 + .../IAppsFlyerPurchaseValidation.cs.meta | 11 + .../Runtime/IAppsFlyerUserInvite.cs | 26 + .../Runtime/IAppsFlyerUserInvite.cs.meta | 11 + .../Runtime/IAppsFlyerValidateAndLog.cs | 19 + .../Runtime/IAppsFlyerValidateAndLog.cs.meta | 11 + .../Runtime/IAppsFlyerValidateReceipt.cs | 19 + .../Runtime/IAppsFlyerValidateReceipt.cs.meta | 11 + .../Runtime/ProductPurchase.cs | 184 +++ .../Runtime/ProductPurchase.cs.meta | 11 + .../package.json | 6 + .../package.json.meta | 7 + Packages/manifest.json | 48 + Packages/packages-lock.json | 375 ++++++ ProjectSettings/AudioManager.asset | 19 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 34 + ProjectSettings/EditorBuildSettings.asset | 8 + ProjectSettings/EditorSettings.asset | 30 + ProjectSettings/GraphicsSettings.asset | 63 + ProjectSettings/InputManager.asset | 295 +++++ ProjectSettings/MemorySettings.asset | 35 + ProjectSettings/NavMeshAreas.asset | 91 ++ ProjectSettings/PackageManagerSettings.asset | 35 + .../Settings.json | 5 + ProjectSettings/Physics2DSettings.asset | 56 + ProjectSettings/PresetManager.asset | 7 + ProjectSettings/ProjectSettings.asset | 961 ++++++++++++++ ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | 234 ++++ ProjectSettings/TagManager.asset | 43 + ProjectSettings/TimeManager.asset | 9 + ProjectSettings/UnityConnectSettings.asset | 36 + ProjectSettings/VFXManager.asset | 12 + ProjectSettings/VersionControlSettings.asset | 8 + ProjectSettings/XRSettings.asset | 10 + 117 files changed, 10501 insertions(+) create mode 100644 .gitignore create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyer.Editor.asmdef create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyer.Editor.asmdef.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerDependencies.xml create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerDependencies.xml.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerObjectEditor.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerObjectEditor.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor/appsflyer_logo.png create mode 100644 Packages/com.bywaystudios.appsflyersdk/Editor/appsflyer_logo.png.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Mac.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle/Contents/Info.plist create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle/Contents/MacOS/AppsFlyerBundle create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle/Contents/_CodeSignature/CodeResources create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Windows.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.pri create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.pri.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.winmd create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.winmd.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerWindows.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerWindows.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityStoreKit2Bridge.swift create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityStoreKit2Bridge.swift.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.h create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.h.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.mm create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.mm.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyer+AppController.m create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyer+AppController.m.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAppController.mm create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAppController.mm.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.h create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.h.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.m create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.m.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.h create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.h.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.mm create mode 100644 Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.mm.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFAdRevenueData.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFAdRevenueData.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFInAppEvents.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFInAppEvents.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFMiniJSON.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFMiniJSON.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFPurchaseDetailsAndroid.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFPurchaseDetailsAndroid.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKPurchaseDetailsIOS.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKPurchaseDetailsIOS.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKValidateAndLogResult.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKValidateAndLogResult.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.asmdef create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.asmdef.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerAndroid.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerAndroid.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerConsent.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerConsent.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerEventArgs.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerEventArgs.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObject.prefab create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObject.prefab.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObjectScript.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObjectScript.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerPurchaseConnector.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerPurchaseConnector.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyeriOS.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyeriOS.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerAndroidBridge.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerAndroidBridge.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerConversionData.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerConversionData.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerIOSBridge.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerIOSBridge.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerNativeBridge.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerNativeBridge.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerPurchaseValidation.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerPurchaseValidation.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerUserInvite.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerUserInvite.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateAndLog.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateAndLog.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateReceipt.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateReceipt.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/ProductPurchase.cs create mode 100644 Packages/com.bywaystudios.appsflyersdk/Runtime/ProductPurchase.cs.meta create mode 100644 Packages/com.bywaystudios.appsflyersdk/package.json create mode 100644 Packages/com.bywaystudios.appsflyersdk/package.json.meta create mode 100644 Packages/manifest.json create mode 100644 Packages/packages-lock.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/MemorySettings.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/PackageManagerSettings.asset create mode 100644 ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset create mode 100644 ProjectSettings/VersionControlSettings.asset create mode 100644 ProjectSettings/XRSettings.asset diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff03d40 --- /dev/null +++ b/.gitignore @@ -0,0 +1,106 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +.utmp/ +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ +*.log + +# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control. +*.blend1 +*.blend1.meta + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* +# Jetbrains Rider personal-layer settings +*.DotSettings.user + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Mono auto generated files +mono_crash.* + +# Builds +*.apk +*.aab +*.unitypackage +*.unitypackage.meta + +# Crashlytics generated file +crashlytics-build.properties + +# TestRunner generated files +InitTestScene*.unity* + +# Addressables default ignores, before user customizations +/ServerData +/[Aa]ssets/StreamingAssets/aa* +/[Aa]ssets/AddressableAssetsData/link.xml* +/[Aa]ssets/Addressables_Temp* +# By default, Addressables content builds will generate addressables_content_state.bin +# files in platform-specific subfolders, for example: +# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin +/[Aa]ssets/AddressableAssetsData/*/*.bin* + +# Visual Scripting auto-generated files +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta + +# Auto-generated scenes by play mode tests +/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity* + +.vsconfig + +Logs/ +[Aa]ssets/ +[Pp]ublish/ +.vscode/settings.json +*.dat \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor.meta b/Packages/com.bywaystudios.appsflyersdk/Editor.meta new file mode 100644 index 0000000..114159c --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2fb2821bc1b233f4c92748ea52f3e2e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyer.Editor.asmdef b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyer.Editor.asmdef new file mode 100644 index 0000000..a63b527 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyer.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "AppsFlyer.Editor", + "references": [ + "AppsFlyer" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyer.Editor.asmdef.meta b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyer.Editor.asmdef.meta new file mode 100644 index 0000000..f61dfd3 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyer.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d008146f00dea44d38752b4289e5f65b +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerDependencies.xml b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerDependencies.xml new file mode 100644 index 0000000..c2af605 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerDependencies.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerDependencies.xml.meta b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerDependencies.xml.meta new file mode 100644 index 0000000..1e4d57e --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerDependencies.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a03558dbbfeac45db9afe9e9c2df5a85 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerObjectEditor.cs b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerObjectEditor.cs new file mode 100644 index 0000000..f18e3fa --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerObjectEditor.cs @@ -0,0 +1,84 @@ +using UnityEditor; +using UnityEngine; + + +[CustomEditor(typeof(AppsFlyerObjectScript))] +[CanEditMultipleObjects] +public class AppsFlyerObjectEditor : Editor +{ + + SerializedProperty devKey; + SerializedProperty appID; + SerializedProperty UWPAppID; + SerializedProperty macOSAppID; + SerializedProperty isDebug; + SerializedProperty getConversionData; + + + void OnEnable() + { + devKey = serializedObject.FindProperty("devKey"); + appID = serializedObject.FindProperty("appID"); + UWPAppID = serializedObject.FindProperty("UWPAppID"); + macOSAppID = serializedObject.FindProperty("macOSAppID"); + isDebug = serializedObject.FindProperty("isDebug"); + getConversionData = serializedObject.FindProperty("getConversionData"); + } + + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + GUILayout.Box((Texture)AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(AssetDatabase.FindAssets("appsflyer_logo")[0]), typeof(Texture)), new GUILayoutOption[] { GUILayout.Width(600) }); + + EditorGUILayout.Separator(); + EditorGUILayout.HelpBox("Set your devKey and appID to init the AppsFlyer SDK and start tracking. You must modify these fields and provide:\ndevKey - Your application devKey provided by AppsFlyer.\nappId - For iOS only. Your iTunes Application ID.\nUWP app id - For UWP only. Your application app id \nMac OS app id - For MacOS app only.", MessageType.Info); + + EditorGUILayout.PropertyField(devKey); + EditorGUILayout.PropertyField(appID); + EditorGUILayout.PropertyField(UWPAppID); + EditorGUILayout.PropertyField(macOSAppID); + EditorGUILayout.Separator(); + EditorGUILayout.HelpBox("Enable get conversion data to allow your app to recive deeplinking callbacks", MessageType.None); + EditorGUILayout.PropertyField(getConversionData); + EditorGUILayout.Separator(); + EditorGUILayout.HelpBox("Debugging should be restricted to development phase only.\n Do not distribute the app to app stores with debugging enabled", MessageType.Warning); + EditorGUILayout.PropertyField(isDebug); + EditorGUILayout.Separator(); + + EditorGUILayout.HelpBox("For more information on setting up AppsFlyer check out our relevant docs.", MessageType.None); + + + if (GUILayout.Button("AppsFlyer Unity Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/213766183-Unity-SDK-integration-for-developers"); + } + + if (GUILayout.Button("AppsFlyer Android Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/207032126-Android-SDK-integration-for-developers"); + } + + if (GUILayout.Button("AppsFlyer iOS Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS"); + } + + if (GUILayout.Button("AppsFlyer Deeplinking Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/208874366-OneLink-deep-linking-guide#Setups"); + } + + if (GUILayout.Button("AppsFlyer Windows Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/207032026-Windows-and-Xbox-SDK-integration-for-developers"); + } + + + serializedObject.ApplyModifiedProperties(); + } + + +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerObjectEditor.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerObjectEditor.cs.meta new file mode 100644 index 0000000..53d8abb --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Editor/AppsFlyerObjectEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d248a134cf494486fb1d6a2e95a05d87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor/appsflyer_logo.png b/Packages/com.bywaystudios.appsflyersdk/Editor/appsflyer_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..01c2b8cae0fa888c39bc06375382cb4d0f99ab12 GIT binary patch literal 9426 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 Zqz@UJ#ov8pVgr-_sVHd3m&v{h{U4`cTj~G+ literal 0 HcmV?d00001 diff --git a/Packages/com.bywaystudios.appsflyersdk/Editor/appsflyer_logo.png.meta b/Packages/com.bywaystudios.appsflyersdk/Editor/appsflyer_logo.png.meta new file mode 100644 index 0000000..90005e8 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Editor/appsflyer_logo.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: bc7fa5a6b64b944a4b2900fd877acb8b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins.meta new file mode 100644 index 0000000..5394930 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66297743248ab4e47abdc371a59f1111 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac.meta new file mode 100644 index 0000000..fd182bd --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96a328019e42349aabc478b546b8605e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle.meta new file mode 100644 index 0000000..edbfc60 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 682114f7790724ab3b9410e89bbc076c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 0 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + AndroidSharedLibraryType: Executable + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: OSX + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle/Contents/Info.plist b/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle/Contents/Info.plist new file mode 100644 index 0000000..3303ccd --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle/Contents/Info.plist @@ -0,0 +1,48 @@ + + + + + BuildMachineOSBuild + 20G417 + CFBundleDevelopmentRegion + en + CFBundleExecutable + AppsFlyerBundle + CFBundleIdentifier + com.appsflyer.support.two.AppsFlyerBundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + AppsFlyerBundle + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 13A1030d + DTPlatformName + macosx + DTPlatformVersion + 12.0 + DTSDKBuild + 21A344 + DTSDKName + macosx12.0 + DTXcode + 1310 + DTXcodeBuild + 13A1030d + LSMinimumSystemVersion + 11.6 + NSHumanReadableCopyright + + + diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle/Contents/MacOS/AppsFlyerBundle b/Packages/com.bywaystudios.appsflyersdk/Plugins/Mac/AppsFlyerBundle.bundle/Contents/MacOS/AppsFlyerBundle new file mode 100644 index 0000000000000000000000000000000000000000..3376a474b6e3a7d2b3c481728ba41215a89be2ca GIT binary patch literal 1132768 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∓F|H;Sl(6yaudL-0s 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≶*?i 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К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 + + + + files + + files2 + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows.meta new file mode 100644 index 0000000..859b3f2 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fbfcb6aeaa7f40e69a0daff450a2450 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.pri b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.pri new file mode 100644 index 0000000000000000000000000000000000000000..f3993bee8d6162a8ae52777697f91b353f4144cd GIT binary patch literal 672 zcmaJ2iG)KGH%FJBkSFnie1MvUChXWT zNx@}T_Dpu{U9V%)7*#jr8i>%vKmwqXvBEG2U~6PSuCq#&)&6bA(4RdEbGjtRwaxTl z(y2WLy|7uKO)7dKA!nV;pEBJ3Mq6dldab7Ybp*6Q|EE6l(<0}wn?uCoe3oRR^*`VJ z(z$tNTI~Aw*-v~(VnE=`v(z7ZqeZyFh2S>VdsS4a(RP<4iNw8au0Os4H?X)tidy`D zd)$g|+?T}zUhxi%22UvQA_|UbV`^6;1#Fs literal 0 HcmV?d00001 diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.pri.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.pri.meta new file mode 100644 index 0000000..ed4fbf8 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.pri.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c621896ec81267f478e98555031271ef +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.winmd b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.winmd new file mode 100644 index 0000000000000000000000000000000000000000..381ce32056f48bb1577a824b46040fa737234738 GIT binary patch literal 45056 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 literal 0 HcmV?d00001 diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.winmd.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.winmd.meta new file mode 100644 index 0000000..f1ba1b7 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerLib.winmd.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 5186898c6f4665f438e46763d4cff3ae +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 0 + Exclude Win64: 0 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + AndroidSharedLibraryType: Executable + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: Windows + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + XboxOne: XboxOne + second: + enabled: 1 + settings: {} + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerWindows.cs b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerWindows.cs new file mode 100644 index 0000000..a44fea4 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerWindows.cs @@ -0,0 +1,145 @@ +//#define AFSDK_WIN_DEBUG +//#define UNITY_WSA_10_0 +//#define ENABLE_WINMD_SUPPORT + +#if UNITY_WSA_10_0 +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.ComponentModel; +using UnityEngine; +using System.Threading.Tasks; + +#if ENABLE_WINMD_SUPPORT +using AppsFlyerLib; +#endif + +namespace AppsFlyerSDK +{ + public class AppsFlyerWindows + { +#if ENABLE_WINMD_SUPPORT + static private MonoBehaviour _gameObject = null; +#endif + + public static void InitSDK(string devKey, string appId, MonoBehaviour gameObject) + { +#if ENABLE_WINMD_SUPPORT + +#if AFSDK_WIN_DEBUG + // Remove callstack + Application.SetStackTraceLogType(LogType.Log, StackTraceLogType.None); +#endif + Log("[InitSDK]: devKey: {0}, appId: {1}, gameObject: {2}", devKey, appId, gameObject == null ? "null" : gameObject.ToString()); + AppsFlyerTracker tracker = AppsFlyerTracker.GetAppsFlyerTracker(); + tracker.devKey = devKey; + tracker.appId = appId; + // Interface + _gameObject = gameObject; +#endif + } + + public static string GetAppsFlyerId() + { +#if ENABLE_WINMD_SUPPORT + Log("[GetAppsFlyerId]"); + return AppsFlyerTracker.GetAppsFlyerTracker().GetAppsFlyerUID(); +#else + return ""; +#endif + } + + public static void SetCustomerUserId(string customerUserId) + { +#if ENABLE_WINMD_SUPPORT + Log("[SetCustomerUserId] customerUserId: {0}", customerUserId); + if (customerUserId.Contains("test_device:")) + { + string testDeviceId = customerUserId.Substring(12); + AppsFlyerTracker.GetAppsFlyerTracker().testDeviceId = testDeviceId; + } + AppsFlyerTracker.GetAppsFlyerTracker().customerUserId = customerUserId; +#endif + } + + public static void Start() + { +#if ENABLE_WINMD_SUPPORT + Log("[Start]"); + AppsFlyerTracker.GetAppsFlyerTracker().TrackAppLaunchAsync(Callback); +#endif + } + +#if ENABLE_WINMD_SUPPORT + public static void Callback(AppsFlyerLib.ServerStatusCode code) + { + Log("[Callback]: {0}", code.ToString()); + + AppsFlyerRequestEventArgs eventArgs = new AppsFlyerRequestEventArgs((int)code, code.ToString()); + if (_gameObject != null) { + var method = _gameObject.GetType().GetMethod("AppsFlyerOnRequestResponse"); + if (method != null) { + method.Invoke(_gameObject, new object[] { AppsFlyerTracker.GetAppsFlyerTracker(), eventArgs }); + } + } + } +#endif + + public static void LogEvent(string eventName, Dictionary eventValues) + { +#if ENABLE_WINMD_SUPPORT + if (eventValues == null) + { + eventValues = new Dictionary(); + } + IDictionary result = new Dictionary(); + foreach (KeyValuePair kvp in eventValues) + { + result.Add(kvp.Key.ToString(), kvp.Value); + } + + Log("[LogEvent]: eventName: {0} result: {1}", eventName, result.ToString()); + + AppsFlyerTracker tracker = AppsFlyerTracker.GetAppsFlyerTracker(); + tracker.TrackEvent(eventName, result); + +#endif + } + + + public static void GetConversionData(string _reserved) + { +#if ENABLE_WINMD_SUPPORT + Task.Run(async () => + { + AppsFlyerLib.AppsFlyerTracker tracker = AppsFlyerLib.AppsFlyerTracker.GetAppsFlyerTracker(); + string conversionData = await tracker.GetConversionDataAsync(); + + IAppsFlyerConversionData conversionDataHandler = _gameObject as IAppsFlyerConversionData; + + if (conversionDataHandler != null) + { + Log("[GetConversionData] Will call `onConversionDataSuccess` with: {0}", conversionData); + conversionDataHandler.onConversionDataSuccess(conversionData); + } else { + Log("[GetConversionData] Object with `IAppsFlyerConversionData` interface not found! Check `InitSDK` implementation"); + } + // _gameObject.GetType().GetMethod("onConversionDataSuccess").Invoke(_gameObject, new[] { conversionData }); + }); +#endif + } + + private static void Log(string format, params string[] args) + { +#if AFSDK_WIN_DEBUG +#if ENABLE_WINMD_SUPPORT + Debug.Log("AF_UNITY_WSA_10_0" + String.Format(format, args)); +#endif +#endif + } + + } + +} +#endif diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerWindows.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerWindows.cs.meta new file mode 100644 index 0000000..66f10a1 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/Windows/AppsFlyerWindows.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 034d11e52b599954181d7f08c0d89ca8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS.meta new file mode 100644 index 0000000..286d70c --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8325c12a80ff4323b82e2833a8fc287 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityStoreKit2Bridge.swift b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityStoreKit2Bridge.swift new file mode 100644 index 0000000..e44f781 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityStoreKit2Bridge.swift @@ -0,0 +1,79 @@ +import Foundation +import StoreKit + +#if canImport(PurchaseConnector) +import PurchaseConnector + +@available(iOS 15.0, *) +@objc +public class AFUnityStoreKit2Bridge: NSObject { + @objc + public static func fetchAFSDKTransactionSK2(withTransactionId transactionId: String, completion: @escaping (AFSDKTransactionSK2?) -> Void) { + guard let transactionIdUInt64 = UInt64(transactionId) else { + print("Invalid transaction ID format.") + completion(nil) + return + } + Task { + for await result in StoreKit.Transaction.all { + if case .verified(let transaction) = result, transaction.id == transactionIdUInt64 { + let afTransaction = AFSDKTransactionSK2(transaction: transaction) + DispatchQueue.main.async { + completion(afTransaction) + } + return + } + } + DispatchQueue.main.async { + completion(nil) + } + } + } + + @objc + public static func extractSK2ProductInfo(_ products: [AFSDKProductSK2]) -> NSArray { + var result: [[String: Any]] = [] + + for product in products { + if let swiftProduct = Mirror(reflecting: product).children.first(where: { $0.label == "product" })?.value { + let productId = (swiftProduct as? NSObject)?.value(forKey: "id") as? String ?? "" + let title = (swiftProduct as? NSObject)?.value(forKey: "displayName") as? String ?? "" + let desc = (swiftProduct as? NSObject)?.value(forKey: "description") as? String ?? "" + let price = (swiftProduct as? NSObject)?.value(forKey: "price") as? NSDecimalNumber ?? 0 + + result.append([ + "productIdentifier": productId, + "localizedTitle": title, + "localizedDescription": desc, + "price": price + ]) + } + } + + return result as NSArray + } + + @objc + public static func extractSK2TransactionInfo(_ transactions: [AFSDKTransactionSK2]) -> NSArray { + var result: [[String: Any]] = [] + + for txn in transactions { + guard let mirrorChild = Mirror(reflecting: txn).children.first(where: { $0.label == "transaction" }), + let swiftTxn = mirrorChild.value as? StoreKit.Transaction else { + continue + } + + let transactionId = "\(swiftTxn.id)" + let date = NSNumber(value: swiftTxn.purchaseDate.timeIntervalSince1970) + + result.append([ + "transactionIdentifier": transactionId, + "transactionState": "verified", // or skip this line + "transactionDate": date + ]) + } + + return result as NSArray + } +} +#endif diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityStoreKit2Bridge.swift.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityStoreKit2Bridge.swift.meta new file mode 100644 index 0000000..f269096 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityStoreKit2Bridge.swift.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: 5652805602a6b4273a6e527b00aea272 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + VisionOS: VisionOS + second: + enabled: 1 + settings: {} + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.h b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.h new file mode 100644 index 0000000..d3fec43 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.h @@ -0,0 +1,24 @@ +// +// AFUnityUtils.h +// +// Created by Andrii H. and Dmitry O. on 16 Oct 2023 +// + +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif + +static NSString* stringFromChar(const char *str); +static NSDictionary* dictionaryFromJson(const char *jsonString); +static const char* stringFromdictionary(NSDictionary* dictionary); +static NSArray *NSArrayFromCArray(int length, const char **arr); +static char* getCString(const char* string); +static AppsFlyerLinkGenerator* generatorFromDictionary(NSDictionary* dictionary, AppsFlyerLinkGenerator* generator); +static EmailCryptType emailCryptTypeFromInt(int emailCryptTypeInt); +static AppsFlyerAdRevenueMediationNetworkType mediationNetworkTypeFromInt(int mediationNetwork); +static NSNumber *intFromNullableBool(const char *cStr); +static NSString* stringFromDeepLinkResultStatus(AFSDKDeepLinkResultStatus deepLinkResult); +static NSString* stringFromDeepLinkResultError(AppsFlyerDeepLinkResult *result); + diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.h.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.h.meta new file mode 100644 index 0000000..bfd501a --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.h.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 4b0609ff467554f2088aee1c52bf54a2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 0 + - first: + Android: Android + second: + enabled: 0 + settings: + AndroidSharedLibraryType: Executable + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.mm b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.mm new file mode 100644 index 0000000..611f269 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.mm @@ -0,0 +1,211 @@ +// +// AFUnityUtils.mm +// Unity-iPhone +// +// Created by Jonathan Wesfield on 24/07/2019. +// + +#import "AFUnityUtils.h" + +static NSString* stringFromChar(const char *str) { + return str ? [NSString stringWithUTF8String:str] : nil; +} + +static NSDictionary* dictionaryFromJson(const char *jsonString) { + if(jsonString){ + NSData *jsonData = [[NSData alloc] initWithBytes:jsonString length:strlen(jsonString)]; + NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil]; + return dictionary; + } + + return nil; +} + +static const char* stringFromdictionary(NSDictionary* dictionary) { + if(dictionary){ + NSError * err; + NSData * jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&err]; + NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + return [myString UTF8String]; + } + + return nil; +} + +static NSDictionary* dictionaryFromNSError(NSError* error) { + if(error){ + NSInteger code = [error code]; + NSString *localizedDescription = [error localizedDescription]; + + NSDictionary *errorDictionary = @{ + @"code" : @(code) ?: @(-1), + @"localizedDescription" : localizedDescription, + }; + return errorDictionary; + } + + return nil; +} + + +static NSArray *NSArrayFromCArray(int length, const char **arr) { + NSMutableArray *res = [[NSMutableArray alloc] init]; + for(int i = 0; i < length; i++) { + if (arr[i]) { + [res addObject:[NSString stringWithUTF8String:arr[i]]]; + } + } + + return res; +} + +static char* getCString(const char* string){ + if (string == NULL){ + return NULL; + } + + char* res = (char*)malloc(strlen(string) + 1); + strcpy(res, string); + + return res; +} + +static AppsFlyerLinkGenerator* generatorFromDictionary(NSDictionary* dictionary, AppsFlyerLinkGenerator* generator) { + + NSArray* generatorKeys = @[@"channel", @"customerID", @"campaign", @"referrerName", @"referrerImageUrl", @"deeplinkPath", @"baseDeeplink", @"brandDomain"]; + + NSMutableDictionary* mutableDictionary = [dictionary mutableCopy]; + + [generator setChannel:[dictionary objectForKey: @"channel"]]; + [generator setReferrerCustomerId:[dictionary objectForKey: @"customerID"]]; + [generator setCampaign:[dictionary objectForKey: @"campaign"]]; + [generator setReferrerName:[dictionary objectForKey: @"referrerName"]]; + [generator setReferrerImageURL:[dictionary objectForKey: @"referrerImageUrl"]]; + [generator setDeeplinkPath:[dictionary objectForKey: @"deeplinkPath"]]; + [generator setBaseDeeplink:[dictionary objectForKey: @"baseDeeplink"]]; + [generator setBrandDomain:[dictionary objectForKey: @"brandDomain"]]; + + + [mutableDictionary removeObjectsForKeys:generatorKeys]; + + [generator addParameters:mutableDictionary]; + + return generator; +} + +static EmailCryptType emailCryptTypeFromInt(int emailCryptTypeInt){ + + EmailCryptType emailCryptType; + switch (emailCryptTypeInt){ + case 1: + emailCryptType = EmailCryptTypeSHA256; + break; + default: + emailCryptType = EmailCryptTypeNone; + break; + } + + return emailCryptType; +} + +static NSNumber *intFromNullableBool(const char *cStr) { + if (!cStr) return nil; + NSString *str = [NSString stringWithUTF8String:cStr]; + + if ([str caseInsensitiveCompare:@"true"] == NSOrderedSame) { + return @YES; + } else if ([str caseInsensitiveCompare:@"false"] == NSOrderedSame) { + return @NO; + } + return nil; +} + +static AppsFlyerAdRevenueMediationNetworkType mediationNetworkTypeFromInt(int mediationNetworkInt){ + + AppsFlyerAdRevenueMediationNetworkType mediationNetworkType; + switch (mediationNetworkInt){ + case 1: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeGoogleAdMob; + break; + case 2: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeIronSource; + break; + case 3: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeApplovinMax; + break; + case 4: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeFyber; + break; + case 5: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeAppodeal; + break; + case 6: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeAdmost; + break; + case 7: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeTopon; + break; + case 8: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeTradplus; + break; + case 9: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeYandex; + break; + case 10: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeChartBoost; + break; + case 11: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeUnity; + break; + case 12: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeToponPte; + break; + case 13: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeCustom; + break; + case 14: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeDirectMonetization; + break; + default: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeCustom; + break; + } + + return mediationNetworkType; +} + +static NSString* stringFromDeepLinkResultStatus(AFSDKDeepLinkResultStatus deepLinkResult){ + NSString* result; + switch (deepLinkResult){ + case AFSDKDeepLinkResultStatusFound: + result = @"FOUND"; + break; + case AFSDKDeepLinkResultStatusFailure: + result = @"ERROR"; + break; + case AFSDKDeepLinkResultStatusNotFound: + result = @"NOT_FOUND"; + break; + default: + result = @"ERROR"; + break; + } + + return result; +} + +static NSString* stringFromDeepLinkResultError(AppsFlyerDeepLinkResult *result){ + NSString* res; + + if (result && result.error){ + if ([[result.error userInfo][NSUnderlyingErrorKey] code] == -1001) { + res = @"TIMEOUT"; + } else if ([[result.error userInfo][NSUnderlyingErrorKey] code] == -1009) { + res = @"NETWORK"; + } + } + + res = @"UNKNOWN"; + + return res; +} diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.mm.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.mm.meta new file mode 100644 index 0000000..b411375 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AFUnityUtils.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 18a03931864e84d86bedcc99c440e060 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyer+AppController.m b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyer+AppController.m new file mode 100644 index 0000000..f877576 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyer+AppController.m @@ -0,0 +1,164 @@ +// +// AppsFlyer+AppController.m +// Unity-iPhone +// +// Created by Jonathan Wesfield on 24/07/2019. +// + +#import +#import "UnityAppController.h" +#import "AppsFlyeriOSWrapper.h" +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif + + +@implementation UnityAppController (AppsFlyerSwizzledAppController) + +static BOOL didEnteredBackGround __unused; +static IMP __original_applicationDidBecomeActive_Imp __unused; +static IMP __original_applicationDidEnterBackground_Imp __unused; +static IMP __original_didReceiveRemoteNotification_Imp __unused; +static IMP __original_continueUserActivity_Imp __unused; +static IMP __original_openUrl_Imp __unused; + + ++ (void)load { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + +#if !AFSDK_SHOULD_SWIZZLE + + id swizzleFlag = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppsFlyerShouldSwizzle"]; + BOOL shouldSwizzle = swizzleFlag ? [swizzleFlag boolValue] : NO; + + if(shouldSwizzle){ + + Method method1 = class_getInstanceMethod([self class], @selector(applicationDidBecomeActive:)); + __original_applicationDidBecomeActive_Imp = method_setImplementation(method1, (IMP)__swizzled_applicationDidBecomeActive); + + Method method2 = class_getInstanceMethod([self class], @selector(applicationDidEnterBackground:)); + __original_applicationDidEnterBackground_Imp = method_setImplementation(method2, (IMP)__swizzled_applicationDidEnterBackground); + + + Method method3 = class_getInstanceMethod([self class], @selector(didReceiveRemoteNotification:)); + __original_didReceiveRemoteNotification_Imp = method_setImplementation(method3, (IMP)__swizzled_didReceiveRemoteNotification); + + + Method method4 = class_getInstanceMethod([self class], @selector(application:openURL:options:)); + __original_openUrl_Imp = method_setImplementation(method4, (IMP)__swizzled_openURL); + + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + + [self swizzleContinueUserActivity:[self class]]; + } +#elif AFSDK_SHOULD_SWIZZLE + Method method1 = class_getInstanceMethod([self class], @selector(applicationDidBecomeActive:)); + __original_applicationDidBecomeActive_Imp = method_setImplementation(method1, (IMP)__swizzled_applicationDidBecomeActive); + + Method method2 = class_getInstanceMethod([self class], @selector(applicationDidEnterBackground:)); + __original_applicationDidEnterBackground_Imp = method_setImplementation(method2, (IMP)__swizzled_applicationDidEnterBackground); + + + Method method3 = class_getInstanceMethod([self class], @selector(didReceiveRemoteNotification:)); + __original_didReceiveRemoteNotification_Imp = method_setImplementation(method3, (IMP)__swizzled_didReceiveRemoteNotification); + + + Method method4 = class_getInstanceMethod([self class], @selector(application:openURL:options:)); + __original_openUrl_Imp = method_setImplementation(method4, (IMP)__swizzled_openURL); + + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + + [self swizzleContinueUserActivity:[self class]]; + +#endif + + + }); +} + ++(void)swizzleContinueUserActivity:(Class)class { + + SEL originalSelector = @selector(application:continueUserActivity:restorationHandler:); + + Method defaultMethod = class_getInstanceMethod(class, originalSelector); + Method swizzledMethod = class_getInstanceMethod(class, @selector(__swizzled_continueUserActivity)); + + BOOL isMethodExists = !class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); + + if (isMethodExists) { + __original_continueUserActivity_Imp = method_setImplementation(defaultMethod, (IMP)__swizzled_continueUserActivity); + } else { + class_replaceMethod(class, originalSelector, (IMP)__swizzled_continueUserActivity, method_getTypeEncoding(swizzledMethod)); + } +} + +BOOL __swizzled_continueUserActivity(id self, SEL _cmd, UIApplication* application, NSUserActivity* userActivity, void (^restorationHandler)(NSArray*)) { + NSLog(@"swizzled continueUserActivity"); + [[AppsFlyerAttribution shared] continueUserActivity:userActivity restorationHandler:restorationHandler]; + + if(__original_continueUserActivity_Imp){ + return ((BOOL(*)(id, SEL, UIApplication*, NSUserActivity*, void (^)(NSArray*)))__original_continueUserActivity_Imp)(self, _cmd, application, userActivity, NULL); + } + + return YES; +} + + + +void __swizzled_applicationDidBecomeActive(id self, SEL _cmd, UIApplication* launchOptions) { + NSLog(@"swizzled applicationDidBecomeActive"); + [[AppsFlyerLib shared] setDelegate:_AppsFlyerdelegate]; + + if(didEnteredBackGround && AppsFlyeriOSWarpper.didCallStart == YES){ + [[AppsFlyerLib shared] start]; + } + + if(__original_applicationDidBecomeActive_Imp){ + ((void(*)(id,SEL, UIApplication*))__original_applicationDidBecomeActive_Imp)(self, _cmd, launchOptions); + } +} + + +void __swizzled_applicationDidEnterBackground(id self, SEL _cmd, UIApplication* application) { + NSLog(@"swizzled applicationDidEnterBackground"); + didEnteredBackGround = YES; + if(__original_applicationDidEnterBackground_Imp){ + ((void(*)(id,SEL, UIApplication*))__original_applicationDidEnterBackground_Imp)(self, _cmd, application); + } +} + + +BOOL __swizzled_didReceiveRemoteNotification(id self, SEL _cmd, UIApplication* application, NSDictionary* userInfo,void (^UIBackgroundFetchResult)(void) ) { + NSLog(@"swizzled didReceiveRemoteNotification"); + + [[AppsFlyerLib shared] handlePushNotification:userInfo]; + + if(__original_didReceiveRemoteNotification_Imp){ + return ((BOOL(*)(id, SEL, UIApplication*, NSDictionary*, int(UIBackgroundFetchResult)))__original_didReceiveRemoteNotification_Imp)(self, _cmd, application, userInfo, nil); + } + return YES; +} + + + +BOOL __swizzled_openURL(id self, SEL _cmd, UIApplication* application, NSURL* url, NSDictionary * options) { + NSLog(@"swizzled openURL"); + [[AppsFlyerAttribution shared] handleOpenUrl:url options:options]; + if(__original_openUrl_Imp){ + return ((BOOL(*)(id, SEL, UIApplication*, NSURL*, NSDictionary*))__original_openUrl_Imp)(self, _cmd, application, url, options); + } + return NO; +} + + +@end + + + diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyer+AppController.m.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyer+AppController.m.meta new file mode 100644 index 0000000..24856fa --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyer+AppController.m.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 6ae9e1f7daef2427588fab2fbf8d35d5 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAppController.mm b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAppController.mm new file mode 100644 index 0000000..3e492c0 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAppController.mm @@ -0,0 +1,131 @@ +// +// AppsFlyerAppController.mm +// Unity-iPhone +// +// Created by Jonathan Wesfield on 30/07/2019. +// + +#import +#import "UnityAppController.h" +#import "AppDelegateListener.h" +#import "AppsFlyeriOSWrapper.h" +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif +#import + +/** + Note if you would like to use method swizzeling see AppsFlyer+AppController.m + If you are using swizzeling then comment out the method that is being swizzeled in AppsFlyerAppController.mm + Only use swizzeling if there are conflicts with other plugins that needs to be resolved. +*/ + + +@interface AppsFlyerAppController : UnityAppController +{ + BOOL didEnteredBackGround; +} +@end + +@implementation AppsFlyerAppController + +- (instancetype)init +{ + self = [super init]; + if (self) { + + id swizzleFlag = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppsFlyerShouldSwizzle"]; + BOOL shouldSwizzle = swizzleFlag ? [swizzleFlag boolValue] : NO; + + if(!shouldSwizzle){ + UnityRegisterAppDelegateListener(self); + } + } + return self; +} + +- (void)didFinishLaunching:(NSNotification*)notification { + NSLog(@"got didFinishLaunching = %@",notification.userInfo); + + + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + [[AppsFlyerLib shared] setDelegate:_AppsFlyerdelegate]; + + if (notification.userInfo[@"url"]) { + [self onOpenURL:notification]; + } +} + +-(void)didBecomeActive:(NSNotification*)notification { + NSLog(@"got didBecomeActive(out) = %@", notification.userInfo); + if (didEnteredBackGround == YES && AppsFlyeriOSWarpper.didCallStart == YES) { + [[AppsFlyerLib shared] start]; + didEnteredBackGround = NO; + } +} + +- (void)didEnterBackground:(NSNotification*)notification { + NSLog(@"got didEnterBackground = %@", notification.userInfo); + didEnteredBackGround = YES; +} + +- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler { + [[AppsFlyerAttribution shared] continueUserActivity:userActivity restorationHandler:restorationHandler]; + return YES; +} + + +- (void)onOpenURL:(NSNotification*)notification { + NSLog(@"got onOpenURL = %@", notification.userInfo); + NSURL *url = notification.userInfo[@"url"]; + NSString *sourceApplication = notification.userInfo[@"sourceApplication"]; + + if (sourceApplication == nil) { + sourceApplication = @""; + } + + if (url != nil) { + [[AppsFlyerAttribution shared] handleOpenUrl:url sourceApplication:sourceApplication annotation:nil]; + } + +} + +- (void)didReceiveRemoteNotification:(NSNotification*)notification { + NSLog(@"got didReceiveRemoteNotification = %@", notification.userInfo); + [[AppsFlyerLib shared] handlePushNotification:notification.userInfo]; +} + +@end + +#if !(AFSDK_SHOULD_SWIZZLE) + +IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController) + +#endif +/** +Note if you would not like to use IMPL_APP_CONTROLLER_SUBCLASS you can replace it with the code below. + + +(void)load + { + [AppsFlyerAppController plugin]; + } + + // Singleton accessor. + + (AppsFlyerAppController *)plugin + { + static AppsFlyerAppController *sharedInstance = nil; + static dispatch_once_t onceToken; + + dispatch_once(&onceToken, ^{ + + sharedInstance = [[AppsFlyerAppController alloc] init]; + }); + + return sharedInstance; + } + + **/ diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAppController.mm.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAppController.mm.meta new file mode 100644 index 0000000..2e8e52c --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAppController.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 2d1497a1493b24fecaa58bd3a7b707f9 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.h b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.h new file mode 100644 index 0000000..c79fec4 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.h @@ -0,0 +1,34 @@ +// +// AppsFlyerAttribution.h +// UnityFramework +// +// Created by Margot Guetta on 11/04/2021. +// + +#ifndef AppsFlyerAttribution_h +#define AppsFlyerAttribution_h +#endif /* AppsFlyerAttribution_h */ +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif + + +@interface AppsFlyerAttribution : NSObject +@property NSUserActivity*_Nullable userActivity; +@property (nonatomic, copy) void (^ _Nullable restorationHandler)(NSArray *_Nullable ); +@property NSURL * _Nullable url; +@property NSDictionary * _Nullable options; +@property NSString* _Nullable sourceApplication; +@property id _Nullable annotation; +@property BOOL isBridgeReady; + ++ (AppsFlyerAttribution *_Nullable)shared; +- (void) continueUserActivity: (NSUserActivity*_Nullable) userActivity restorationHandler: (void (^_Nullable)(NSArray * _Nullable))restorationHandler; +- (void) handleOpenUrl:(NSURL*_Nullable)url options:(NSDictionary*_Nullable) options; +- (void) handleOpenUrl: (NSURL *_Nonnull)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation; + +@end + +static NSString * _Nullable const AF_BRIDGE_SET = @"bridge is set"; diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.h.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.h.meta new file mode 100644 index 0000000..ad63349 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.h.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 8544dc3b3c7bb40d397b2de568df1058 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 0 + - first: + Android: Android + second: + enabled: 0 + settings: + AndroidSharedLibraryType: Executable + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.m b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.m new file mode 100644 index 0000000..c4e7278 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.m @@ -0,0 +1,86 @@ +// +// NSObject+AppsFlyerAttribution.m +// UnityFramework +// +// Created by Margot Guetta on 11/04/2021. +// + +#import +#import "AppsFlyerAttribution.h" + +@implementation AppsFlyerAttribution + ++ (id)shared { + static AppsFlyerAttribution *shared = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + shared = [[self alloc] init]; + }); + return shared; +} + +- (id)init { + if (self = [super init]) { + self.options = nil; + self.restorationHandler = nil; + self.url = nil; + self.userActivity = nil; + self.annotation = nil; + self.sourceApplication = nil; + self.isBridgeReady = NO; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(receiveBridgeReadyNotification:) + name:AF_BRIDGE_SET + object:nil]; + } + return self; +} + +- (void) continueUserActivity: (NSUserActivity*_Nullable) userActivity restorationHandler: (void (^_Nullable)(NSArray * _Nullable))restorationHandler{ + if(self.isBridgeReady == YES){ + [[AppsFlyerLib shared] continueUserActivity:userActivity restorationHandler:restorationHandler]; + }else{ + [AppsFlyerAttribution shared].userActivity = userActivity; + [AppsFlyerAttribution shared].restorationHandler = restorationHandler; + } +} + +- (void) handleOpenUrl:(NSURL *)url options:(NSDictionary *)options{ + if(self.isBridgeReady == YES){ + [[AppsFlyerLib shared] handleOpenUrl:url options:options]; + }else{ + [AppsFlyerAttribution shared].url = url; + [AppsFlyerAttribution shared].options = options; + } +} + +- (void) handleOpenUrl:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{ + if(self.isBridgeReady == YES){ + [[AppsFlyerLib shared] handleOpenURL:url sourceApplication:sourceApplication withAnnotation:annotation]; + }else{ + [AppsFlyerAttribution shared].url = url; + [AppsFlyerAttribution shared].sourceApplication = sourceApplication; + [AppsFlyerAttribution shared].annotation = annotation; + } + +} + +- (void) receiveBridgeReadyNotification:(NSNotification *) notification +{ + NSLog (@"AppsFlyer Debug: handle deep link"); + if(self.url && self.sourceApplication){ + [[AppsFlyerLib shared] handleOpenURL:self.url sourceApplication:self.sourceApplication withAnnotation:self.annotation]; + self.url = nil; + self.sourceApplication = nil; + self.annotation = nil; + }else if(self.options && self.url){ + [[AppsFlyerLib shared] handleOpenUrl:self.url options:self.options]; + self.options = nil; + self.url = nil; + }else if(self.userActivity){ + [[AppsFlyerLib shared] continueUserActivity:self.userActivity restorationHandler:nil]; + self.userActivity = nil; + self.restorationHandler = nil; + } +} +@end diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.m.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.m.meta new file mode 100644 index 0000000..9f071e6 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyerAttribution.m.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 1060e47d7b9e2453ba575f0b455b2bf8 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.h b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.h new file mode 100644 index 0000000..cf73afe --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.h @@ -0,0 +1,71 @@ +// +// AppsFlyeriOSWarpper.h +// Unity-iPhone +// +// Created by Jonathan Wesfield on 24/07/2019. +// + +#import "AFUnityUtils.mm" +#import "UnityAppController.h" +#import "AppsFlyerAttribution.h" +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif +#if __has_include() +#import +#else +#import "PurchaseConnector.h" +#endif +#import + +// Add StoreKit 2 support +#if __has_include() +#import +#endif + +@interface AppsFlyeriOSWarpper : NSObject + ++ (BOOL) didCallStart; ++ (void) setDidCallStart:(BOOL)val; + +// Add StoreKit 2 methods +- (void)setStoreKitVersion:(int)storeKitVersion; +- (void)logConsumableTransaction:(id)transaction; + +@end + + +static AppsFlyeriOSWarpper *_AppsFlyerdelegate; +static const int kPushNotificationSize = 32; + +static NSString* ConversionDataCallbackObject = @"AppsFlyerObject"; + +static const char* VALIDATE_CALLBACK = "didFinishValidateReceipt"; +static const char* VALIDATE_ERROR_CALLBACK = "didFinishValidateReceiptWithError"; +static const char* GCD_CALLBACK = "onConversionDataSuccess"; +static const char* GCD_ERROR_CALLBACK = "onConversionDataFail"; +static const char* OAOA_CALLBACK = "onAppOpenAttribution"; +static const char* OAOA_ERROR_CALLBACK = "onAppOpenAttributionFailure"; +static const char* GENERATE_LINK_CALLBACK = "onInviteLinkGenerated"; +static const char* OPEN_STORE_LINK_CALLBACK = "onOpenStoreLinkGenerated"; +static const char* START_REQUEST_CALLBACK = "requestResponseReceived"; +static const char* IN_APP_RESPONSE_CALLBACK = "inAppResponseReceived"; +static const char* ON_DEEPLINKING = "onDeepLinking"; +static const char* VALIDATE_AND_LOG_V2_CALLBACK = "onValidateAndLogComplete"; +static const char* VALIDATE_AND_LOG_V2_ERROR_CALLBACK = "onValidateAndLogFailure"; + + +static NSString* validateObjectName = @""; +static NSString* openStoreObjectName = @""; +static NSString* generateInviteObjectName = @""; +static NSString* validateAndLogObjectName = @""; +static NSString* startRequestObjectName = @""; +static NSString* inAppRequestObjectName = @""; +static NSString* onDeeplinkingObjectName = @""; + +static const char* PURCHASE_REVENUE_VALIDATION_CALLBACK = "didReceivePurchaseRevenueValidationInfo"; +static const char* PURCHASE_REVENUE_ERROR_CALLBACK = "didReceivePurchaseRevenueError"; + +static NSString* onPurchaseValidationObjectName = @""; diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.h.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.h.meta new file mode 100644 index 0000000..0638ac9 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.h.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 147104b04b5794eaa92b4195cc328e13 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 0 + - first: + Android: Android + second: + enabled: 0 + settings: + AndroidSharedLibraryType: Executable + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.mm b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.mm new file mode 100644 index 0000000..41a71a3 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.mm @@ -0,0 +1,620 @@ +// +// AppsFlyeriOSWarpper.mm +// Unity-iPhone +// +// Created by Jonathan Wesfield on 24/07/2019. +// + +#import "AppsFlyeriOSWrapper.h" +#import + +#import +#import "UnityFramework/UnityFramework-Swift.h" + +#if __has_include() +#import +#elif __has_include("PurchaseConnector-Swift.h") +#import "PurchaseConnector-Swift.h" +#endif + +#if __has_include() +#import +#elif __has_include("UnityFramework-Swift.h") +#import "UnityFramework-Swift.h" +#endif + +static void unityCallBack(NSString* objectName, const char* method, const char* msg) { + if(objectName){ + UnitySendMessage([objectName UTF8String], method, msg); + } +} + +extern "C" { + + const void _startSDK(bool shouldCallback, const char* objectName) { + [[AppsFlyerLib shared] setPluginInfoWith: AFSDKPluginUnity + pluginVersion:@"6.17.72" + additionalParams:nil]; + startRequestObjectName = stringFromChar(objectName); + AppsFlyeriOSWarpper.didCallStart = YES; + [AppsFlyerAttribution shared].isBridgeReady = YES; + [[NSNotificationCenter defaultCenter] postNotificationName:AF_BRIDGE_SET object: [AppsFlyerAttribution shared]]; + [[AppsFlyerLib shared] startWithCompletionHandler:^(NSDictionary *dictionary, NSError *error) { + if(shouldCallback){ + if (error) { + NSDictionary *callbackDictionary = @{@"statusCode":[NSNumber numberWithLong:[error code]]}; + unityCallBack(startRequestObjectName, START_REQUEST_CALLBACK, stringFromdictionary(callbackDictionary)); + return; + } + if (dictionary) { + unityCallBack(startRequestObjectName, START_REQUEST_CALLBACK, stringFromdictionary(dictionary)); + return; + } + } + }]; + } + + const void _setCustomerUserID (const char* customerUserID) { + [[AppsFlyerLib shared] setCustomerUserID:stringFromChar(customerUserID)]; + } + + const void _setAdditionalData (const char* customData) { + [[AppsFlyerLib shared] setAdditionalData:dictionaryFromJson(customData)]; + } + + const void _setAppsFlyerDevKey (const char* appsFlyerDevKey) { + [AppsFlyerLib shared].appsFlyerDevKey = stringFromChar(appsFlyerDevKey); + } + + const void _setAppleAppID (const char* appleAppID) { + [AppsFlyerLib shared].appleAppID = stringFromChar(appleAppID); + } + + const void _setCurrencyCode (const char* currencyCode) { + [[AppsFlyerLib shared] setCurrencyCode:stringFromChar(currencyCode)]; + } + + const void _setDisableCollectAppleAdSupport (bool disableAdvertisingIdentifier) { + [AppsFlyerLib shared].disableAdvertisingIdentifier = disableAdvertisingIdentifier; + } + + const void _setIsDebug (bool isDebug) { + [AppsFlyerLib shared].isDebug = isDebug; + } + + const void _setShouldCollectDeviceName (bool shouldCollectDeviceName) { + [AppsFlyerLib shared].shouldCollectDeviceName = shouldCollectDeviceName; + } + + const void _setAppInviteOneLinkID (const char* appInviteOneLinkID) { + [[AppsFlyerLib shared] setAppInviteOneLink:stringFromChar(appInviteOneLinkID)]; + } + + const void _setDeepLinkTimeout (long deepLinkTimeout) { + [AppsFlyerLib shared].deepLinkTimeout = deepLinkTimeout; + } + + const void _anonymizeUser (bool anonymizeUser) { + [AppsFlyerLib shared].anonymizeUser = anonymizeUser; + } + + const void _enableTCFDataCollection (bool shouldCollectTcfData) { + [[AppsFlyerLib shared] enableTCFDataCollection:shouldCollectTcfData]; + } + + const void _setConsentData(const char* isUserSubjectToGDPR, const char* hasConsentForDataUsage, const char* hasConsentForAdsPersonalization, const char* hasConsentForAdStorage) { + + NSNumber *gdpr = intFromNullableBool(isUserSubjectToGDPR); + NSNumber *dataUsage = intFromNullableBool(hasConsentForDataUsage); + NSNumber *adsPersonalization = intFromNullableBool(hasConsentForAdsPersonalization); + NSNumber *adStorage = intFromNullableBool(hasConsentForAdStorage); + + AppsFlyerConsent *consentData = [[AppsFlyerConsent alloc] initWithIsUserSubjectToGDPR:gdpr + hasConsentForDataUsage:dataUsage + hasConsentForAdsPersonalization:adsPersonalization + hasConsentForAdStorage:adStorage]; + + [[AppsFlyerLib shared] setConsentData:consentData]; + } + + const void _logAdRevenue(const char* monetizationNetwork, int mediationNetworkInt, const char* currencyIso4217Code, double eventRevenue, const char* additionalParameters) { + AppsFlyerAdRevenueMediationNetworkType mediationNetwork = mediationNetworkTypeFromInt(mediationNetworkInt); + NSNumber *number = [NSNumber numberWithDouble:eventRevenue]; + AFAdRevenueData *adRevenue = [[AFAdRevenueData alloc] initWithMonetizationNetwork:stringFromChar(monetizationNetwork) mediationNetwork:mediationNetwork currencyIso4217Code:stringFromChar(currencyIso4217Code) eventRevenue:number]; + [[AppsFlyerLib shared] logAdRevenue: adRevenue additionalParameters:dictionaryFromJson(additionalParameters)]; + } + + const void _setDisableCollectIAd (bool disableCollectASA) { + [AppsFlyerLib shared].disableCollectASA = disableCollectASA; + } + + const void _setUseReceiptValidationSandbox (bool useReceiptValidationSandbox) { + [AppsFlyerLib shared].useReceiptValidationSandbox = useReceiptValidationSandbox; + } + + const void _setUseUninstallSandbox (bool useUninstallSandbox) { + [AppsFlyerLib shared].useUninstallSandbox = useUninstallSandbox; + } + + const void _setResolveDeepLinkURLs (int length, const char **resolveDeepLinkURLs) { + if(length > 0 && resolveDeepLinkURLs) { + [[AppsFlyerLib shared] setResolveDeepLinkURLs:NSArrayFromCArray(length, resolveDeepLinkURLs)]; + } + } + + const void _setOneLinkCustomDomains (int length, const char **oneLinkCustomDomains) { + if(length > 0 && oneLinkCustomDomains) { + [[AppsFlyerLib shared] setOneLinkCustomDomains:NSArrayFromCArray(length, oneLinkCustomDomains)]; + } + } + + const void _afSendEvent (const char* eventName, const char* eventValues, bool shouldCallback, const char* objectName) { + inAppRequestObjectName = stringFromChar(objectName); + [[AppsFlyerLib shared] logEventWithEventName:stringFromChar(eventName) eventValues:dictionaryFromJson(eventValues) completionHandler:^(NSDictionary *dictionary, NSError *error) { + if(shouldCallback){ + if (error) { + NSDictionary *callbackDictionary = @{@"statusCode":[NSNumber numberWithLong:[error code]]}; + unityCallBack(inAppRequestObjectName, IN_APP_RESPONSE_CALLBACK, stringFromdictionary(callbackDictionary)); + return; + } + if (dictionary) { + unityCallBack(inAppRequestObjectName, IN_APP_RESPONSE_CALLBACK, stringFromdictionary(dictionary)); + return; + } + } + }]; + } + + const void _recordLocation (double longitude, double latitude) { + [[AppsFlyerLib shared] logLocation:longitude latitude:latitude]; + } + + const char* _getAppsFlyerId () { + return getCString([[[AppsFlyerLib shared] getAppsFlyerUID] UTF8String]); + } + + const void _registerUninstall (unsigned char* deviceToken) { + if(deviceToken){ + NSData* tokenData = [NSData dataWithBytes:(const void *)deviceToken length:sizeof(unsigned char)*kPushNotificationSize]; + [[AppsFlyerLib shared] registerUninstall:tokenData]; + } + } + + const void _handlePushNotification (const char* pushPayload) { + [[AppsFlyerLib shared] handlePushNotification:dictionaryFromJson(pushPayload)]; + } + + const char* _getSDKVersion () { + return getCString([[[AppsFlyerLib shared] getSDKVersion] UTF8String]); + } + + const void _setHost (const char* host, const char* hostPrefix) { + [[AppsFlyerLib shared] setHost:stringFromChar(host) withHostPrefix:stringFromChar(hostPrefix)]; + } + + const void _setMinTimeBetweenSessions (int minTimeBetweenSessions) { + [AppsFlyerLib shared].minTimeBetweenSessions = minTimeBetweenSessions; + } + + const void _stopSDK (bool isStopped) { + [AppsFlyerLib shared].isStopped = isStopped; + } + + const BOOL _isSDKStopped () { + return [AppsFlyerLib shared].isStopped; + } + + const void _handleOpenUrl(const char *url, const char *sourceApplication, const char *annotation) { + [[AppsFlyerLib shared] handleOpenURL:[NSURL URLWithString:stringFromChar(url)] sourceApplication:stringFromChar(sourceApplication) withAnnotation:stringFromChar(annotation)]; } + + const void _recordCrossPromoteImpression (const char* appID, const char* campaign, const char* parameters) { + [AppsFlyerCrossPromotionHelper logCrossPromoteImpression:stringFromChar(appID) campaign:stringFromChar(campaign) parameters:dictionaryFromJson(parameters)]; } + + const void _attributeAndOpenStore (const char* appID, const char* campaign, const char* parameters, const char* objectName) { + + openStoreObjectName = stringFromChar(objectName); + + [AppsFlyerCrossPromotionHelper + logAndOpenStore:stringFromChar(appID) + campaign:stringFromChar(campaign) + parameters:dictionaryFromJson(parameters) + openStore:^(NSURLSession * _Nonnull urlSession, NSURL * _Nonnull clickURL) { + unityCallBack(openStoreObjectName, OPEN_STORE_LINK_CALLBACK, [clickURL.absoluteString UTF8String]); + }]; + } + + const void _generateUserInviteLink (const char* parameters, const char* objectName) { + + generateInviteObjectName = stringFromChar(objectName); + + [AppsFlyerShareInviteHelper generateInviteUrlWithLinkGenerator:^AppsFlyerLinkGenerator * _Nonnull(AppsFlyerLinkGenerator * _Nonnull generator) { + return generatorFromDictionary(dictionaryFromJson(parameters), generator); + } completionHandler:^(NSURL * _Nullable url) { + unityCallBack(generateInviteObjectName, GENERATE_LINK_CALLBACK, [url.absoluteString UTF8String]); + }]; + } + + const void _recordInvite (const char* channel, const char* parameters) { + [AppsFlyerShareInviteHelper logInvite:stringFromChar(channel) parameters:dictionaryFromJson(parameters)]; + } + + const void _setUserEmails (int emailCryptTypeInt , int length, const char **userEmails) { + if(length > 0 && userEmails) { + [[AppsFlyerLib shared] setUserEmails:NSArrayFromCArray(length, userEmails) withCryptType:emailCryptTypeFromInt(emailCryptTypeInt)]; + } + } + + const void _setPhoneNumber (const char* phoneNumber) { + [[AppsFlyerLib shared] setPhoneNumber:stringFromChar(phoneNumber)]; + } + + const void _setSharingFilterForAllPartners () { + [[AppsFlyerLib shared] setSharingFilterForAllPartners]; + } + + const void _setSharingFilter (int length, const char **partners) { + if(length > 0 && partners) { + [[AppsFlyerLib shared] setSharingFilter:NSArrayFromCArray(length, partners)]; + } + } + + const void _setSharingFilterForPartners (int length, const char **partners) { + if(length > 0 && partners) { + [[AppsFlyerLib shared] setSharingFilterForPartners:NSArrayFromCArray(length, partners)]; + } else { + [[AppsFlyerLib shared] setSharingFilterForPartners:nil]; + } + } + + const void _validateAndSendInAppPurchase (const char* productIdentifier, const char* price, const char* currency, const char* transactionId, const char* additionalParameters, const char* objectName) { + + validateObjectName = stringFromChar(objectName); + + [[AppsFlyerLib shared] + validateAndLogInAppPurchase:stringFromChar(productIdentifier) + price:stringFromChar(price) + currency:stringFromChar(currency) + transactionId:stringFromChar(transactionId) + additionalParameters:dictionaryFromJson(additionalParameters) + success:^(NSDictionary *result){ + unityCallBack(validateObjectName, VALIDATE_CALLBACK, stringFromdictionary(result)); + } failure:^(NSError *error, id response) { + if(response && [response isKindOfClass:[NSDictionary class]]) { + NSDictionary* value = (NSDictionary*)response; + unityCallBack(validateObjectName, VALIDATE_ERROR_CALLBACK, stringFromdictionary(value)); + } else { + unityCallBack(validateObjectName, VALIDATE_ERROR_CALLBACK, error ? [[error localizedDescription] UTF8String] : "error"); + } + }]; + } + + const void _validateAndSendInAppPurchaseV2 (const char* product, const char* transactionId, int purchaseType, const char* purchaseAdditionalDetails, const char* objectName) { + + validateAndLogObjectName = stringFromChar(objectName); + AFSDKPurchaseDetails *details = [[AFSDKPurchaseDetails alloc] initWithProductId:stringFromChar(product) transactionId:stringFromChar(transactionId) purchaseType:(AFSDKPurchaseType)purchaseType]; + + [[AppsFlyerLib shared] + validateAndLogInAppPurchase:details + purchaseAdditionalDetails:dictionaryFromJson(purchaseAdditionalDetails) + completion:^(NSDictionary * _Nullable response, NSError * _Nullable error) { + if (error) { + unityCallBack(validateAndLogObjectName, VALIDATE_AND_LOG_V2_ERROR_CALLBACK, stringFromdictionary(dictionaryFromNSError(error))); + } else { + // Check if the response indicates validation failure + BOOL isValidationFailure = NO; + if (response && [response isKindOfClass:[NSDictionary class]]) { + NSDictionary *resultDict = response[@"result"]; + if (resultDict && [resultDict isKindOfClass:[NSDictionary class]]) { + NSDictionary *responseForProduct = resultDict.allValues.firstObject; + if (responseForProduct && [responseForProduct isKindOfClass:[NSDictionary class]]) { + BOOL validationResult = [responseForProduct[@"result"] boolValue]; + if (!validationResult) { + isValidationFailure = YES; + } + } + } + } + + if (isValidationFailure) { + unityCallBack(validateAndLogObjectName, VALIDATE_AND_LOG_V2_ERROR_CALLBACK, stringFromdictionary(response)); + } else { + unityCallBack(validateAndLogObjectName, VALIDATE_AND_LOG_V2_CALLBACK, stringFromdictionary(response)); + } + } + }]; + + } + + const void _getConversionData(const char* objectName) { + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + ConversionDataCallbackObject = stringFromChar(objectName); + [[AppsFlyerLib shared] setDelegate:_AppsFlyerdelegate]; + } + + const void _waitForATTUserAuthorizationWithTimeoutInterval (int timeoutInterval) { + [[AppsFlyerLib shared] waitForATTUserAuthorizationWithTimeoutInterval:timeoutInterval]; + } + + const void _disableSKAdNetwork (bool isDisabled) { + [AppsFlyerLib shared].disableSKAdNetwork = isDisabled; + } + + const void _addPushNotificationDeepLinkPath (int length, const char **paths) { + if(length > 0 && paths) { + [[AppsFlyerLib shared] addPushNotificationDeepLinkPath:NSArrayFromCArray(length, paths)]; + } + } + + const void _subscribeForDeepLink (const char* objectName) { + + onDeeplinkingObjectName = stringFromChar(objectName); + + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + [[AppsFlyerLib shared] setDeepLinkDelegate:_AppsFlyerdelegate]; + } + + const void _setCurrentDeviceLanguage(const char* language) { + [[AppsFlyerLib shared] setCurrentDeviceLanguage:stringFromChar(language)]; + } + + const void _setPartnerData(const char* partnerId, const char* partnerInfo) { + [[AppsFlyerLib shared] setPartnerDataWithPartnerId: stringFromChar(partnerId) partnerInfo:dictionaryFromJson(partnerInfo)]; + } + + const void _disableIDFVCollection(bool isDisabled) { + [AppsFlyerLib shared].disableIDFVCollection = isDisabled; + } + + // Purchase connector + const void _startObservingTransactions() { + [[PurchaseConnector shared] startObservingTransactions]; + } + + const void _stopObservingTransactions() { + [[PurchaseConnector shared] stopObservingTransactions]; + } + + const void _setIsSandbox(bool isSandBox) { + [[PurchaseConnector shared] setIsSandbox:isSandBox]; + } + + const void _setPurchaseRevenueDelegate() { + if (_AppsFlyerdelegate== nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + [[PurchaseConnector shared] setPurchaseRevenueDelegate:_AppsFlyerdelegate]; + } + + const void _setAutoLogPurchaseRevenue(int option) { + [[PurchaseConnector shared] setAutoLogPurchaseRevenue:option]; + + } + + const void _initPurchaseConnector(const char* objectName) { + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + onPurchaseValidationObjectName = stringFromChar(objectName); + } + + const void _setPurchaseRevenueDataSource(const char* objectName) { + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + + if (strstr(objectName, "StoreKit2") != NULL) { + + // Force protocol conformance + Protocol *sk2Protocol = @protocol(AppsFlyerPurchaseRevenueDataSourceStoreKit2); + class_addProtocol([_AppsFlyerdelegate class], sk2Protocol); + + if (![_AppsFlyerdelegate conformsToProtocol:@protocol(AppsFlyerPurchaseRevenueDataSourceStoreKit2)]) { + NSLog(@"[AppsFlyer] Warning: SK2 protocol not conformed!"); + } + } + + [PurchaseConnector shared].purchaseRevenueDataSource = _AppsFlyerdelegate; + } + + const void _setStoreKitVersion(int storeKitVersion) { + [[PurchaseConnector shared] setStoreKitVersion:(AFSDKStoreKitVersion)storeKitVersion]; + } + + const void _logConsumableTransaction(const char* transactionId) { + if (@available(iOS 15.0, *)) { + NSString *transactionIdStr = [NSString stringWithUTF8String:transactionId]; + [AFUnityStoreKit2Bridge fetchAFSDKTransactionSK2WithTransactionId:transactionIdStr completion:^(AFSDKTransactionSK2 *afTransaction) { + if (afTransaction) { + [[PurchaseConnector shared] logConsumableTransaction:afTransaction]; + } else { + NSLog(@"No AFSDKTransactionSK2 found for id %@", transactionIdStr); + } + }]; + } + } + + #ifdef __cplusplus + extern "C" { + #endif + + typedef const char *(*UnityPurchaseCallback)(const char *, const char *); + + UnityPurchaseCallback UnityPurchasesGetAdditionalParamsCallback = NULL; + UnityPurchaseCallback UnityPurchasesGetAdditionalParamsCallbackSK2 = NULL; + + __attribute__((visibility("default"))) + void RegisterUnityPurchaseRevenueParamsCallback(UnityPurchaseCallback callback) { + UnityPurchasesGetAdditionalParamsCallback = callback; + } + + __attribute__((visibility("default"))) + void RegisterUnityPurchaseRevenueParamsCallbackSK2(UnityPurchaseCallback callback) { + UnityPurchasesGetAdditionalParamsCallbackSK2 = callback; + } + + + #ifdef __cplusplus + } + #endif +} + +@implementation AppsFlyeriOSWarpper + +static BOOL didCallStart; ++ (BOOL) didCallStart +{ @synchronized(self) { return didCallStart; } } ++ (void) setDidCallStart:(BOOL)val +{ @synchronized(self) { didCallStart = val; } } + +- (void)onConversionDataSuccess:(NSDictionary *)installData { + unityCallBack(ConversionDataCallbackObject, GCD_CALLBACK, stringFromdictionary(installData)); +} + +- (void)onConversionDataFail:(NSError *)error { + unityCallBack(ConversionDataCallbackObject, GCD_ERROR_CALLBACK, [[error localizedDescription] UTF8String]); +} + +- (void)onAppOpenAttribution:(NSDictionary *)attributionData { + unityCallBack(ConversionDataCallbackObject, OAOA_CALLBACK, stringFromdictionary(attributionData)); +} + +- (void)onAppOpenAttributionFailure:(NSError *)error { + unityCallBack(ConversionDataCallbackObject, OAOA_ERROR_CALLBACK, [[error localizedDescription] UTF8String]); +} + +- (void)didResolveDeepLink:(AppsFlyerDeepLinkResult *)result{ + + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + + [dict setValue:stringFromDeepLinkResultError(result) forKey:@"error"]; + [dict setValue:stringFromDeepLinkResultStatus(result.status) forKey:@"status"]; + + if(result && result.deepLink){ + [dict setValue:result.deepLink.description forKey:@"deepLink"]; + [dict setValue:@(result.deepLink.isDeferred) forKey:@"is_deferred"]; + } + + unityCallBack(onDeeplinkingObjectName, ON_DEEPLINKING, stringFromdictionary(dict)); +} + +// Purchase Connector +- (void)didReceivePurchaseRevenueValidationInfo:(NSDictionary *)validationInfo error:(NSError *)error { + if (error != nil) { + unityCallBack(onPurchaseValidationObjectName, PURCHASE_REVENUE_ERROR_CALLBACK, [[error localizedDescription] UTF8String]); + } else { + unityCallBack(onPurchaseValidationObjectName, PURCHASE_REVENUE_VALIDATION_CALLBACK, stringFromdictionary(validationInfo)); + } +} + +- (NSDictionary *)purchaseRevenueAdditionalParametersForProducts:(NSSet *)products + transactions:(NSSet *)transactions { + + NSMutableArray *productsArray = [NSMutableArray array]; + for (SKProduct *product in products) { + [productsArray addObject:@{ + @"productIdentifier": product.productIdentifier ?: @"", + @"localizedTitle": product.localizedTitle ?: @"", + @"localizedDescription": product.localizedDescription ?: @"", + @"price": [product.price stringValue] ?: @"" + }]; + } + + NSMutableArray *transactionsArray = [NSMutableArray array]; + for (SKPaymentTransaction *txn in transactions) { + [transactionsArray addObject:@{ + @"transactionIdentifier": txn.transactionIdentifier ?: @"", + @"transactionState": @(txn.transactionState), + @"transactionDate": txn.transactionDate ? [@(txn.transactionDate.timeIntervalSince1970) stringValue] : @"" + }]; + } + + NSDictionary *input = @{ + @"products": productsArray, + @"transactions": transactionsArray + }; + + NSError *error = nil; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:input options:0 error:&error]; + if (error || !jsonData) { + NSLog(@"[AppsFlyer] Failed to serialize Unity purchase data: %@", error); + return @{}; + } + + NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + if (!jsonString || !UnityPurchasesGetAdditionalParamsCallback) { + NSLog(@"[AppsFlyer] Unity callback not registered"); + return @{}; + } + + const char *resultCStr = UnityPurchasesGetAdditionalParamsCallback([jsonString UTF8String], ""); + if (!resultCStr) { + NSLog(@"[AppsFlyer] Unity callback returned null"); + return @{}; + } + + NSString *resultJson = [NSString stringWithUTF8String:resultCStr]; + NSData *resultData = [resultJson dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *parsedResult = [NSJSONSerialization JSONObjectWithData:resultData options:0 error:&error]; + + if (error || ![parsedResult isKindOfClass:[NSDictionary class]]) { + NSLog(@"[AppsFlyer] Failed to parse Unity response: %@", error); + return @{}; + } + + return parsedResult; +} + +#pragma mark - AppsFlyerPurchaseRevenueDataSourceStoreKit2 +- (NSDictionary *)purchaseRevenueAdditionalParametersStoreKit2ForProducts:(NSSet *)products transactions:(NSSet *)transactions { + if (@available(iOS 15.0, *)) { + NSArray *productInfoArray = [AFUnityStoreKit2Bridge extractSK2ProductInfo:[products allObjects]]; + NSArray *transactionInfoArray = [AFUnityStoreKit2Bridge extractSK2TransactionInfo:[transactions allObjects]]; + + NSDictionary *input = @{ + @"products": productInfoArray, + @"transactions": transactionInfoArray + }; + + if (UnityPurchasesGetAdditionalParamsCallbackSK2) { + NSError *error = nil; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:input options:0 error:&error]; + if (error || !jsonData) { + NSLog(@"[AppsFlyer] Failed to serialize Unity purchase data: %@", error); + return @{}; + } + + NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + + const char *resultCStr = UnityPurchasesGetAdditionalParamsCallbackSK2([jsonString UTF8String], ""); + if (!resultCStr) { + NSLog(@"[AppsFlyer] Unity callback returned null"); + return @{}; + } + + NSString *resultJson = [NSString stringWithUTF8String:resultCStr]; + + NSData *resultData = [resultJson dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *parsedResult = [NSJSONSerialization JSONObjectWithData:resultData options:0 error:&error]; + + if (error || ![parsedResult isKindOfClass:[NSDictionary class]]) { + NSLog(@"[AppsFlyer] Failed to parse Unity response: %@", error); + return @{}; + } + + return parsedResult; + } else { + NSLog(@"[AppsFlyer] SK2 - Unity callback is NOT registered"); + } + } else { + NSLog(@"[AppsFlyer] SK2 - iOS version not supported"); + } + return @{}; +} + +@end + + diff --git a/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.mm.meta b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.mm.meta new file mode 100644 index 0000000..3799161 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Plugins/iOS/AppsFlyeriOSWrapper.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 2bff3788f3d8747fe9679bd3818e1d76 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime.meta new file mode 100644 index 0000000..3cb1ede --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf987ffd15f7b284b9c9748237652329 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFAdRevenueData.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFAdRevenueData.cs new file mode 100644 index 0000000..64d53de --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFAdRevenueData.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + public enum MediationNetwork : ulong + { + GoogleAdMob = 1, + IronSource = 2, + ApplovinMax = 3, + Fyber = 4, + Appodeal = 5, + Admost = 6, + Topon = 7, + Tradplus = 8, + Yandex = 9, + ChartBoost = 10, + Unity = 11, + ToponPte = 12, + Custom = 13, + DirectMonetization = 14 + } + + public static class AdRevenueScheme + { + /** + * code ISO 3166-1 format + */ + public const string COUNTRY = "country"; + + /** + * ID of the ad unit for the impression + */ + public const string AD_UNIT = "ad_unit"; + + /** + * Format of the ad + */ + public const string AD_TYPE = "ad_type"; + + /** + * ID of the ad placement for the impression + */ + public const string PLACEMENT = "placement"; + } + + /// + // Data class representing ad revenue information. + // + // @property monetizationNetwork The name of the network that monetized the ad. + // @property mediationNetwork An instance of MediationNetwork representing the mediation service used. + // @property currencyIso4217Code The ISO 4217 currency code describing the currency of the revenue. + // @property eventRevenue The amount of revenue generated by the ad. + /// + public class AFAdRevenueData + { + public string monetizationNetwork { get; private set; } + public MediationNetwork mediationNetwork { get; private set; } + public string currencyIso4217Code { get; private set; } + public double eventRevenue { get; private set; } + + public AFAdRevenueData(string monetization, MediationNetwork mediation, string currency, double revenue) + { + monetizationNetwork = monetization; + mediationNetwork = mediation; + currencyIso4217Code = currency; + eventRevenue = revenue; + } + } + +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFAdRevenueData.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFAdRevenueData.cs.meta new file mode 100644 index 0000000..3106aae --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFAdRevenueData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49e1906ae949e4bfea400bd1da9f7e39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFInAppEvents.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFInAppEvents.cs new file mode 100644 index 0000000..1f6d1fe --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFInAppEvents.cs @@ -0,0 +1,72 @@ +using UnityEngine; +using System.Collections; + +public class AFInAppEvents { + /** + * Event Type + * */ + public const string LEVEL_ACHIEVED = "af_level_achieved"; + public const string ADD_PAYMENT_INFO = "af_add_payment_info"; + public const string ADD_TO_CART = "af_add_to_cart"; + public const string ADD_TO_WISH_LIST = "af_add_to_wishlist"; + public const string COMPLETE_REGISTRATION = "af_complete_registration"; + public const string TUTORIAL_COMPLETION = "af_tutorial_completion"; + public const string INITIATED_CHECKOUT = "af_initiated_checkout"; + public const string PURCHASE = "af_purchase"; + public const string RATE = "af_rate"; + public const string SEARCH = "af_search"; + public const string SPENT_CREDIT = "af_spent_credits"; + public const string ACHIEVEMENT_UNLOCKED = "af_achievement_unlocked"; + public const string CONTENT_VIEW = "af_content_view"; + public const string TRAVEL_BOOKING = "af_travel_booking"; + public const string SHARE = "af_share"; + public const string INVITE = "af_invite"; + public const string LOGIN = "af_login"; + public const string RE_ENGAGE = "af_re_engage"; + public const string UPDATE = "af_update"; + public const string OPENED_FROM_PUSH_NOTIFICATION = "af_opened_from_push_notification"; + public const string LOCATION_CHANGED = "af_location_changed"; + public const string LOCATION_COORDINATES = "af_location_coordinates"; + public const string ORDER_ID = "af_order_id"; + /** + * Event Parameter Name + * **/ + public const string LEVEL = "af_level"; + public const string SCORE = "af_score"; + public const string SUCCESS = "af_success"; + public const string PRICE = "af_price"; + public const string CONTENT_TYPE = "af_content_type"; + public const string CONTENT_ID = "af_content_id"; + public const string CONTENT_LIST = "af_content_list"; + public const string CURRENCY = "af_currency"; + public const string QUANTITY = "af_quantity"; + public const string REGSITRATION_METHOD = "af_registration_method"; + public const string PAYMENT_INFO_AVAILIBLE = "af_payment_info_available"; + public const string MAX_RATING_VALUE = "af_max_rating_value"; + public const string RATING_VALUE = "af_rating_value"; + public const string SEARCH_STRING = "af_search_string"; + public const string DATE_A = "af_date_a"; + public const string DATE_B = "af_date_b"; + public const string DESTINATION_A = "af_destination_a"; + public const string DESTINATION_B = "af_destination_b"; + public const string DESCRIPTION = "af_description"; + public const string CLASS = "af_class"; + public const string EVENT_START = "af_event_start"; + public const string EVENT_END = "af_event_end"; + public const string LATITUDE = "af_lat"; + public const string LONGTITUDE = "af_long"; + public const string CUSTOMER_USER_ID = "af_customer_user_id"; + public const string VALIDATED = "af_validated"; + public const string REVENUE = "af_revenue"; + public const string RECEIPT_ID = "af_receipt_id"; + public const string PARAM_1 = "af_param_1"; + public const string PARAM_2 = "af_param_2"; + public const string PARAM_3 = "af_param_3"; + public const string PARAM_4 = "af_param_4"; + public const string PARAM_5 = "af_param_5"; + public const string PARAM_6 = "af_param_6"; + public const string PARAM_7 = "af_param_7"; + public const string PARAM_8 = "af_param_8"; + public const string PARAM_9 = "af_param_9"; + public const string PARAM_10 = "af_param_10"; +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFInAppEvents.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFInAppEvents.cs.meta new file mode 100644 index 0000000..b31364e --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFInAppEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4075c6cf6f3d94b9a9f37f826e6a0e6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFMiniJSON.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFMiniJSON.cs new file mode 100644 index 0000000..d02bf2f --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFMiniJSON.cs @@ -0,0 +1,547 @@ +/* + * Copyright (c) 2013 Calvin Rien + * + * Based on the JSON parser by Patrick van Bergen + * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html + * + * Simplified it so that it doesn't throw exceptions + * and can be used in Unity iPhone with maximum code stripping. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace AFMiniJSON { + // Example usage: + // + // using UnityEngine; + // using System.Collections; + // using System.Collections.Generic; + // using MiniJSON; + // + // public class MiniJSONTest : MonoBehaviour { + // void Start () { + // var jsonString = "{ \"array\": [1.44,2,3], " + + // "\"object\": {\"key1\":\"value1\", \"key2\":256}, " + + // "\"string\": \"The quick brown fox \\\"jumps\\\" over the lazy dog \", " + + // "\"unicode\": \"\\u3041 Men\u00fa sesi\u00f3n\", " + + // "\"int\": 65536, " + + // "\"float\": 3.1415926, " + + // "\"bool\": true, " + + // "\"null\": null }"; + // + // var dict = Json.Deserialize(jsonString) as Dictionary; + // + // Debug.Log("deserialized: " + dict.GetType()); + // Debug.Log("dict['array'][0]: " + ((List) dict["array"])[0]); + // Debug.Log("dict['string']: " + (string) dict["string"]); + // Debug.Log("dict['float']: " + (double) dict["float"]); // floats come out as doubles + // Debug.Log("dict['int']: " + (long) dict["int"]); // ints come out as longs + // Debug.Log("dict['unicode']: " + (string) dict["unicode"]); + // + // var str = Json.Serialize(dict); + // + // Debug.Log("serialized: " + str); + // } + // } + + /// + /// This class encodes and decodes JSON strings. + /// Spec. details, see http://www.json.org/ + /// + /// JSON uses Arrays and Objects. These correspond here to the datatypes IList and IDictionary. + /// All numbers are parsed to doubles. + /// + public static class Json { + /// + /// Parses the string json into a value + /// + /// A JSON string. + /// An List<object>, a Dictionary<string, object>, a double, an integer,a string, null, true, or false + public static object Deserialize(string json) { + // save the string for debug information + if (json == null) { + return null; + } + + return Parser.Parse(json); + } + + sealed class Parser : IDisposable { + const string WORD_BREAK = "{}[],:\""; + + public static bool IsWordBreak(char c) { + return Char.IsWhiteSpace(c) || WORD_BREAK.IndexOf(c) != -1; + } + + enum TOKEN { + NONE, + CURLY_OPEN, + CURLY_CLOSE, + SQUARED_OPEN, + SQUARED_CLOSE, + COLON, + COMMA, + STRING, + NUMBER, + TRUE, + FALSE, + NULL + }; + + StringReader json; + + Parser(string jsonString) { + json = new StringReader(jsonString); + } + + public static object Parse(string jsonString) { + using (var instance = new Parser(jsonString)) { + return instance.ParseValue(); + } + } + + public void Dispose() { + json.Dispose(); + json = null; + } + + Dictionary ParseObject() { + Dictionary table = new Dictionary(); + + // ditch opening brace + json.Read(); + + // { + while (true) { + switch (NextToken) { + case TOKEN.NONE: + return null; + case TOKEN.COMMA: + continue; + case TOKEN.CURLY_CLOSE: + return table; + default: + // name + string name = ParseString(); + if (name == null) { + return null; + } + + // : + if (NextToken != TOKEN.COLON) { + return null; + } + // ditch the colon + json.Read(); + + // value + table[name] = ParseValue(); + break; + } + } + } + + List ParseArray() { + List array = new List(); + + // ditch opening bracket + json.Read(); + + // [ + var parsing = true; + while (parsing) { + TOKEN nextToken = NextToken; + + switch (nextToken) { + case TOKEN.NONE: + return null; + case TOKEN.COMMA: + continue; + case TOKEN.SQUARED_CLOSE: + parsing = false; + break; + default: + object value = ParseByToken(nextToken); + + array.Add(value); + break; + } + } + + return array; + } + + object ParseValue() { + TOKEN nextToken = NextToken; + return ParseByToken(nextToken); + } + + object ParseByToken(TOKEN token) { + switch (token) { + case TOKEN.STRING: + return ParseString(); + case TOKEN.NUMBER: + return ParseNumber(); + case TOKEN.CURLY_OPEN: + return ParseObject(); + case TOKEN.SQUARED_OPEN: + return ParseArray(); + case TOKEN.TRUE: + return true; + case TOKEN.FALSE: + return false; + case TOKEN.NULL: + return null; + default: + return null; + } + } + + string ParseString() { + StringBuilder s = new StringBuilder(); + char c; + + // ditch opening quote + json.Read(); + + bool parsing = true; + while (parsing) { + + if (json.Peek() == -1) { + parsing = false; + break; + } + + c = NextChar; + switch (c) { + case '"': + parsing = false; + break; + case '\\': + if (json.Peek() == -1) { + parsing = false; + break; + } + + c = NextChar; + switch (c) { + case '"': + case '\\': + case '/': + s.Append(c); + break; + case 'b': + s.Append('\b'); + break; + case 'f': + s.Append('\f'); + break; + case 'n': + s.Append('\n'); + break; + case 'r': + s.Append('\r'); + break; + case 't': + s.Append('\t'); + break; + case 'u': + var hex = new char[4]; + + for (int i=0; i< 4; i++) { + hex[i] = NextChar; + } + + s.Append((char) Convert.ToInt32(new string(hex), 16)); + break; + } + break; + default: + s.Append(c); + break; + } + } + + return s.ToString(); + } + + object ParseNumber() { + string number = NextWord; + + if (number.IndexOf('.') == -1) { + long parsedInt; + Int64.TryParse(number, out parsedInt); + return parsedInt; + } + + double parsedDouble; + Double.TryParse(number, out parsedDouble); + return parsedDouble; + } + + void EatWhitespace() { + while (Char.IsWhiteSpace(PeekChar)) { + json.Read(); + + if (json.Peek() == -1) { + break; + } + } + } + + char PeekChar { + get { + return Convert.ToChar(json.Peek()); + } + } + + char NextChar { + get { + return Convert.ToChar(json.Read()); + } + } + + string NextWord { + get { + StringBuilder word = new StringBuilder(); + + while (!IsWordBreak(PeekChar)) { + word.Append(NextChar); + + if (json.Peek() == -1) { + break; + } + } + + return word.ToString(); + } + } + + TOKEN NextToken { + get { + EatWhitespace(); + + if (json.Peek() == -1) { + return TOKEN.NONE; + } + + switch (PeekChar) { + case '{': + return TOKEN.CURLY_OPEN; + case '}': + json.Read(); + return TOKEN.CURLY_CLOSE; + case '[': + return TOKEN.SQUARED_OPEN; + case ']': + json.Read(); + return TOKEN.SQUARED_CLOSE; + case ',': + json.Read(); + return TOKEN.COMMA; + case '"': + return TOKEN.STRING; + case ':': + return TOKEN.COLON; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + return TOKEN.NUMBER; + } + + switch (NextWord) { + case "false": + return TOKEN.FALSE; + case "true": + return TOKEN.TRUE; + case "null": + return TOKEN.NULL; + } + + return TOKEN.NONE; + } + } + } + + /// + /// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string + /// + /// A Dictionary<string, object> / List<object> + /// A JSON encoded string, or null if object 'json' is not serializable + public static string Serialize(object obj) { + return Serializer.Serialize(obj); + } + + sealed class Serializer { + StringBuilder builder; + + Serializer() { + builder = new StringBuilder(); + } + + public static string Serialize(object obj) { + var instance = new Serializer(); + + instance.SerializeValue(obj); + + return instance.builder.ToString(); + } + + void SerializeValue(object value) { + IList asList; + IDictionary asDict; + string asStr; + + if (value == null) { + builder.Append("null"); + } else if ((asStr = value as string) != null) { + SerializeString(asStr); + } else if (value is bool) { + builder.Append((bool) value ? "true" : "false"); + } else if ((asList = value as IList) != null) { + SerializeArray(asList); + } else if ((asDict = value as IDictionary) != null) { + SerializeObject(asDict); + } else if (value is char) { + SerializeString(new string((char) value, 1)); + } else { + SerializeOther(value); + } + } + + void SerializeObject(IDictionary obj) { + bool first = true; + + builder.Append('{'); + + foreach (object e in obj.Keys) { + if (!first) { + builder.Append(','); + } + + SerializeString(e.ToString()); + builder.Append(':'); + + SerializeValue(obj[e]); + + first = false; + } + + builder.Append('}'); + } + + void SerializeArray(IList anArray) { + builder.Append('['); + + bool first = true; + + foreach (object obj in anArray) { + if (!first) { + builder.Append(','); + } + + SerializeValue(obj); + + first = false; + } + + builder.Append(']'); + } + + void SerializeString(string str) { + builder.Append('\"'); + + char[] charArray = str.ToCharArray(); + foreach (var c in charArray) { + switch (c) { + case '"': + builder.Append("\\\""); + break; + case '\\': + builder.Append("\\\\"); + break; + case '\b': + builder.Append("\\b"); + break; + case '\f': + builder.Append("\\f"); + break; + case '\n': + builder.Append("\\n"); + break; + case '\r': + builder.Append("\\r"); + break; + case '\t': + builder.Append("\\t"); + break; + default: + int codepoint = Convert.ToInt32(c); + if ((codepoint >= 32) && (codepoint <= 126)) { + builder.Append(c); + } else { + builder.Append("\\u"); + builder.Append(codepoint.ToString("x4")); + } + break; + } + } + + builder.Append('\"'); + } + + void SerializeOther(object value) { + // NOTE: decimals lose precision during serialization. + // They always have, I'm just letting you know. + // Previously floats and doubles lost precision too. + if (value is float) { + builder.Append(((float) value).ToString("R")); + } else if (value is int + || value is uint + || value is long + || value is sbyte + || value is byte + || value is short + || value is ushort + || value is ulong) { + builder.Append(value); + } else if (value is double + || value is decimal) { + builder.Append(Convert.ToDouble(value).ToString("R")); + } else { + SerializeString(value.ToString()); + } + } + } + } +} diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFMiniJSON.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFMiniJSON.cs.meta new file mode 100644 index 0000000..11ec5c9 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFMiniJSON.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc3d1c806d507463e9b560eb09d8eb0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFPurchaseDetailsAndroid.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFPurchaseDetailsAndroid.cs new file mode 100644 index 0000000..d149885 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFPurchaseDetailsAndroid.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + public enum AFPurchaseType + { + Subscription = 0, + OneTimePurchase = 1 + } + + /// + /// Purchase details class matching Android SDK AFPurchaseDetails + /// + public class AFPurchaseDetailsAndroid + { + public AFPurchaseType purchaseType { get; private set; } + public string purchaseToken { get; private set; } + public string productId { get; private set; } + + public AFPurchaseDetailsAndroid(AFPurchaseType type, String purchaseToken, String productId) + { + this.purchaseType = type; + this.purchaseToken = purchaseToken; + this.productId = productId; + } + + } + +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFPurchaseDetailsAndroid.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFPurchaseDetailsAndroid.cs.meta new file mode 100644 index 0000000..6d0024d --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFPurchaseDetailsAndroid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d71b3864006f94ac08938b2ebdc940bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKPurchaseDetailsIOS.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKPurchaseDetailsIOS.cs new file mode 100644 index 0000000..0dcde3a --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKPurchaseDetailsIOS.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + /// + /// Purchase type enum matching iOS SDK AFSDKPurchaseType + /// + public enum AFSDKPurchaseType + { + Subscription, + OneTimePurchase + } + + /// + /// Purchase details class matching iOS SDK AFSDKPurchaseDetails + /// + public class AFSDKPurchaseDetailsIOS + { + public string productId { get; private set; } + public string transactionId { get; private set; } + public AFSDKPurchaseType purchaseType { get; private set; } + + private AFSDKPurchaseDetailsIOS(string productId, string transactionId, AFSDKPurchaseType purchaseType) + { + this.productId = productId; + this.transactionId = transactionId; + this.purchaseType = purchaseType; + } + + public static AFSDKPurchaseDetailsIOS Init(string productId, string transactionId, AFSDKPurchaseType purchaseType) + { + return new AFSDKPurchaseDetailsIOS(productId, transactionId, purchaseType); + } + } + +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKPurchaseDetailsIOS.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKPurchaseDetailsIOS.cs.meta new file mode 100644 index 0000000..f33ebcc --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKPurchaseDetailsIOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44bb6c4472701416080eb050732075ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKValidateAndLogResult.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKValidateAndLogResult.cs new file mode 100644 index 0000000..e877fbd --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKValidateAndLogResult.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + public enum AFSDKValidateAndLogStatus + { + AFSDKValidateAndLogStatusSuccess, + AFSDKValidateAndLogStatusFailure, + AFSDKValidateAndLogStatusError + } + + + /// + // + /// + public class AFSDKValidateAndLogResult + { + public AFSDKValidateAndLogStatus status { get; private set; } + public Dictionary result { get; private set; } + public Dictionary errorData { get; private set; } + public string error { get; private set; } + + private AFSDKValidateAndLogResult(AFSDKValidateAndLogStatus status, Dictionary result, Dictionary errorData, string error) + { + this.status = status; + this.result = result; + this.errorData = errorData; + this.error = error; + } + + public static AFSDKValidateAndLogResult Init(AFSDKValidateAndLogStatus status, Dictionary result, Dictionary errorData, string error) + { + return new AFSDKValidateAndLogResult(status, result, errorData, error); + } + } + +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKValidateAndLogResult.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKValidateAndLogResult.cs.meta new file mode 100644 index 0000000..63d4835 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AFSDKValidateAndLogResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2df1c6f1eab2e4849bf2762a8d78933f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.asmdef b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.asmdef new file mode 100644 index 0000000..381ee00 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.asmdef @@ -0,0 +1,13 @@ +{ + "name": "AppsFlyer", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.asmdef.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.asmdef.meta new file mode 100644 index 0000000..380f36a --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2a37df438292d4903b4e5159c5de3bf9 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.cs new file mode 100644 index 0000000..8259f5e --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.cs @@ -0,0 +1,1099 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace AppsFlyerSDK +{ + public class AppsFlyer : MonoBehaviour + { + public static readonly string kAppsFlyerPluginVersion = "6.17.72"; + public static string CallBackObjectName = null; + private static EventHandler onRequestResponse; + private static EventHandler onInAppResponse; + private static EventHandler onDeepLinkReceived; + public static IAppsFlyerNativeBridge instance = null; + public delegate void unityCallBack(string message); + + + /// + /// Initialize the AppsFlyer SDK with your devKey and appID. + /// The dev key is required on all platforms, and the appID is required for iOS. + /// If you app is for Android only pass null for the appID. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + /// Your app's Apple ID. + /// + /// + /// AppsFlyer.initSDK("K2***********99", "41*****44""); + /// + /// + public static void initSDK(string devKey, string appID) + { + initSDK(devKey, appID, null); + } + + /// + /// Initialize the AppsFlyer SDK with your devKey and appID. + /// The dev key is required on all platforms, and the appID is required for iOS. + /// If you app is for Android only pass null for the appID. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + /// Your app's Apple ID. + /// pass the script of the game object being used. + /// + /// + /// AppsFlyer.initSDK("K2***********99", 41*****44, this); + /// + /// + public static void initSDK(string devKey, string appID, MonoBehaviour gameObject) + { + + if (gameObject != null) + { +#if UNITY_STANDALONE_OSX + CallBackObjectName = gameObject.GetType().ToString(); +#else + CallBackObjectName = gameObject.name; +#endif + } + +#if UNITY_IOS || UNITY_STANDALONE_OSX + if (instance == null || !instance.isInit) + { + instance = new AppsFlyeriOS(devKey, appID, gameObject); + instance.isInit = true; + } +#elif UNITY_ANDROID + if (instance == null || !instance.isInit) + { + AppsFlyerAndroid appsFlyerAndroid = new AppsFlyerAndroid(); + appsFlyerAndroid.initSDK(devKey, gameObject); + instance = appsFlyerAndroid; + instance.isInit = true; + + } +#elif UNITY_WSA_10_0 + AppsFlyerWindows.InitSDK(devKey, appID, gameObject); + if (gameObject != null) + { + AppsFlyerWindows.GetConversionData(gameObject.name); + } +#else + +#endif + } + + + /// + /// Once this API is invoked, our SDK will start. + /// Once the API is called a sessions will be immediately sent, and all background forground transitions will send a session. + /// + public static void startSDK() + { +#if UNITY_WSA_10_0 + AppsFlyerWindows.Start(); + +#else + if (instance != null) + { + instance.startSDK(onRequestResponse != null, CallBackObjectName); + } +#endif + } + + + + + + + /// + /// Send an In-App Event. + /// In-App Events provide insight on what is happening in your app. + /// + /// Event Name as String. + /// Event Values as Dictionary. + public static void sendEvent(string eventName, Dictionary eventValues) + { +#if UNITY_WSA_10_0 && !UNITY_EDITOR + AppsFlyerWindows.LogEvent(eventName, eventValues); +#else + if (instance != null) + { + instance.sendEvent(eventName, eventValues, onInAppResponse != null, CallBackObjectName); + } +#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. + /// + /// should sdk be stopped. + public static void stopSDK(bool isSDKStopped) + { + if (instance != null) + { + instance.stopSDK(isSDKStopped); + } + } + + // + /// Was the stopSDK(boolean) API set to true. + /// + /// boolean isSDKStopped. + public static bool isSDKStopped() + { + if (instance != null) + { + return instance.isSDKStopped(); + } + + return false; + } + + /// + /// Get the AppsFlyer SDK version used in app. + /// + /// The current SDK version. + public static string getSdkVersion() + { + if (instance != null) + { + return instance.getSdkVersion(); + } + + return ""; + + } + + /// + /// Enables Debug logs for the AppsFlyer SDK. + /// Should only be set to true in development / debug. + /// + /// shouldEnable boolean. + public static void setIsDebug(bool shouldEnable) + { + if (instance != null) + { + instance.setIsDebug(shouldEnable); + } else { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); + instance.setIsDebug(shouldEnable); +#elif UNITY_ANDROID + instance = new AppsFlyerAndroid(); + instance.setIsDebug(shouldEnable); +#else + +#endif + } + + } + + /// + /// Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. + /// This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs. + /// + /// Customer ID for client. + public static void setCustomerUserId(string id) + { +#if UNITY_WSA_10_0 && !UNITY_EDITOR + AppsFlyerWindows.SetCustomerUserId(id); +#else + if (instance != null) + { + instance.setCustomerUserId(id); + } +#endif + } + + /// + /// Set the OneLink ID that should be used for User-Invite-API. + /// 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 oneLinkId) + { + + if (instance != null) + { + instance.setAppInviteOneLinkID(oneLinkId); + } + + + } + + /// + /// Set the deepLink timeout value that should be used for DDL. + /// + /// deepLink timeout in milliseconds. + public static void setDeepLinkTimeout(long deepLinkTimeout) + { + + if (instance != null) + { + instance.setDeepLinkTimeout(deepLinkTimeout); + } + + + } + + /// + /// Set additional data to be sent to AppsFlyer. + /// + /// additional data Dictionary. + public static void setAdditionalData(Dictionary customData) + { + + if (instance != null) + { + instance.setAdditionalData(customData); + } + + + } + + /// + /// Advertisers can wrap AppsFlyer OneLink within another Universal Link. + /// This Universal Link will invoke the app but any deep linking data will not propagate to AppsFlyer. + /// + /// Array of urls. + public static void setResolveDeepLinkURLs(params string[] urls) + { + + if (instance != null) + { + instance.setResolveDeepLinkURLs(urls); + } + + + } + + + /// + /// Advertisers can use this method to set vanity onelink domains. + /// + /// Array of domains. + public static void setOneLinkCustomDomain(params string[] domains) + { + + if (instance != null) + { + instance.setOneLinkCustomDomain(domains); + } + else + { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); +#elif UNITY_ANDROID + instance = new AppsFlyerAndroid(); +#else + +#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 (instance != null) + { + instance.setCurrencyCode(currencyCode); + } else { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); + instance.setCurrencyCode(currencyCode); +#elif UNITY_ANDROID + instance = new AppsFlyerAndroid(); + instance.setCurrencyCode(currencyCode); +#else +#endif + } + } + + /// + /// Sets or updates the user consent data related to GDPR and DMA regulations for advertising and data usage purposes within the application. + /// + /// instance of AppsFlyerConsent. + public static void setConsentData(AppsFlyerConsent appsFlyerConsent) + { + if (instance != null) + { + instance.setConsentData(appsFlyerConsent); + } + } + + /// + /// Logs ad revenue data along with additional parameters if provided. + /// + /// instance of AFAdRevenueData containing ad revenue information. + /// An optional map of additional parameters to be logged with ad revenue data. This can be null if there are no additional parameters. + public static void logAdRevenue(AFAdRevenueData adRevenueData, Dictionary additionalParameters) + { + if (instance != null) + { + instance.logAdRevenue(adRevenueData, additionalParameters); + } + } + + /// + /// Manually record the location of the user. + /// + /// latitude as double. + /// longitude as double. + public static void recordLocation(double latitude, double longitude) + { + + if (instance != null) + { + instance.recordLocation(latitude, longitude); + } + + + } + + /// + /// Anonymize user Data. + /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. + /// Default is false. + /// + /// shouldAnonymizeUser boolean. + public static void anonymizeUser(bool shouldAnonymizeUser) + { + + if (instance != null) + { + instance.anonymizeUser(shouldAnonymizeUser); + } + + + } + + /// + /// 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. + /// + /// should start TCF Data collection boolean. + public static void enableTCFDataCollection(bool shouldCollectTcfData) + { + if (instance != null) + { + instance.enableTCFDataCollection(shouldCollectTcfData); + } + } + + /// + /// Get AppsFlyer's unique device ID which is created for every new install of an app. + /// + /// AppsFlyer's unique device ID. + public static string getAppsFlyerId() + { +#if UNITY_WSA_10_0 && !UNITY_EDITOR + return AppsFlyerWindows.GetAppsFlyerId(); +#else + if (instance != null) + { + return instance.getAppsFlyerId(); + } +#endif + return string.Empty; + + } + + /// + /// Set a custom value for the minimum required time between sessions. + /// By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions. + /// + /// minimum time between 2 separate sessions in seconds. + public static void setMinTimeBetweenSessions(int seconds) + { + + if (instance != null) + { + instance.setMinTimeBetweenSessions(seconds); + } + + + } + + /// + /// Set a custom host. + /// + /// Host prefix. + /// Host name. + public static void setHost(string hostPrefixName, string hostName) + { + + if (instance != null) + { + instance.setHost(hostPrefixName, hostName); + } else { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); + instance.setHost(hostPrefixName, hostName); +#elif UNITY_ANDROID + instance = new AppsFlyerAndroid(); + instance.setHost(hostPrefixName, hostName); +#else +#endif + } + } + + /// + /// Set the user emails and encrypt them. + /// cryptMethod Encryption method: + /// EmailCryptType.EmailCryptTypeMD5 + /// EmailCryptType.EmailCryptTypeSHA1 + /// EmailCryptType.EmailCryptTypeSHA256 + /// EmailCryptType.EmailCryptTypeNone + /// + /// Encryption method. + /// User emails. + public static void setUserEmails(EmailCryptType cryptType, params string[] userEmails) + { + + if (instance != null) + { + instance.setUserEmails(cryptType, userEmails); + } + + } + + public static void updateServerUninstallToken(string token) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.updateServerUninstallToken(token); + } + } + + /// + /// Set the user phone number. + /// + /// phoneNumber string + public static void setPhoneNumber(string phoneNumber) + { + + if (instance != null) + { + instance.setPhoneNumber(phoneNumber); + } + + } + + public static void setImeiData(string aImei) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setImeiData(aImei); + } + } + + /// + /// Used by advertisers to exclude all networks/integrated partners from getting data. + /// + [Obsolete("Please use setSharingFilterForPartners api")] + public static void setSharingFilterForAllPartners() + { + + if (instance != null) + { + instance.setSharingFilterForAllPartners(); + } + + + } + + public static void setAndroidIdData(string aAndroidId) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setAndroidIdData(aAndroidId); + } + } + + public static void waitForCustomerUserId(bool wait) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.waitForCustomerUserId(wait); + } + } + + /// + /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. + /// + /// partners to exclude from getting data + [Obsolete("Please use setSharingFilterForPartners api")] + public static void setSharingFilter(params string[] partners) + { + + if (instance != null) + { + instance.setSharingFilter(partners); + } + + + } + + public static void setCustomerIdAndStartSDK(string id) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setCustomerIdAndStartSDK(id); + } + } + + /// + /// Lets you configure how which partners should the SDK exclude from data-sharing. + /// + /// partners to exclude from getting data + public static void setSharingFilterForPartners(params string[] partners) + { +#if UNITY_IOS || UNITY_STANDALONE_OSX + AppsFlyeriOS.setSharingFilterForPartners(partners); +#elif UNITY_ANDROID + AppsFlyerAndroid.setSharingFilterForPartners(partners); +#else + +#endif + } + + public static string getOutOfStore() + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + return appsFlyerAndroidInstance.getOutOfStore(); + } + return string.Empty; + } + + public static void setOutOfStore(string sourceName) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setOutOfStore(sourceName); + } + } + + /// + /// Register a Conversion Data Listener. + /// 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. + /// + /// + /// + /// AppsFlyer.getConversionData(this.name); + /// + /// + public static void getConversionData(string objectName) + { +#if UNITY_WSA_10_0 && !UNITY_EDITOR + AppsFlyerWindows.GetConversionData(""); +#else + if (instance != null) + { + instance.getConversionData(objectName); + } +#endif + + } + + public static void setCollectAndroidID(bool isCollect) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setCollectAndroidID(isCollect); + } + } + + public static void setIsUpdate(bool isUpdate) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setIsUpdate(isUpdate); + } + } + + public static void setCollectIMEI(bool isCollect) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setCollectIMEI(isCollect); + } + } + + public static void setDisableCollectAppleAdSupport(bool disable) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setDisableCollectAppleAdSupport(disable); + } + } + + public static void setShouldCollectDeviceName(bool shouldCollectDeviceName) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setShouldCollectDeviceName(shouldCollectDeviceName); + } + } + + + /// + /// 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 + /// + /// + /// Dictionary parameters = new Dictionary(); + /// parameters.Add("af_sub1", "val"); + /// parameters.Add("custom_param", "val2"); + /// AppsFlyer.attributeAndOpenStore("123456789", "test campaign", parameters, this); + /// + /// + public static void attributeAndOpenStore(string appID, string campaign, Dictionary userParams, MonoBehaviour gameObject) + { + + if (instance != null) + { + instance.attributeAndOpenStore(appID, campaign, userParams, gameObject); + } + + } + + public static void setPreinstallAttribution(string mediaSource, string campaign, string siteId) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setPreinstallAttribution(mediaSource, campaign, siteId); + } + } + + public static void setDisableCollectIAd(bool disableCollectIAd) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setDisableCollectIAd(disableCollectIAd); + } + } + + public static bool isPreInstalledApp() + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + return appsFlyerAndroidInstance.isPreInstalledApp(); + } + return false; + } + + public static void setUseReceiptValidationSandbox(bool useReceiptValidationSandbox) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setUseReceiptValidationSandbox(useReceiptValidationSandbox); + } + } + + /// + /// To attribute 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 (instance != null) + { + instance.recordCrossPromoteImpression(appID, campaign, parameters); + } + + } + + public static void setUseUninstallSandbox(bool useUninstallSandbox) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setUseUninstallSandbox(useUninstallSandbox); + } + } + + public static string getAttributionId() + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + return appsFlyerAndroidInstance.getAttributionId(); + } + return string.Empty; + } + + public static void handlePushNotifications() + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.handlePushNotifications(); + } + } + + public static void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string transactionId, Dictionary additionalParameters, MonoBehaviour gameObject) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.validateAndSendInAppPurchase(productIdentifier, price, currency, transactionId, additionalParameters, gameObject); + } + } + + // V2 + public static void validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.validateAndSendInAppPurchase(details, purchaseAdditionalDetails, gameObject); + } + } + + public static void validateAndSendInAppPurchase(string publicKey, string signature, string purchaseData, string price, string currency, Dictionary additionalParameters, MonoBehaviour gameObject) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.validateAndSendInAppPurchase(publicKey, signature,purchaseData, price, currency, additionalParameters, gameObject); + } + } + + // V2 + public static void validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.validateAndSendInAppPurchase(details, purchaseAdditionalDetails, gameObject); + } + } + + public static void handleOpenUrl(string url, string sourceApplication, string annotation) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.handleOpenUrl(url, sourceApplication, annotation); + } + } + + public static void registerUninstall(byte[] deviceToken) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.registerUninstall(deviceToken); + } + } + + public static void waitForATTUserAuthorizationWithTimeoutInterval(int timeoutInterval) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.waitForATTUserAuthorizationWithTimeoutInterval(timeoutInterval); + } + } + + public static void setCurrentDeviceLanguage(string language) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setCurrentDeviceLanguage(language); + } + } + + /// + /// 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 (instance != null) + { + instance.generateUserInviteLink(parameters, gameObject); + } + + } + + public static void disableSKAdNetwork(bool isDisabled) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.disableSKAdNetwork(isDisabled); + } else { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.disableSKAdNetwork(isDisabled); +#else +#endif + } + } + + public static void setCollectOaid(bool isCollect) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setCollectOaid(isCollect); + } + } + + + /// + /// 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. + /// + /// array of nested json path + public static void addPushNotificationDeepLinkPath(params string[] paths) + { + + if (instance != null) + { + instance.addPushNotificationDeepLinkPath(paths); + } + + } + + public static void setDisableAdvertisingIdentifiers(bool disable) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setDisableAdvertisingIdentifiers(disable); + } + } + + /// + /// Subscribe for unified deeplink API. + /// This is called automatically from OnDeepLinkReceived. + /// CallBackObjectName is set in the init method. + /// + public static void subscribeForDeepLink() + { + + if (instance != null) + { + instance.subscribeForDeepLink(CallBackObjectName); + } + + } + + /// + /// Allows sending custom data for partner integration purposes. + /// partnerId : id of the partner + /// partnerInfo: customer data + /// + public static void setPartnerData(string partnerId, Dictionary partnerInfo) + { + if (instance != null) + { + instance.setPartnerData(partnerId, partnerInfo); + } + + } + + /// + /// Use to opt-out of collecting the network operator name (carrier) and sim operator name from the device. + /// + public static void setDisableNetworkData(bool disable) { + if (instance != null && instance is IAppsFlyerAndroidBridge) { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setDisableNetworkData(disable); + } + } + + + /// + /// Use to disable app vendor identifier (IDFV) collection, 'true' to disable. + /// + public static void disableIDFVCollection(bool isDisabled) + { +#if UNITY_IOS || UNITY_STANDALONE_OSX + if (instance == null) { + instance = new AppsFlyeriOS(); + } + if (instance != null && instance is IAppsFlyerIOSBridge) { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.disableIDFVCollection(isDisabled); + } +#else +#endif + } + + /// + /// Start callback event. + /// + public static event EventHandler OnRequestResponse + { + add + { + onRequestResponse += value; + } + remove + { + onRequestResponse -= value; + } + } + + /// + /// In-App callback event. + /// + public static event EventHandler OnInAppResponse + { + add + { + onInAppResponse += value; + } + remove + { + onInAppResponse -= value; + } + } + + /// + /// Unified DeepLink Event + /// + public static event EventHandler OnDeepLinkReceived + { + add + { + onDeepLinkReceived += value; + subscribeForDeepLink(); + } + remove + { + onDeepLinkReceived -= value; + } + } + + /// + /// Used to accept start callback from UnitySendMessage on native side. + /// + public void inAppResponseReceived(string response) + { + if (onInAppResponse != null) + { + onInAppResponse.Invoke(null, parseRequestCallback(response)); + } + } + + /// + /// Used to accept in-app callback from UnitySendMessage on native side. + /// + public void requestResponseReceived(string response) + { + if (onRequestResponse != null) + { + onRequestResponse.Invoke(null, parseRequestCallback(response)); + } + } + + /// + /// Used to accept deeplink callback from UnitySendMessage on native side. + /// + public void onDeepLinking(string response) + { + + DeepLinkEventsArgs args = new DeepLinkEventsArgs(response); + + if (onDeepLinkReceived != null) + { + onDeepLinkReceived.Invoke(null, args); + } + } + + private static AppsFlyerRequestEventArgs parseRequestCallback(string response) + { + int responseCode = 0; + string errorDescription = ""; + + try + { + Dictionary dictionary = CallbackStringToDictionary(response); + var errorResponse = dictionary.ContainsKey("errorDescription") ? dictionary["errorDescription"] : ""; + errorDescription = (string)errorResponse; + responseCode = (int)(long) dictionary["statusCode"]; + } + catch (Exception e) + { + AFLog("parseRequestCallback", String.Format("{0} Exception caught.", e)); + } + + return new AppsFlyerRequestEventArgs(responseCode, errorDescription); + } + + /// + /// Helper method to convert json strings to dictionary. + /// + /// json string + /// dictionary representing the input json string. + public static Dictionary CallbackStringToDictionary(string str) + { + return AFMiniJSON.Json.Deserialize(str) as Dictionary; + } + + /// + /// Helper method to log AppsFlyer events and callbacks. + /// + /// method name + /// message to log + public static void AFLog(string methodName, string str) + { + Debug.Log(string.Format("AppsFlyer_Unity_v{0} {1} called with {2}", kAppsFlyerPluginVersion, methodName, str)); + } + } + + public enum EmailCryptType + { + // None + EmailCryptTypeNone = 0, + // SHA256 + EmailCryptTypeSHA256 = 1, + } + +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.cs.meta new file mode 100644 index 0000000..48d98d5 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45161025a517d427381d3d06153a5ad3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerAndroid.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerAndroid.cs new file mode 100644 index 0000000..695b4a2 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerAndroid.cs @@ -0,0 +1,851 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace AppsFlyerSDK +{ + +#if UNITY_ANDROID + public class AppsFlyerAndroid : IAppsFlyerAndroidBridge + { + public bool isInit { get; set; } + + private static AndroidJavaClass appsFlyerAndroid = new AndroidJavaClass("com.appsflyer.unity.AppsFlyerAndroidWrapper"); + + public AppsFlyerAndroid() { } + + /// + /// Use this method to init the sdk for the application. + /// Call this method before startSDK. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + /// The current game object. This is used to get the conversion data callbacks. Pass null if you do not need the callbacks. + public void initSDK(string devkey, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("initSDK", devkey, gameObject ? gameObject.name : null); +#endif + } + + /// + /// Use this method to start the sdk for the application. + /// The AppsFlyer's Dev-Key must be provided. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + public void startSDK(bool onRequestResponse, string CallBackObjectName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("startTracking", onRequestResponse, CallBackObjectName); +#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 should SDK be stopped. + public void stopSDK(bool isSDKStopped) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("stopTracking", isSDKStopped); +#endif + } + + /// + /// Get the AppsFlyer SDK version used in app. + /// + /// AppsFlyer SDK version. + public string getSdkVersion() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getSdkVersion"); +#else + return ""; +#endif + } + + /// + /// Manually pass the Firebase / GCM Device Token for Uninstall measurement. + /// + /// Firebase Device Token. + public void updateServerUninstallToken(string token) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("updateServerUninstallToken", token); +#endif + } + + /// + /// Enables Debug logs for the AppsFlyer SDK. + /// Should only be set to true in development / debug. + /// + /// shouldEnable boolean. + public void setIsDebug(bool shouldEnable) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setIsDebug", shouldEnable); +#endif + } + + /// + /// By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat (4.4) + /// and the device contains Google Play Services(on SDK versions 4.8.8 and below the specific app needed GPS). + /// Use this API to explicitly send IMEI to AppsFlyer. + /// + /// device's IMEI. + public void setImeiData(string aImei) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setImeiData", aImei); +#endif + } + + /// + /// By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat(4.4) + /// and the device contains Google Play Services(on SDK versions 4.8.8 and below the specific app needed GPS). + /// Use this API to explicitly send Android ID to AppsFlyer. + /// + /// device's Android ID. + public void setAndroidIdData(string aAndroidId) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setAndroidIdData", aAndroidId); +#endif + } + + /// + /// Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. + /// This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs. + /// + /// Customer ID for client. + public void setCustomerUserId(string id) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCustomerUserId", id); +#endif + } + + /// + /// It is possible to delay the SDK Initialization until the customerUserID is set. + /// This feature makes sure that the SDK doesn't begin functioning until the customerUserID is provided. + /// If this API is used, all in-app events and any other SDK API calls are discarded, until the customerUserID is provided. + /// + /// wait boolean. + public void waitForCustomerUserId(bool wait) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("waitForCustomerUserId", wait); +#endif + } + + /// + /// Use this API to provide the SDK with the relevant customer user id and trigger the SDK to begin its normal activity. + /// + /// Customer ID for client. + public void setCustomerIdAndStartSDK(string id) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCustomerIdAndTrack", id); +#endif + } + + /// + /// Get the current AF_STORE value. + /// + /// AF_Store value. + public string getOutOfStore() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getOutOfStore"); +#else + return ""; +#endif + } + + /// + /// Manually set the AF_STORE value. + /// + /// value to be set. + public void setOutOfStore(string sourceName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setOutOfStore", sourceName); +#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 void setAppInviteOneLinkID(string oneLinkId) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setAppInviteOneLinkID", oneLinkId); +#endif + } + + /// + /// Set additional data to be sent to AppsFlyer. + /// + /// additional data Dictionary. + public void setAdditionalData(Dictionary customData) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setAdditionalData", convertDictionaryToJavaMap(customData)); +#endif + } + + //// + /// Set the deepLink timeout value that should be used for DDL. + /// + /// deepLink timeout in milliseconds. + public void setDeepLinkTimeout(long deepLinkTimeout) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setDeepLinkTimeout", deepLinkTimeout); +#endif + } + + /// + /// Set the user emails. + /// + /// User emails. + public void setUserEmails(params string[] userEmails) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setUserEmails", (object)userEmails); +#endif + } + + + /// + /// Set the user phone number. + /// + /// User phoneNumber. + public void setPhoneNumber(string phoneNumber){ +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setPhoneNumber", phoneNumber); +#endif + } + + /// + /// Set the user emails and encrypt them. + /// cryptMethod Encryption method: + /// EmailCryptType.EmailCryptTypeMD5 + /// EmailCryptType.EmailCryptTypeSHA1 + /// EmailCryptType.EmailCryptTypeSHA256 + /// EmailCryptType.EmailCryptTypeNone + /// + /// Encryption method. + /// User emails. + public void setUserEmails(EmailCryptType cryptMethod, params string[] emails) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setUserEmails", getEmailType(cryptMethod), (object)emails); +#endif + } + + /// + /// Opt-out of collection of Android ID. + /// If the app does NOT contain Google Play Services, Android ID is collected by the SDK. + /// However, apps with Google play services should avoid Android ID collection as this is in violation of the Google Play policy. + /// + /// boolean, false to opt-out. + public void setCollectAndroidID(bool isCollect) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCollectAndroidID", isCollect); +#endif + } + + /// + /// Opt-out of collection of IMEI. + /// If the app does NOT contain Google Play Services, device IMEI is collected by the SDK. + /// However, apps with Google play services should avoid IMEI collection as this is in violation of the Google Play policy. + /// + /// boolean, false to opt-out. + public void setCollectIMEI(bool isCollect) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCollectIMEI", isCollect); +#endif + } + + /// + /// Advertisers can wrap AppsFlyer OneLink within another Universal Link. + /// This Universal Link will invoke the app but any deep linking data will not propagate to AppsFlyer. + /// + /// Array of urls. + public void setResolveDeepLinkURLs(params string[] urls) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setResolveDeepLinkURLs", (object)urls); +#endif + } + + + /// + /// Advertisers can use this method to set vanity onelink domains. + /// + /// Array of domains. + public void setOneLinkCustomDomain(params string[] domains) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setOneLinkCustomDomain", (object)domains); +#endif + } + + /// + /// Manually set that the application was updated. + /// + /// isUpdate boolean value. + public void setIsUpdate(bool isUpdate) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setIsUpdate", isUpdate); +#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 void setCurrencyCode(string currencyCode) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCurrencyCode", currencyCode); +#endif + } + + /// + /// Manually record the location of the user. + /// + /// latitude as double. + /// longitude as double. + public void recordLocation(double latitude, double longitude) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("trackLocation", latitude, longitude); +#endif + } + + /// + /// Send an In-App Event. + /// In-App Events provide insight on what is happening in your app. + /// + /// Event Name as String. + /// Event Values as Dictionary. + public void sendEvent(string eventName, Dictionary eventValues) + { + sendEvent(eventName, eventValues, false, AppsFlyer.CallBackObjectName); + } + + public void sendEvent(string eventName, Dictionary eventValues, bool shouldCallback, string callBackObjectName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("trackEvent", eventName, convertDictionaryToJavaMap(eventValues), shouldCallback, callBackObjectName); +#endif + } + + /// + /// Anonymize user Data. + /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. + /// Default is false. + /// + /// isDisabled boolean. + public void anonymizeUser(bool isDisabled) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setDeviceTrackingDisabled", isDisabled); +#endif + } + + /// + /// 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. + /// + /// should start TCF Data collection boolean. + public void enableTCFDataCollection(bool shouldCollectTcfData) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("enableTCFDataCollection", shouldCollectTcfData); +#endif + } + + /// + /// Enable the collection of Facebook Deferred AppLinks. + /// Requires Facebook SDK and Facebook app on target/client device. + /// This API must be invoked prior to initializing the AppsFlyer SDK in order to function properly. + /// + /// should Facebook's deferred app links be processed by the AppsFlyer SDK. + public void enableFacebookDeferredApplinks(bool isEnabled) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("enableFacebookDeferredApplinks", isEnabled); +#endif + } + + /// + /// Sets or updates the user consent data related to GDPR and DMA regulations for advertising and data usage purposes within the application. + /// call this method when GDPR user is true + /// + /// hasConsentForDataUsage boolean. + /// hasConsentForAdsPersonalization boolean. + public void setConsentData(AppsFlyerConsent appsFlyerConsent) + { +#if !UNITY_EDITOR + 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"; + + appsFlyerAndroid.CallStatic("setConsentData", isUserSubjectToGDPR, hasConsentForDataUsage, hasConsentForAdsPersonalization, hasConsentForAdStorage); +#endif + } + + /// + /// Logs ad revenue data along with additional parameters if provided. + /// instance of AFAdRevenueData containing ad revenue information. + /// An optional map of additional parameters to be logged with ad revenue data. This can be null if there are no additional parameters. + public void logAdRevenue(AFAdRevenueData adRevenueData, Dictionary additionalParameters) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("logAdRevenue", adRevenueData.monetizationNetwork, getMediationNetwork(adRevenueData.mediationNetwork), adRevenueData.currencyIso4217Code, adRevenueData.eventRevenue, convertDictionaryToJavaMap(additionalParameters)); +#endif + } + + /// + /// Restrict reengagement via deep-link to once per each unique deep-link. + /// Otherwise deep re-occurring deep-links will be permitted for non-singleTask Activities and deep-linking via AppsFlyer deep-links. + /// The default value is false. + /// + /// doConsume boolean. + public void setConsumeAFDeepLinks(bool doConsume) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setConsumeAFDeepLinks", doConsume); +#endif + } + + /// + /// Specify the manufacturer or media source name to which the preinstall is attributed. + /// + /// Manufacturer or media source name for preinstall attribution. + /// Campaign name for preinstall attribution. + /// Site ID for preinstall attribution. + public void setPreinstallAttribution(string mediaSource, string campaign, string siteId) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setPreinstallAttribution", mediaSource, campaign, siteId); +#endif + } + + /// + /// Boolean indicator for preinstall by Manufacturer. + /// + /// boolean isPreInstalledApp. + public bool isPreInstalledApp() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("isPreInstalledApp"); +#else + return false; +#endif + } + + /// + /// Get the Facebook attribution ID, if one exists. + /// + /// string Facebook attribution ID. + public string getAttributionId() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getAttributionId"); +#else + return ""; +#endif + } + + /// + /// Get AppsFlyer's unique device ID is created for every new install of an app. + /// + /// AppsFlyer's unique device ID. + public string getAppsFlyerId() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getAppsFlyerId"); +#else + return ""; +#endif + } + + /// + /// API for server verification of in-app purchases. + /// An af_purchase event with the relevant values will be automatically sent if the validation is successful. + /// + /// License Key obtained from the Google Play Console. + /// data.INAPP_DATA_SIGNATURE from onActivityResult(int requestCode, int resultCode, Intent data) + /// data.INAPP_PURCHASE_DATA from onActivityResult(int requestCode, int resultCode, Intent data) + /// Purchase price, should be derived from skuDetails.getStringArrayList("DETAILS_LIST") + /// Purchase currency, should be derived from skuDetails.getStringArrayList("DETAILS_LIST") + /// additionalParameters Freehand parameters to be sent with the purchase (if validated). + public void validateAndSendInAppPurchase(string publicKey, string signature, string purchaseData, string price, string currency, Dictionary additionalParameters, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("validateAndTrackInAppPurchase", publicKey, signature, purchaseData, price, currency, convertDictionaryToJavaMap(additionalParameters), gameObject ? gameObject.name : null); +#endif + } + + /// + /// API for server verification of in-app purchases. + /// An af_purchase event with the relevant values will be automatically sent if the validation is successful. + /// + /// AFPurchaseDetailsAndroid instance. + /// purchaseAdditionalDetails Freehand parameters to be sent with the purchase (if validated). + public void validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("validateAndTrackInAppPurchaseV2", (int)details.purchaseType, details.purchaseToken, details.productId, convertDictionaryToJavaMap(purchaseAdditionalDetails), gameObject ? gameObject.name : null); +#endif + } + + /// + /// Was the stopSDK(boolean) API set to true. + /// + /// boolean isSDKStopped. + public bool isSDKStopped() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("isTrackingStopped"); +#else + return false; +#endif + } + + /// + /// Set a custom value for the minimum required time between sessions. + /// By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions. + /// + /// minimum time between 2 separate sessions in seconds. + public void setMinTimeBetweenSessions(int seconds) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setMinTimeBetweenSessions", seconds); +#endif + } + + /// + /// Set a custom host. + /// + /// Host prefix. + /// Host name. + public void setHost(string hostPrefixName, string hostName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setHost", hostPrefixName, hostName); +#endif + } + + /// + /// Get the host name. + /// Default value is "appsflyer.com". + /// + /// Host name. + public string getHostName() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getHostName"); +#else + return ""; +#endif + } + + /// + /// Get the custom host prefix. + /// + /// Host prefix. + public string getHostPrefix() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getHostPrefix"); +#else + return ""; +#endif + } + + /// + /// Used by advertisers to exclude all networks/integrated partners from getting data. + /// + public void setSharingFilterForAllPartners() + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("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 void setSharingFilter(params string[] partners) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setSharingFilter", (object)partners); +#endif + } + + /// + /// Lets you configure how which partners should the SDK exclude from data-sharing. + /// + /// partners to exclude from getting data + public static void setSharingFilterForPartners(params string[] partners) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setSharingFilterForPartners", (object)partners); +#endif + } + + /// + /// Register a Conversion Data Listener. + /// 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 void getConversionData(string objectName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("getConversionData", objectName); +#endif + } + + /// + /// Register a validation listener for the validateAndSendInAppPurchase API. + /// + public void initInAppPurchaseValidatorListener(MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("initInAppPurchaseValidatorListener", gameObject ? gameObject.name : null); +#endif + } + + /// + /// setCollectOaid + /// You must include the appsflyer oaid library for this api to work. + /// + /// isCollect oaid - set fasle to opt out + public void setCollectOaid(bool isCollect) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCollectOaid", isCollect); +#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 void attributeAndOpenStore(string promoted_app_id, string campaign, Dictionary userParams, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("attributeAndOpenStore", promoted_app_id, campaign, convertDictionaryToJavaMap(userParams)); +#endif + } + + /// + /// To attribute 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 void recordCrossPromoteImpression(string appID, string campaign, Dictionary parameters) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("recordCrossPromoteImpression", appID, campaign, convertDictionaryToJavaMap(parameters)); +#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 void generateUserInviteLink(Dictionary parameters, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("createOneLinkInviteListener", convertDictionaryToJavaMap(parameters), gameObject ? gameObject.name : null); +#endif + } + + /// + /// To measure push notifications as part of a retargeting campaign. + /// + public void handlePushNotifications(){ +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("handlePushNotifications"); +#endif + } + + /// + /// 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. + /// + /// array of nested json path + public void addPushNotificationDeepLinkPath(params string[] paths) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("addPushNotificationDeepLinkPath", (object)paths); +#endif + } + + /// + /// subscribe to unified deep link callbacks + /// + public void subscribeForDeepLink(string objectName){ +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("subscribeForDeepLink", objectName); +#endif + } + + /// + /// Disables collection of various Advertising IDs by the SDK. This includes Google Advertising ID (GAID), OAID and Amazon Advertising ID (AAID) + /// + /// disable boolean. + public void setDisableAdvertisingIdentifiers(bool disable) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setDisableAdvertisingIdentifiers", disable); +#endif + } + + /// + /// Allows sending custom data for partner integration purposes. + /// + public void setPartnerData(string partnerId, Dictionary partnerInfo) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setPartnerData", partnerId, convertDictionaryToJavaMap(partnerInfo)); +#endif + } + + /// + /// Use to opt-out of collecting the network operator name (carrier) and sim operator name from the device. + /// + public void setDisableNetworkData(bool disable) { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setDisableNetworkData", disable); +#endif + } + + /// + /// Internal Helper Method. + /// + private static AndroidJavaObject getEmailType(EmailCryptType cryptType) + { + AndroidJavaClass emailsCryptTypeEnum = new AndroidJavaClass("com.appsflyer.AppsFlyerProperties$EmailsCryptType"); + AndroidJavaObject emailsCryptType; + + switch (cryptType) + { + case EmailCryptType.EmailCryptTypeSHA256: + emailsCryptType = emailsCryptTypeEnum.GetStatic("SHA256"); + break; + default: + emailsCryptType = emailsCryptTypeEnum.GetStatic("NONE"); + break; + } + + return emailsCryptType; + } + + /// + /// Internal Helper Method. + /// + private static AndroidJavaObject getMediationNetwork(MediationNetwork mediationNetwork) + { + AndroidJavaClass mediationNetworkEnumClass = new AndroidJavaClass("com.appsflyer.MediationNetwork"); + AndroidJavaObject mediationNetworkObject; + + switch (mediationNetwork) + { + case MediationNetwork.IronSource: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("IRONSOURCE"); + break; + case MediationNetwork.ApplovinMax: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("APPLOVIN_MAX"); + break; + case MediationNetwork.GoogleAdMob: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("GOOGLE_ADMOB"); + break; + case MediationNetwork.Fyber: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("FYBER"); + break; + case MediationNetwork.Appodeal: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("APPODEAL"); + break; + case MediationNetwork.Admost: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("ADMOST"); + break; + case MediationNetwork.Topon: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("TOPON"); + break; + case MediationNetwork.Tradplus: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("TRADPLUS"); + break; + case MediationNetwork.Yandex: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("YANDEX"); + break; + case MediationNetwork.ChartBoost: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("CHARTBOOST"); + break; + case MediationNetwork.Unity: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("UNITY"); + break; + case MediationNetwork.ToponPte: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("TOPON_PTE"); + break; + case MediationNetwork.Custom: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("CUSTOM_MEDIATION"); + break; + case MediationNetwork.DirectMonetization: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("DIRECT_MONETIZATION_NETWORK"); + break; + default: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("NONE"); + break; + } + return mediationNetworkObject; + } + + /// + /// Internal Helper Method. + /// + private static AndroidJavaObject convertDictionaryToJavaMap(Dictionary dictionary) + { + AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap"); + IntPtr putMethod = AndroidJNIHelper.GetMethodID(map.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jvalue[] val; + if (dictionary != null) + { + foreach (var entry in dictionary) + { + val = AndroidJNIHelper.CreateJNIArgArray(new object[] { entry.Key, entry.Value }); + AndroidJNI.CallObjectMethod(map.GetRawObject(), putMethod,val); + AndroidJNI.DeleteLocalRef(val[0].l); + AndroidJNI.DeleteLocalRef(val[1].l); + } + } + + return map; + } + } +#endif + +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerAndroid.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerAndroid.cs.meta new file mode 100644 index 0000000..d7ce722 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerAndroid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 172d18dd98e7e4ed3b30110568b0fae4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerConsent.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerConsent.cs new file mode 100644 index 0000000..feb448d --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerConsent.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + /// + // Data class representing a user's consent for data processing in accordance with GDPR and DMA + // (Digital Markets Act) compliance, specifically regarding advertising preferences. + + // This class should be used to notify and record the user's applicability + // under GDPR, their general consent to data usage, and their consent to personalized + // advertisements based on user data. + + /// ## Properties: + /// - `isUserSubjectToGDPR` (optional) - Indicates whether GDPR regulations apply to the user. + /// This may also serve as a general compliance flag for other regional regulations. + /// - `hasConsentForDataUsage` (optional) - Indicates whether the user consents to the processing + /// of their data for advertising purposes. + /// - `hasConsentForAdsPersonalization` (optional) - Indicates whether the user consents to the + /// use of their data for personalized advertising. + /// - `hasConsentForAdStorage` (optional) - Indicates whether the user consents to ad-related storage access. + /// + /// **Usage Example:** + /// ```csharp + /// var consent = new AppsFlyerConsent( + /// isUserSubjectToGDPR: true, + /// hasConsentForDataUsage: true, + /// hasConsentForAdsPersonalization: false, + /// hasConsentForAdStorage: true + /// ); + /// **Deprecated APIs:** + /// - `ForGDPRUser(...)` and `ForNonGDPRUser(...)` should no longer be used. + /// - Use `new AppsFlyerConsent(...)` instead with relevant consent fields. + /// + /// + public class AppsFlyerConsent + { + public bool? isUserSubjectToGDPR { get; private set; } + public bool? hasConsentForDataUsage { get; private set; } + public bool? hasConsentForAdsPersonalization { get; private set; } + public bool? hasConsentForAdStorage { get; private set; } + + public AppsFlyerConsent( bool? isUserSubjectToGDPR = null, bool? hasConsentForDataUsage = null, bool? hasConsentForAdsPersonalization = null, bool? hasConsentForAdStorage = null) + { + this.isUserSubjectToGDPR = isUserSubjectToGDPR; + this.hasConsentForDataUsage = hasConsentForDataUsage; + this.hasConsentForAdsPersonalization = hasConsentForAdsPersonalization; + this.hasConsentForAdStorage = hasConsentForAdStorage; + } + + [Obsolete("Use the new constructor with optional booleans instead.")] + private AppsFlyerConsent(bool isGDPR, bool hasForDataUsage, bool hasForAdsPersonalization) + { + isUserSubjectToGDPR = isGDPR; + hasConsentForDataUsage = hasForDataUsage; + hasConsentForAdsPersonalization = hasForAdsPersonalization; + } + + [Obsolete("Use new AppsFlyerConsent(...) instead.")] + public static AppsFlyerConsent ForGDPRUser(bool hasConsentForDataUsage, bool hasConsentForAdsPersonalization) + { + return new AppsFlyerConsent(true, hasConsentForDataUsage, hasConsentForAdsPersonalization); + } + + [Obsolete("Use new AppsFlyerConsent(...) instead.")] + public static AppsFlyerConsent ForNonGDPRUser() + { + return new AppsFlyerConsent(false); + } + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerConsent.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerConsent.cs.meta new file mode 100644 index 0000000..5a881de --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerConsent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a97c986fe4ee0461badf7042e08db3f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerEventArgs.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerEventArgs.cs new file mode 100644 index 0000000..511db67 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerEventArgs.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + + /// + /// Event args for AppsFlyer requests. + /// Used for sessions and in-app events. + /// Used to handle post request logic. + /// + /// Examples: + /// statusCode / errorDescription + /// + /// 200 - null + /// + /// 10 - "Event timeout. Check 'minTimeBetweenSessions' param" + /// 11 - "Skipping event because 'isStopTracking' enabled" + /// 40 - Network error: Error description comes from Android + /// 41 - "No dev key" + /// 50 - "Status code failure" + actual response code from the server + /// + /// + public class AppsFlyerRequestEventArgs : EventArgs + { + public AppsFlyerRequestEventArgs(int code, string description) + { + statusCode = code; + errorDescription = description; + } + + public int statusCode { get; } + public string errorDescription { get; } + } + + /// + /// Event args for OnDeepLinkReceived. + /// Used to handle deep linking results. + /// + public class DeepLinkEventsArgs : EventArgs + { + + /// + /// DeepLink dictionary to get additional parameters + /// + public Dictionary deepLink; + + /// + /// DeepLink status: FOUND, NOT_FOUND, ERROR + /// + public DeepLinkStatus status { get; } + + /// + /// DeepLink error: TIMEOUT, NETWORK, HTTP_STATUS_CODE, UNEXPECTED + /// + public DeepLinkError error { get; } + + public string getMatchType() + { + return getDeepLinkParameter("match_type"); + } + + public string getDeepLinkValue() + { + return getDeepLinkParameter("deep_link_value"); + } + + public string getClickHttpReferrer() + { + return getDeepLinkParameter("click_http_referrer"); + } + + public string getMediaSource() + { + return getDeepLinkParameter("media_source"); + } + + public string getCampaign() + { + return getDeepLinkParameter("campaign"); + } + + public string getCampaignId() + { + return getDeepLinkParameter("campaign_id"); + } + + public string getAfSub1() + { + return getDeepLinkParameter("af_sub1"); + } + + public string getAfSub2() + { + return getDeepLinkParameter("af_sub2"); + } + + public string getAfSub3() + { + return getDeepLinkParameter("af_sub3"); + } + + public string getAfSub4() + { + return getDeepLinkParameter("af_sub4"); + } + + public string getAfSub5() + { + return getDeepLinkParameter("af_sub5"); + } + + public bool isDeferred() + { + if (deepLink != null && deepLink.ContainsKey("is_deferred")) + { + try + { + return (bool)deepLink["is_deferred"]; + } + catch (Exception e) + { + AppsFlyer.AFLog("DeepLinkEventsArgs.isDeferred", String.Format("{0} Exception caught.", e)); + } + } + return false; + } + + public Dictionary getDeepLinkDictionary() + { + return deepLink; + } + + public DeepLinkEventsArgs(string str) + { + try + { + Dictionary dictionary = AppsFlyer.CallbackStringToDictionary(str); + + string status = ""; + string error = ""; + + + if (dictionary.ContainsKey("status") && dictionary["status"] != null) + { + status = dictionary["status"].ToString(); + } + + if (dictionary.ContainsKey("error") && dictionary["error"] != null) + { + error = dictionary["error"].ToString(); + } + + if (dictionary.ContainsKey("deepLink") && dictionary["deepLink"] != null) + { + this.deepLink = AppsFlyer.CallbackStringToDictionary(dictionary["deepLink"].ToString()); + } + if (dictionary.ContainsKey("is_deferred")) + { + this.deepLink["is_deferred"] = dictionary["is_deferred"]; + } + + switch (status) + { + case "FOUND": + this.status = DeepLinkStatus.FOUND; + break; + case "NOT_FOUND": + this.status = DeepLinkStatus.NOT_FOUND; + break; + default: + this.status = DeepLinkStatus.ERROR; + break; + } + + switch (error) + { + case "TIMEOUT": + this.error = DeepLinkError.TIMEOUT; + break; + case "NETWORK": + this.error = DeepLinkError.NETWORK; + break; + case "HTTP_STATUS_CODE": + this.error = DeepLinkError.HTTP_STATUS_CODE; + break; + default: + this.error = DeepLinkError.UNEXPECTED; + break; + } + + } + catch (Exception e) + { + AppsFlyer.AFLog("DeepLinkEventsArgs.parseDeepLink", String.Format("{0} Exception caught.", e)); + } + } + + private string getDeepLinkParameter(string name) + { + if (deepLink != null && deepLink.ContainsKey(name) && deepLink[name] != null) + { + return deepLink[name].ToString(); + } + + return null; + } + + } + + public enum DeepLinkStatus { + FOUND, NOT_FOUND, ERROR + } + + public enum DeepLinkError { + TIMEOUT, NETWORK, HTTP_STATUS_CODE, UNEXPECTED + } +} diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerEventArgs.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerEventArgs.cs.meta new file mode 100644 index 0000000..056bce2 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0fc241ad5a9b43a7b461a6147dbc74c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObject.prefab b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObject.prefab new file mode 100644 index 0000000..f3bbb45 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObject.prefab @@ -0,0 +1,49 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7315102894599890749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6207133488976360133} + - component: {fileID: 4405976200006927252} + m_Layer: 0 + m_Name: AppsFlyerObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6207133488976360133 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7315102894599890749} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4405976200006927252 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7315102894599890749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2ec6ba1ee8b48749524f015ed572a6, type: 3} + m_Name: + m_EditorClassIdentifier: + devKey: + appID: + isDebug: 0 + getConversionData: 0 diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObject.prefab.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObject.prefab.meta new file mode 100644 index 0000000..1acd1cf --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObject.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0bfe3b149145747cc92dc53bb4df4e9b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObjectScript.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObjectScript.cs new file mode 100644 index 0000000..266a848 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObjectScript.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using AppsFlyerSDK; + +// This class is intended to be used the the AppsFlyerObject.prefab + +public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData +{ + + // These fields are set from the editor so do not modify! + //******************************// + public string devKey; + public string appID; + public string UWPAppID; + public string macOSAppID; + public bool isDebug; + public bool getConversionData; + //******************************// + + + void Start() + { + // These fields are set from the editor so do not modify! + //******************************// + AppsFlyer.setIsDebug(isDebug); +#if UNITY_WSA_10_0 && !UNITY_EDITOR + AppsFlyer.initSDK(devKey, UWPAppID, getConversionData ? this : null); +#elif UNITY_STANDALONE_OSX && !UNITY_EDITOR + AppsFlyer.initSDK(devKey, macOSAppID, getConversionData ? this : null); +#else + AppsFlyer.initSDK(devKey, appID, getConversionData ? this : null); +#endif + //******************************/ + + AppsFlyer.startSDK(); + } + + + void Update() + { + + } + + // Mark AppsFlyer CallBacks + public void onConversionDataSuccess(string conversionData) + { + AppsFlyer.AFLog("didReceiveConversionData", conversionData); + Dictionary conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData); + // add deferred deeplink logic here + } + + public void onConversionDataFail(string error) + { + AppsFlyer.AFLog("didReceiveConversionDataWithError", error); + } + + public void onAppOpenAttribution(string attributionData) + { + AppsFlyer.AFLog("onAppOpenAttribution", attributionData); + Dictionary attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData); + // add direct deeplink logic here + } + + public void onAppOpenAttributionFailure(string error) + { + AppsFlyer.AFLog("onAppOpenAttributionFailure", error); + } + +} diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObjectScript.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObjectScript.cs.meta new file mode 100644 index 0000000..65ccedc --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerObjectScript.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a2ec6ba1ee8b48749524f015ed572a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerPurchaseConnector.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerPurchaseConnector.cs new file mode 100644 index 0000000..ee43009 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerPurchaseConnector.cs @@ -0,0 +1,426 @@ +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; +using System; + +namespace AppsFlyerSDK +{ + + public interface IAppsFlyerPurchaseRevenueDataSource + { + Dictionary PurchaseRevenueAdditionalParametersForProducts(HashSet products, HashSet transactions); + } + + public interface IAppsFlyerPurchaseRevenueDataSourceStoreKit2 + { + Dictionary PurchaseRevenueAdditionalParametersStoreKit2ForProducts(HashSet products, HashSet transactions); + } + + public class AppsFlyerPurchaseRevenueBridge : MonoBehaviour + { + #if UNITY_IOS && !UNITY_EDITOR +[DllImport("__Internal")] +private static extern void RegisterUnityPurchaseRevenueParamsCallback(Func callback); + +[DllImport("__Internal")] +private static extern void RegisterUnityPurchaseRevenueParamsCallbackSK2(Func callback); +#endif + + private static IAppsFlyerPurchaseRevenueDataSource _dataSource; + private static IAppsFlyerPurchaseRevenueDataSourceStoreKit2 _dataSourceSK2; + + public static void RegisterDataSource(IAppsFlyerPurchaseRevenueDataSource dataSource) + { + _dataSource = dataSource; + #if UNITY_IOS && !UNITY_EDITOR + RegisterUnityPurchaseRevenueParamsCallback(GetAdditionalParameters); + #elif UNITY_ANDROID && !UNITY_EDITOR + using (AndroidJavaClass jc = new AndroidJavaClass("com.appsflyer.unity.PurchaseRevenueBridge")) + { + jc.CallStatic("setUnityBridge", new UnityPurchaseRevenueBridgeProxy()); + } + #endif + } + + public static void RegisterDataSourceStoreKit2(IAppsFlyerPurchaseRevenueDataSourceStoreKit2 dataSource) + { + #if UNITY_IOS && !UNITY_EDITOR + _dataSourceSK2 = dataSource; + RegisterUnityPurchaseRevenueParamsCallbackSK2(GetAdditionalParametersSK2); + #endif + } + + public static Dictionary GetAdditionalParametersForAndroid(HashSet products, HashSet transactions) + { + return _dataSource?.PurchaseRevenueAdditionalParametersForProducts(products, transactions) + ?? new Dictionary(); + } + + #if UNITY_IOS && !UNITY_EDITOR + [AOT.MonoPInvokeCallback(typeof(Func))] + public static string GetAdditionalParameters(string productsJson, string transactionsJson) + { + try + { + HashSet products = new HashSet(); + HashSet transactions = new HashSet(); + + if (!string.IsNullOrEmpty(productsJson)) + { + var dict = AFMiniJSON.Json.Deserialize(productsJson) as Dictionary; + if (dict != null) + { + if (dict.TryGetValue("products", out var productsObj) && productsObj is List productList) + products = new HashSet(productList); + + if (dict.TryGetValue("transactions", out var transactionsObj) && transactionsObj is List transactionList) + transactions = new HashSet(transactionList); + } + } + + var parameters = _dataSource?.PurchaseRevenueAdditionalParametersForProducts(products, transactions) + ?? new Dictionary(); + return AFMiniJSON.Json.Serialize(parameters); + } + catch (Exception e) + { + Debug.LogError($"[AppsFlyer] Exception in GetAdditionalParameters: {e}"); + return "{}"; + } + } + #endif + + #if UNITY_IOS && !UNITY_EDITOR + [AOT.MonoPInvokeCallback(typeof(Func))] + public static string GetAdditionalParametersSK2(string productsJson, string transactionsJson) + { + try + { + HashSet products = new HashSet(); + HashSet transactions = new HashSet(); + + if (!string.IsNullOrEmpty(productsJson)) + { + var dict = AFMiniJSON.Json.Deserialize(productsJson) as Dictionary; + if (dict != null && dict.TryGetValue("products", out var productsObj) && productsObj is List productList) + products = new HashSet(productList); + } + if (!string.IsNullOrEmpty(transactionsJson)) + { + var dict = AFMiniJSON.Json.Deserialize(transactionsJson) as Dictionary; + if (dict != null && dict.TryGetValue("transactions", out var transactionsObj) && transactionsObj is List transactionList) + transactions = new HashSet(transactionList); + } + + var parameters = _dataSourceSK2?.PurchaseRevenueAdditionalParametersStoreKit2ForProducts(products, transactions) + ?? new Dictionary(); + return AFMiniJSON.Json.Serialize(parameters); + } + catch (Exception e) + { + Debug.LogError($"[AppsFlyer] Exception in GetAdditionalParametersSK2: {e}"); + return "{}"; + } + } + #endif + } + + public class UnityPurchaseRevenueBridgeProxy : AndroidJavaProxy + { + public UnityPurchaseRevenueBridgeProxy() : base("com.appsflyer.unity.PurchaseRevenueBridge$UnityPurchaseRevenueBridge") { } + + public string getAdditionalParameters(string productsJson, string transactionsJson) + { + try + { + // Create empty sets if JSON is null or empty + HashSet products = new HashSet(); + HashSet transactions = new HashSet(); + + // Only try to parse if we have valid JSON + if (!string.IsNullOrEmpty(productsJson)) + { + try + { + // First try to parse as a simple array + var parsedProducts = AFMiniJSON.Json.Deserialize(productsJson); + if (parsedProducts is List productList) + { + products = new HashSet(productList); + } + else if (parsedProducts is Dictionary dict) + { + if (dict.ContainsKey("events") && dict["events"] is List eventsList) + { + products = new HashSet(eventsList); + } + else + { + // If it's a dictionary but doesn't have events, add the whole dict + products.Add(dict); + } + } + } + catch (Exception e) + { + Debug.LogError($"Error parsing products JSON: {e.Message}\nJSON: {productsJson}"); + } + } + + if (!string.IsNullOrEmpty(transactionsJson)) + { + try + { + // First try to parse as a simple array + var parsedTransactions = AFMiniJSON.Json.Deserialize(transactionsJson); + if (parsedTransactions is List transactionList) + { + transactions = new HashSet(transactionList); + } + else if (parsedTransactions is Dictionary dict) + { + if (dict.ContainsKey("events") && dict["events"] is List eventsList) + { + transactions = new HashSet(eventsList); + } + else + { + // If it's a dictionary but doesn't have events, add the whole dict + transactions.Add(dict); + } + } + } + catch (Exception e) + { + Debug.LogError($"Error parsing transactions JSON: {e.Message}\nJSON: {transactionsJson}"); + } + } + + var parameters = AppsFlyerPurchaseRevenueBridge.GetAdditionalParametersForAndroid(products, transactions); + return AFMiniJSON.Json.Serialize(parameters); + } + catch (Exception e) + { + Debug.LogError($"Error in getAdditionalParameters: {e.Message}\nProducts JSON: {productsJson}\nTransactions JSON: {transactionsJson}"); + return "{}"; + } + } + } + + + public class AppsFlyerPurchaseConnector : MonoBehaviour { + + private static AppsFlyerPurchaseConnector instance; + private Dictionary pendingParameters; + private Action> pendingCallback; + + public static AppsFlyerPurchaseConnector Instance + { + get + { + if (instance == null) + { + GameObject go = new GameObject("AppsFlyerPurchaseConnector"); + instance = go.AddComponent(); + DontDestroyOnLoad(go); + } + return instance; + } + } + + private void Awake() + { + if (instance == null) + { + instance = this; + DontDestroyOnLoad(gameObject); + } + else + { + Destroy(gameObject); + } + } + +#if UNITY_ANDROID && !UNITY_EDITOR + private static AndroidJavaClass appsFlyerAndroidConnector = new AndroidJavaClass("com.appsflyer.unity.AppsFlyerAndroidWrapper"); +#endif + + public static void init(MonoBehaviour unityObject, Store s) { +#if UNITY_IOS && !UNITY_EDITOR + _initPurchaseConnector(unityObject.name); +#elif UNITY_ANDROID && !UNITY_EDITOR + int store = mapStoreToInt(s); + appsFlyerAndroidConnector.CallStatic("initPurchaseConnector", unityObject ? unityObject.name : null, store); +#endif + } + + public static void build() { +#if UNITY_IOS && !UNITY_EDITOR + //not for iOS +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("build"); + +#else +#endif + } + + public static void startObservingTransactions() { +#if UNITY_IOS && !UNITY_EDITOR + _startObservingTransactions(); +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("startObservingTransactions"); +#else +#endif + } + + public static void stopObservingTransactions() { +#if UNITY_IOS && !UNITY_EDITOR + _stopObservingTransactions(); +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("stopObservingTransactions"); +#else +#endif + } + + public static void setIsSandbox(bool isSandbox) { +#if UNITY_IOS && !UNITY_EDITOR + _setIsSandbox(isSandbox); +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("setIsSandbox", isSandbox); +#else +#endif + } + + public static void setPurchaseRevenueValidationListeners(bool enableCallbacks) { +#if UNITY_IOS && !UNITY_EDITOR + _setPurchaseRevenueDelegate(); +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("setPurchaseRevenueValidationListeners", enableCallbacks); +#else +#endif + } + + public static void setAutoLogPurchaseRevenue(params AppsFlyerAutoLogPurchaseRevenueOptions[] autoLogPurchaseRevenueOptions) { +#if UNITY_IOS && !UNITY_EDITOR + int option = 0; + foreach (AppsFlyerAutoLogPurchaseRevenueOptions op in autoLogPurchaseRevenueOptions) { + option = option | (int)op; + } + _setAutoLogPurchaseRevenue(option); +#elif UNITY_ANDROID && !UNITY_EDITOR + if (autoLogPurchaseRevenueOptions.Length == 0) { + return; + } + foreach (AppsFlyerAutoLogPurchaseRevenueOptions op in autoLogPurchaseRevenueOptions) { + switch(op) { + case AppsFlyerAutoLogPurchaseRevenueOptions.AppsFlyerAutoLogPurchaseRevenueOptionsDisabled: + break; + case AppsFlyerAutoLogPurchaseRevenueOptions.AppsFlyerAutoLogPurchaseRevenueOptionsAutoRenewableSubscriptions: + appsFlyerAndroidConnector.CallStatic("setAutoLogSubscriptions", true); + break; + case AppsFlyerAutoLogPurchaseRevenueOptions.AppsFlyerAutoLogPurchaseRevenueOptionsInAppPurchases: + appsFlyerAndroidConnector.CallStatic("setAutoLogInApps", true); + break; + default: + break; + } + } +#else +#endif + } + + public static void setPurchaseRevenueDataSource(IAppsFlyerPurchaseRevenueDataSource dataSource) + { +#if UNITY_IOS && !UNITY_EDITOR + + if (dataSource != null) + { + _setPurchaseRevenueDataSource(dataSource.GetType().Name); + AppsFlyerPurchaseRevenueBridge.RegisterDataSource(dataSource); + } +#elif UNITY_ANDROID && !UNITY_EDITOR + if (dataSource != null) + { + AppsFlyerPurchaseRevenueBridge.RegisterDataSource(dataSource); + } +#endif + } + + + public static void setPurchaseRevenueDataSourceStoreKit2(IAppsFlyerPurchaseRevenueDataSourceStoreKit2 dataSourceSK2) + { +#if UNITY_IOS && !UNITY_EDITOR + if (dataSourceSK2 != null) + { + AppsFlyerPurchaseRevenueBridge.RegisterDataSourceStoreKit2(dataSourceSK2); + _setPurchaseRevenueDataSource("AppsFlyerObjectScript_StoreKit2"); + } +#endif + } + + + private static int mapStoreToInt(Store s) { + switch(s) { + case(Store.GOOGLE): + return 0; + default: + return -1; + } + } + + public static void setStoreKitVersion(StoreKitVersion storeKitVersion) { +#if UNITY_IOS && !UNITY_EDITOR + _setStoreKitVersion((int)storeKitVersion); +#elif UNITY_ANDROID && !UNITY_EDITOR + // Android doesn't use StoreKit +#else +#endif + } + + public static void logConsumableTransaction(string transactionJson) { +#if UNITY_IOS && !UNITY_EDITOR + _logConsumableTransaction(transactionJson); +#elif UNITY_ANDROID && !UNITY_EDITOR + // Android doesn't use StoreKit +#else +#endif + } + +#if UNITY_IOS && !UNITY_EDITOR + + [DllImport("__Internal")] + private static extern void _startObservingTransactions(); + [DllImport("__Internal")] + private static extern void _stopObservingTransactions(); + [DllImport("__Internal")] + private static extern void _setIsSandbox(bool isSandbox); + [DllImport("__Internal")] + private static extern void _setPurchaseRevenueDelegate(); + [DllImport("__Internal")] + private static extern void _setPurchaseRevenueDataSource(string dataSourceName); + [DllImport("__Internal")] + private static extern void _setAutoLogPurchaseRevenue(int option); + [DllImport("__Internal")] + private static extern void _initPurchaseConnector(string objectName); + [DllImport("__Internal")] + private static extern void _setStoreKitVersion(int storeKitVersion); + [DllImport("__Internal")] + private static extern void _logConsumableTransaction(string transactionJson); + +#endif + } + public enum Store { + GOOGLE = 0 + } + public enum AppsFlyerAutoLogPurchaseRevenueOptions + { + AppsFlyerAutoLogPurchaseRevenueOptionsDisabled = 0, + AppsFlyerAutoLogPurchaseRevenueOptionsAutoRenewableSubscriptions = 1 << 0, + AppsFlyerAutoLogPurchaseRevenueOptionsInAppPurchases = 1 << 1 + } + + public enum StoreKitVersion { + SK1 = 0, + SK2 = 1 + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerPurchaseConnector.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerPurchaseConnector.cs.meta new file mode 100644 index 0000000..dd85a75 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyerPurchaseConnector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0636ea07d370d437183f3762280c08ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyeriOS.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyeriOS.cs new file mode 100644 index 0000000..a9fd93b --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyeriOS.cs @@ -0,0 +1,1021 @@ +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 + } + } + + + + /// + /// Start Session. + /// This will record a session and then record all background forground sessions during the lifecycle of the app. + /// +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 + } + + /// + /// 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 void sendEvent(string eventName, Dictionary eventValues) + { + sendEvent(eventName, eventValues, false, AppsFlyer.CallBackObjectName); + } + + public void sendEvent(string eventName, Dictionary eventValues, bool shouldCallback, string callBackObjectName) + { +#if !UNITY_EDITOR + _afSendEvent(eventName, AFMiniJSON.Json.Serialize(eventValues), shouldCallback, callBackObjectName); +#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 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 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 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 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 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 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 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 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. + [System.Obsolete("This is deprecated")] + public 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 void setAppInviteOneLinkID(string appInviteOneLinkID) + { +#if !UNITY_EDITOR + _setAppInviteOneLinkID(appInviteOneLinkID); +#endif + } + + /// + /// Set the deepLink timeout value that should be used for DDL. + /// + /// deepLink timeout in milliseconds. + public void setDeepLinkTimeout(long deepLinkTimeout) + { +#if !UNITY_EDITOR + _setDeepLinkTimeout(deepLinkTimeout); +#endif + } + + /// + /// 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. + /// + /// should start TCF Data collection boolean. + public void enableTCFDataCollection(bool shouldCollectTcfData) + { +#if !UNITY_EDITOR + _enableTCFDataCollection(shouldCollectTcfData); +#endif + } + + /// + /// Sets or updates the user consent data related to GDPR and DMA regulations for advertising and data usage purposes within the application. + /// + /// instance of AppsFlyerConsent. + public void setConsentData(AppsFlyerConsent appsFlyerConsent) + { +#if !UNITY_EDITOR + 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); +#endif + } + + /// + /// Logs ad revenue data along with additional parameters if provided. + /// + /// instance of AFAdRevenueData containing ad revenue information. + /// An optional map of additional parameters to be logged with ad revenue data. This can be null if there are no additional parameters. + public void logAdRevenue(AFAdRevenueData adRevenueData, Dictionary additionalParameters) + { +#if !UNITY_EDITOR + _logAdRevenue(adRevenueData.monetizationNetwork, adRevenueData.mediationNetwork, adRevenueData.currencyIso4217Code, adRevenueData.eventRevenue, AFMiniJSON.Json.Serialize(additionalParameters)); +#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 void anonymizeUser(bool shouldAnonymizeUser) + { +#if !UNITY_EDITOR + _anonymizeUser(shouldAnonymizeUser); +#endif + } + + /// + /// Opt-out for Apple Search Ads attributions. + /// + /// boolean disableCollectIAd. + public 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 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 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 void setResolveDeepLinkURLs(params string[] resolveDeepLinkURLs) + { +#if !UNITY_EDITOR + _setResolveDeepLinkURLs(resolveDeepLinkURLs.Length,resolveDeepLinkURLs); +#endif + } + + /// + /// For advertisers who use vanity OneLinks. + /// + /// Array of domains. + public void setOneLinkCustomDomain(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 void setUserEmails(EmailCryptType cryptType, params string[] userEmails) + { +#if !UNITY_EDITOR + _setUserEmails(cryptType, userEmails.Length, userEmails); +#endif + } + + /// + /// Set the user phone number. + /// + /// User phoneNumber. + public 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 - please use v2. + /// + /// 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 void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string transactionId, Dictionary additionalParameters, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + _validateAndSendInAppPurchase(productIdentifier, price, currency, transactionId, AFMiniJSON.Json.Serialize(additionalParameters), gameObject ? gameObject.name : null); +#endif + } + + /// + /// V2 + /// To send and validate in app purchases you can call this method from the processPurchase method. + /// + /// The AFSDKPurchaseDetailsIOS instance. + /// The additional params, which you want to receive it in the raw reports. + public void validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + _validateAndSendInAppPurchaseV2(details.productId, details.transactionId, (int)details.purchaseType, AFMiniJSON.Json.Serialize(purchaseAdditionalDetails), gameObject ? gameObject.name : null); +#endif + } + + /// + /// To record location for geo-fencing. Does the same as code below. + /// + /// The location longitude. + /// The location latitude. + public 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 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 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 void handlePushNotification(Dictionary pushPayload) + { +#if !UNITY_EDITOR + _handlePushNotification(AFMiniJSON.Json.Serialize(pushPayload)); +#endif + } + + /// + /// Get SDK version. + /// + public 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 void setHost(string hostPrefix, string host) + { +#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 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 void stopSDK(bool isSDKStopped) + { +#if !UNITY_EDITOR + _stopSDK(isSDKStopped); +#endif + } + + // + /// Was the stopSDK(boolean) API set to true. + /// + /// boolean isSDKStopped. + public 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 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 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 void setSharingFilter(params string[] partners) + { +#if !UNITY_EDITOR + _setSharingFilter(partners.Length, partners); +#endif + } + + + /// + /// Lets you configure how which partners should the SDK exclude from data-sharing. + /// partners to exclude from getting data + public static void setSharingFilterForPartners(params string[] partners) + { +#if !UNITY_EDITOR + _setSharingFilterForPartners(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 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 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 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 void recordInvite(string channel, Dictionary parameters) + { +#if !UNITY_EDITOR + _recordInvite(channel, AFMiniJSON.Json.Serialize(parameters)); +#endif + } + + /// + /// Waits for request user authorization to access app-related data + /// + /// time to wait until session starts + public void waitForATTUserAuthorizationWithTimeoutInterval(int timeoutInterval) + { +#if !UNITY_EDITOR + _waitForATTUserAuthorizationWithTimeoutInterval(timeoutInterval); +#endif + } + + /// + /// + /// bool should diable + public void disableSKAdNetwork(bool isDisabled) + { +#if !UNITY_EDITOR + _disableSKAdNetwork(isDisabled); +#endif + } + + /// + /// 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. + /// + /// array of nested json path + public void addPushNotificationDeepLinkPath(params string[] paths) + { +#if !UNITY_EDITOR + _addPushNotificationDeepLinkPath(paths.Length, paths); +#endif + } + + /// + /// subscribe to unified deep link callbacks + /// + public void subscribeForDeepLink(string objectName){ +#if !UNITY_EDITOR + _subscribeForDeepLink(objectName); +#endif + } + + /// + /// Set the language of the device. + /// + public void setCurrentDeviceLanguage(string language){ +#if !UNITY_EDITOR + _setCurrentDeviceLanguage(language); +#endif + } + + /// + /// Allows sending custom data for partner integration purposes. + /// + public void setPartnerData(string partnerId, Dictionary partnerInfo){ +#if !UNITY_EDITOR + _setPartnerData(partnerId, AFMiniJSON.Json.Serialize(partnerInfo)); +#endif + } + + /// + /// Use to disable app vendor identifier (IDFV) collection, 'true' to disable. + /// + 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 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 + private static extern void _setConsentData(string isUserSubjectToGDPR, string hasConsentForDataUsage, string hasConsentForAdsPersonalization, string hasConsentForAdStorage); + +#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 transactionId, int purchaseType, string purchaseAdditionalDetails, 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 + + +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyeriOS.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyeriOS.cs.meta new file mode 100644 index 0000000..36b719f --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/AppsFlyeriOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b34371b3cc09641ebb007ffc4e9500f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerAndroidBridge.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerAndroidBridge.cs new file mode 100644 index 0000000..3a83bc3 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerAndroidBridge.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AppsFlyerSDK +{ + + public interface IAppsFlyerAndroidBridge : IAppsFlyerNativeBridge + { + void updateServerUninstallToken(string token); + void setImeiData(string imei); + void setAndroidIdData(string androidId); + void waitForCustomerUserId(bool wait); + void setCustomerIdAndStartSDK(string id); + string getOutOfStore(); + void setOutOfStore(string sourceName); + void setCollectAndroidID(bool isCollect); + void setCollectIMEI(bool isCollect); + void setIsUpdate(bool isUpdate); + void setPreinstallAttribution(string mediaSource, string campaign, string siteId); + bool isPreInstalledApp(); + string getAttributionId(); + void handlePushNotifications(); + void validateAndSendInAppPurchase(string publicKey, string signature, string purchaseData, string price, string currency, Dictionary additionalParameters, MonoBehaviour gameObject); + void validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject); + void setCollectOaid(bool isCollect); + void setDisableAdvertisingIdentifiers(bool disable); + void setDisableNetworkData(bool disable); + + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerAndroidBridge.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerAndroidBridge.cs.meta new file mode 100644 index 0000000..8157bc6 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerAndroidBridge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdf9d1bc41a8244b3bc2d249fb6cd7aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerConversionData.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerConversionData.cs new file mode 100644 index 0000000..454eaa6 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerConversionData.cs @@ -0,0 +1,31 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerConversionData + { + /// + /// `conversionData` contains information about install. Organic/non-organic, etc. + /// https://support.appsflyer.com/hc/en-us/articles/360000726098-Conversion-Data-Scenarios#Introduction + /// + /// JSON string of the returned conversion data. + void onConversionDataSuccess(string conversionData); + + /// + /// Any errors that occurred during the conversion request. + /// + /// A string describing the error. + void onConversionDataFail(string error); + + /// + /// `attributionData` contains information about OneLink, deeplink. + /// https://support.appsflyer.com/hc/en-us/articles/208874366-OneLink-Deep-Linking-Guide#Intro + /// + /// JSON string of the returned deeplink data. + void onAppOpenAttribution(string attributionData); + + /// + /// Any errors that occurred during the attribution request. + /// + /// A string describing the error. + void onAppOpenAttributionFailure(string error); + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerConversionData.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerConversionData.cs.meta new file mode 100644 index 0000000..3133eaa --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerConversionData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2f1d4dadb7cb44628f25f1ffd8fc104 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerIOSBridge.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerIOSBridge.cs new file mode 100644 index 0000000..4de6fd4 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerIOSBridge.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +namespace AppsFlyerSDK +{ + + public interface IAppsFlyerIOSBridge : IAppsFlyerNativeBridge + { + void setDisableCollectAppleAdSupport(bool disable); + void setShouldCollectDeviceName(bool shouldCollectDeviceName); + void setDisableCollectIAd(bool disableCollectIAd); + void setUseReceiptValidationSandbox(bool useReceiptValidationSandbox); + void setUseUninstallSandbox(bool useUninstallSandbox); + void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string transactionId, Dictionary additionalParameters, MonoBehaviour gameObject); + void validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject); + void registerUninstall(byte[] deviceToken); + void handleOpenUrl(string url, string sourceApplication, string annotation); + void waitForATTUserAuthorizationWithTimeoutInterval(int timeoutInterval); + void setCurrentDeviceLanguage(string language); + void disableSKAdNetwork(bool isDisabled); + void disableIDFVCollection(bool isDisabled); + + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerIOSBridge.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerIOSBridge.cs.meta new file mode 100644 index 0000000..8e200ea --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerIOSBridge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6847fb337898040288c165e3667101a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerNativeBridge.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerNativeBridge.cs new file mode 100644 index 0000000..23a107c --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerNativeBridge.cs @@ -0,0 +1,76 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AppsFlyerSDK +{ + + public interface IAppsFlyerNativeBridge + { + bool isInit { get; set; } + + void startSDK(bool onRequestResponse, string CallBackObjectName); + + void sendEvent(string eventName, Dictionary eventValues, bool onInAppResponse, string CallBackObjectName); + + void stopSDK(bool isSDKStopped); + + bool isSDKStopped(); + + string getSdkVersion(); + + void setCustomerUserId(string id); + + void setAppInviteOneLinkID(string oneLinkId); + + void setAdditionalData(Dictionary customData); + + void setDeepLinkTimeout(long deepLinkTimeout); + + void setResolveDeepLinkURLs(params string[] urls); + + void setOneLinkCustomDomain(params string[] domains); + + void setCurrencyCode(string currencyCode); + + void recordLocation(double latitude, double longitude); + + void anonymizeUser(bool shouldAnonymizeUser); + + string getAppsFlyerId(); + + void enableTCFDataCollection(bool shouldCollectTcfData); + + void setConsentData(AppsFlyerConsent appsFlyerConsent); + + void logAdRevenue(AFAdRevenueData adRevenueData, Dictionary additionalParameters); + + void setMinTimeBetweenSessions(int seconds); + + void setHost(string hostPrefixName, string hostName); + + void setPhoneNumber(string phoneNumber); + + void setSharingFilterForAllPartners(); + + void setSharingFilter(params string[] partners); + + void getConversionData(string objectName); + + void attributeAndOpenStore(string appID, string campaign, Dictionary userParams, MonoBehaviour gameObject); + + void recordCrossPromoteImpression(string appID, string campaign, Dictionary parameters); + + void generateUserInviteLink(Dictionary parameters, MonoBehaviour gameObject); + + void addPushNotificationDeepLinkPath(params string[] paths); + + void setUserEmails(EmailCryptType cryptType, params string[] userEmails); + + void subscribeForDeepLink(string objectName); + + void setIsDebug(bool shouldEnable); + + void setPartnerData(string partnerId, Dictionary partnerInfo); + } +} diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerNativeBridge.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerNativeBridge.cs.meta new file mode 100644 index 0000000..dd43257 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerNativeBridge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 409b8302434664a3785ce55d075e7f58 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerPurchaseValidation.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerPurchaseValidation.cs new file mode 100644 index 0000000..73591a3 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerPurchaseValidation.cs @@ -0,0 +1,8 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerPurchaseValidation + { + void didReceivePurchaseRevenueValidationInfo(string validationInfo); + void didReceivePurchaseRevenueError(string error); + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerPurchaseValidation.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerPurchaseValidation.cs.meta new file mode 100644 index 0000000..3e453b7 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerPurchaseValidation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c60f499ae0d048b1be8ffd6878a184c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerUserInvite.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerUserInvite.cs new file mode 100644 index 0000000..aac109e --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerUserInvite.cs @@ -0,0 +1,26 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerUserInvite + { + /// + /// The success callback for generating OneLink URLs. + /// + /// A string of the newly created url. + void onInviteLinkGenerated(string link); + + /// + /// The error callback for generating OneLink URLs + /// + /// A string describing the error. + void onInviteLinkGeneratedFailure(string error); + + /// + /// (ios only) iOS allows you to utilize the StoreKit component to open + /// the App Store while remaining in the context of your app. + /// More details at https://support.appsflyer.com/hc/en-us/articles/115004481946-Cross-Promotion-Tracking#tracking-cross-promotion-impressions + /// + /// openStore callback Contains promoted `clickURL` + void onOpenStoreLinkGenerated(string link); + + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerUserInvite.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerUserInvite.cs.meta new file mode 100644 index 0000000..8530528 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerUserInvite.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a4cdfa023cb8497b94bb39720052fef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateAndLog.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateAndLog.cs new file mode 100644 index 0000000..a5c02cf --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateAndLog.cs @@ -0,0 +1,19 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerValidateAndLog + { + /// + /// The success callback for validateAndSendInAppPurchase API. + /// For Android : the callback will return JSON string. + /// For iOS : the callback will return a JSON string from apples verifyReceipt API. + /// + /// + void onValidateAndLogComplete(string result); + + /// + /// The error callback for validateAndSendInAppPurchase API. + /// + /// A string describing the error. + void onValidateAndLogFailure(string error); + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateAndLog.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateAndLog.cs.meta new file mode 100644 index 0000000..459cc85 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateAndLog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a5adb7eab3284dd39a76ec56c06457c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateReceipt.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateReceipt.cs new file mode 100644 index 0000000..90490e2 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateReceipt.cs @@ -0,0 +1,19 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerValidateReceipt + { + /// + /// The success callback for validateAndSendInAppPurchase API. + /// For Android : the callback will return "Validate success". + /// For iOS : the callback will return a JSON string from apples verifyReceipt API. + /// + /// + void didFinishValidateReceipt(string result); + + /// + /// The error callback for validateAndSendInAppPurchase API. + /// + /// A string describing the error. + void didFinishValidateReceiptWithError(string error); + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateReceipt.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateReceipt.cs.meta new file mode 100644 index 0000000..38efa67 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/IAppsFlyerValidateReceipt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6385b1d184efa400a98515735e1f17bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/ProductPurchase.cs b/Packages/com.bywaystudios.appsflyersdk/Runtime/ProductPurchase.cs new file mode 100644 index 0000000..536190f --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/ProductPurchase.cs @@ -0,0 +1,184 @@ +#nullable enable + +using System.Collections; +using System.Collections.Generic; +using System; +using UnityEngine; + +[System.Serializable] +public class InAppPurchaseValidationResult : EventArgs +{ + public bool success; + public ProductPurchase? productPurchase; + public ValidationFailureData? failureData; + public string? token; +} + +[System.Serializable] +public class ProductPurchase +{ + public string? kind; + public string? purchaseTimeMillis; + public int purchaseState; + public int consumptionState; + public string? developerPayload; + public string? orderId; + public int purchaseType; + public int acknowledgementState; + public string? purchaseToken; + public string? productId; + public int quantity; + public string? obfuscatedExternalAccountId; + public string? obfuscatedExternalProfil; + public string? regionCode; +} + +[System.Serializable] +public class ValidationFailureData +{ + public int status; + public string? description; +} + +[System.Serializable] +public class SubscriptionValidationResult +{ + public bool success; + public SubscriptionPurchase? subscriptionPurchase; + public ValidationFailureData? failureData; + public string? token; +} + +[System.Serializable] +public class SubscriptionPurchase +{ + public string? acknowledgementState; + public CanceledStateContext? canceledStateContext; + public ExternalAccountIdentifiers? externalAccountIdentifiers; + public string? kind; + public string? latestOrderId; + public List? lineItems; + public string? linkedPurchaseToken; + public PausedStateContext? pausedStateContext; + public string? regionCode; + public string? startTime; + public SubscribeWithGoogleInfo? subscribeWithGoogleInfo; + public string? subscriptionState; + public TestPurchase? testPurchase; +} + +[System.Serializable] +public class CanceledStateContext +{ + public DeveloperInitiatedCancellation? developerInitiatedCancellation; + public ReplacementCancellation? replacementCancellation; + public SystemInitiatedCancellation? systemInitiatedCancellation; + public UserInitiatedCancellation? userInitiatedCancellation; + +} + +[System.Serializable] +public class ExternalAccountIdentifiers +{ + public string? externalAccountId; + public string? obfuscatedExternalAccountId; + public string? obfuscatedExternalProfileId; +} + +[System.Serializable] +public class SubscriptionPurchaseLineItem +{ + public AutoRenewingPlan? autoRenewingPlan; + public DeferredItemReplacement? deferredItemReplacement; + public string? expiryTime; + public OfferDetails? offerDetails; + public PrepaidPlan? prepaidPlan; + public string? productId; +} + +[System.Serializable] +public class PausedStateContext +{ + public string? autoResumeTime; +} + +[System.Serializable] +public class SubscribeWithGoogleInfo +{ + public string? emailAddress; + public string? familyName; + public string? givenName; + public string? profileId; + public string? profileName; +} + +[System.Serializable] +public class TestPurchase{} + +[System.Serializable] +public class DeveloperInitiatedCancellation{} + +[System.Serializable] +public class ReplacementCancellation{} + +[System.Serializable] +public class SystemInitiatedCancellation{} + +[System.Serializable] +public class UserInitiatedCancellation +{ + public CancelSurveyResult? cancelSurveyResult; + public string? cancelTime; +} + +[System.Serializable] +public class AutoRenewingPlan +{ + public string? autoRenewEnabled; + public SubscriptionItemPriceChangeDetails? priceChangeDetails; +} + +[System.Serializable] +public class DeferredItemReplacement +{ + public string? productId; +} + +[System.Serializable] +public class OfferDetails +{ + public List? offerTags; + public string? basePlanId; + public string? offerId; +} + +[System.Serializable] +public class PrepaidPlan +{ + public string? allowExtendAfterTime; +} + +[System.Serializable] +public class CancelSurveyResult +{ + public string? reason; + public string? reasonUserInput; +} + +[System.Serializable] +public class SubscriptionItemPriceChangeDetails +{ + public string? expectedNewPriceChargeTime; + public Money? newPrice; + public string? priceChangeMode; + public string? priceChangeState; +} + +[System.Serializable] + public class Money + { + public string? currencyCode; + public long nanos; + public long units; + } + \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/Runtime/ProductPurchase.cs.meta b/Packages/com.bywaystudios.appsflyersdk/Runtime/ProductPurchase.cs.meta new file mode 100644 index 0000000..7fdbf37 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/Runtime/ProductPurchase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a1435104a69d4c8ebcc6f237cc29a54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.appsflyersdk/package.json b/Packages/com.bywaystudios.appsflyersdk/package.json new file mode 100644 index 0000000..b8fff9c --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/package.json @@ -0,0 +1,6 @@ +{ + "name": "com.bywaystudios.appsflyersdk", + "displayName": "AppsFlyerSDK", + "version": "6.17.72-exp.1", + "description": "AppsFlyer Unity SDK" +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.appsflyersdk/package.json.meta b/Packages/com.bywaystudios.appsflyersdk/package.json.meta new file mode 100644 index 0000000..ee01cd5 --- /dev/null +++ b/Packages/com.bywaystudios.appsflyersdk/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d7791105a72b1fb469d2a9f2e0663bd2 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..afd3d9a --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,48 @@ +{ + "dependencies": { + "com.unity.asset-store-validation": "0.6.0", + "com.unity.collab-proxy": "2.10.2", + "com.unity.editorcoroutines": "1.0.1", + "com.unity.feature.development": "1.0.1", + "com.unity.ide.rider": "3.0.38", + "com.unity.ide.visualstudio": "2.0.25", + "com.unity.ide.vscode": "1.2.5", + "com.unity.nuget.newtonsoft-json": "3.2.2", + "com.unity.performance.profile-analyzer": "1.2.4", + "com.unity.settings-manager": "2.1.1", + "com.unity.test-framework": "1.1.33", + "com.unity.testtools.codecoverage": "1.2.7", + "com.unity.upm.develop": "0.5.3-exp.1", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..13dbf55 --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,375 @@ +{ + "dependencies": { + "com.bywaystudios.appsflyersdk": { + "version": "file:com.bywaystudios.appsflyersdk", + "depth": 0, + "source": "embedded", + "dependencies": {} + }, + "com.unity.asset-store-validation": { + "version": "0.6.0", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.nuget.newtonsoft-json": "2.0.2" + }, + "url": "https://packages.unity.com" + }, + "com.unity.collab-proxy": { + "version": "2.10.2", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.editorcoroutines": { + "version": "1.0.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.feature.development": { + "version": "1.0.1", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.ide.visualstudio": "2.0.22", + "com.unity.ide.rider": "3.0.36", + "com.unity.ide.vscode": "1.2.5", + "com.unity.editorcoroutines": "1.0.0", + "com.unity.performance.profile-analyzer": "1.2.3", + "com.unity.test-framework": "1.1.33", + "com.unity.testtools.codecoverage": "1.2.6" + } + }, + "com.unity.ide.rider": { + "version": "3.0.38", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.25", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.31" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.vscode": { + "version": "1.2.5", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.nuget.newtonsoft-json": { + "version": "3.2.2", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.performance.profile-analyzer": { + "version": "1.2.4", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.settings-manager": { + "version": "2.1.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.33", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.testtools.codecoverage": { + "version": "1.2.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.0.16", + "com.unity.settings-manager": "1.0.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.upm.develop": { + "version": "0.5.3-exp.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.20", + "com.unity.nuget.newtonsoft-json": "2.0.2", + "com.unity.asset-store-validation": "0.1.3" + }, + "url": "https://packages.unity.com" + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..07ebfb0 --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 1024 diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..cdc1f3e --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_DefaultMaxAngluarSpeed: 7 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..0147887 --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] + m_configObjects: {} diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..1e44a0a --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 0 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref + m_ProjectGenerationRootNamespace: + m_CollabEditorSettings: + inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 0 + m_SerializeInlineMappingsOnOneLine: 1 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..43369e3 --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_LogWhenShaderIsCompiled: 0 + m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/ProjectSettings/MemorySettings.asset b/ProjectSettings/MemorySettings.asset new file mode 100644 index 0000000..5b5face --- /dev/null +++ b/ProjectSettings/MemorySettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!387306366 &1 +MemorySettings: + m_ObjectHideFlags: 0 + m_EditorMemorySettings: + m_MainAllocatorBlockSize: -1 + m_ThreadAllocatorBlockSize: -1 + m_MainGfxBlockSize: -1 + m_ThreadGfxBlockSize: -1 + m_CacheBlockSize: -1 + m_TypetreeBlockSize: -1 + m_ProfilerBlockSize: -1 + m_ProfilerEditorBlockSize: -1 + m_BucketAllocatorGranularity: -1 + m_BucketAllocatorBucketsCount: -1 + m_BucketAllocatorBlockSize: -1 + m_BucketAllocatorBlockCount: -1 + m_ProfilerBucketAllocatorGranularity: -1 + m_ProfilerBucketAllocatorBucketsCount: -1 + m_ProfilerBucketAllocatorBlockSize: -1 + m_ProfilerBucketAllocatorBlockCount: -1 + m_TempAllocatorSizeMain: -1 + m_JobTempAllocatorBlockSize: -1 + m_BackgroundJobTempAllocatorBlockSize: -1 + m_JobTempAllocatorReducedBlockSize: -1 + m_TempAllocatorSizeGIBakingWorker: -1 + m_TempAllocatorSizeNavMeshWorker: -1 + m_TempAllocatorSizeAudioWorker: -1 + m_TempAllocatorSizeCloudWorker: -1 + m_TempAllocatorSizeGfx: -1 + m_TempAllocatorSizeJobWorker: -1 + m_TempAllocatorSizeBackgroundWorker: -1 + m_TempAllocatorSizePreloadManager: -1 + m_PlatformMemorySettings: {} diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..112a053 --- /dev/null +++ b/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreReleasePackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + m_SeeAllPackageVersions: 0 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_Modified: 0 + m_ErrorMessage: + m_UserModificationsInstanceId: -830 + m_OriginalInstanceId: -832 + m_LoadAssets: 0 diff --git a/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json new file mode 100644 index 0000000..3c7b4c1 --- /dev/null +++ b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json @@ -0,0 +1,5 @@ +{ + "m_Dictionary": { + "m_DictionaryValues": [] + } +} \ No newline at end of file diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..47880b1 --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 1 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..67a94da --- /dev/null +++ b/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..5727f4e --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,961 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 26 + productGUID: 50fdcc3116d56d449af11ea72d35a6e9 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: AppsFlyerSDKPackage + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1920 + defaultScreenHeight: 1080 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 1 + unsupportedMSAAFallback: 0 + m_SpriteBatchVertexThreshold: 300 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + numberOfMipsStrippedPerMipmapLimitGroup: {} + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 1 + androidBlitType: 0 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + androidPredictiveBackSupport: 1 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + audioSpatialExperience: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + dedicatedServerOptimizations: 0 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + switchNVNGraphicsFirmwareMemory: 32 + switchMaxWorkerMultiple: 8 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 1 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + loadStoreDebugModeEnabled: 0 + visionOSBundleVersion: 1.0 + tvOSBundleVersion: 1.0 + bundleVersion: 0.1 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 + useHDRDisplay: 0 + hdrBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: + Standalone: 0 + VisionOS: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 1 + strictShaderVariantMatching: 0 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSSimulatorArchitecture: 0 + iOSTargetOSVersionString: 12.0 + tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 12.0 + VisionOSSdkVersion: 0 + VisionOSTargetOSVersionString: 1.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + metalCompileShaderBinary: 0 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + VisionOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + VisionOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.packagetemplate@1.0.0 + templateDefaultScene: Assets/Scenes/SampleScene.unity + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 1 + AndroidTargetDevices: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + chromeosInputEmulation: 1 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetShaderSettings: [] + m_BuildTargetGraphicsJobs: + - m_BuildTarget: MacStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: Switch + m_GraphicsJobs: 1 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 + - m_BuildTarget: AppleTVSupport + m_GraphicsJobs: 0 + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 1 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 1 + - m_BuildTarget: iOSSupport + m_GraphicsJobs: 0 + - m_BuildTarget: WindowsStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 1 + - m_BuildTarget: LuminSupport + m_GraphicsJobs: 0 + - m_BuildTarget: AndroidPlayer + m_GraphicsJobs: 0 + - m_BuildTarget: WebGLSupport + m_GraphicsJobs: 0 + m_BuildTargetGraphicsJobMode: + - m_BuildTarget: PS4Player + m_GraphicsJobMode: 0 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobMode: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: AndroidPlayer + m_APIs: 150000000b000000 + m_Automatic: 1 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR + m_DefaultShaderChunkSizeInMB: 16 + m_DefaultShaderChunkCount: 0 + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupHDRCubemapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] + m_BuildTargetNormalMapEncoding: + - m_BuildTarget: Android + m_Encoding: 1 + - m_BuildTarget: iPhone + m_Encoding: 1 + - m_BuildTarget: tvOS + m_Encoding: 1 + m_BuildTargetDefaultTextureCompressionFormat: + - m_BuildTarget: Android + m_Format: 3 + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + macOSTargetOSVersion: 10.13.0 + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchEnableFileSystemTrace: 0 + switchLTOSetting: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchCompilerFlags: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchDisableHTCSPlayerConnection: 0 + switchUseNewStyleFilepaths: 1 + switchUseLegacyFmodPriorities: 0 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 16 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 + webGLPowerPreference: 2 + scriptingDefineSymbols: {} + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + il2cppCodeGeneration: {} + managedStrippingLevel: + EmbeddedLinux: 1 + GameCoreScarlett: 1 + GameCoreXboxOne: 1 + Nintendo Switch: 1 + PS4: 1 + PS5: 1 + QNX: 1 + Stadia: 1 + VisionOS: 1 + WebGL: 1 + Windows Store Apps: 1 + XboxOne: 1 + iPhone: 1 + tvOS: 1 + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: AppsFlyerSDKPackage + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: AppsFlyerSDKPackage + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} + metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: + UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 1 + hmiLogStartupTiming: 0 + hmiCpuConfiguration: + apiCompatibilityLevel: 6 + activeInputHandler: 0 + windowsGamepadBackendHint: 0 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 0 + hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 + virtualTexturingSupportEnabled: 0 + insecureHttpOption: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..587f809 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2022.3.62f3 +m_EditorVersionWithRevision: 2022.3.62f3 (96770f904ca7) diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..36c0dad --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -0,0 +1,234 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Lumin: 5 + GameCoreScarlett: 5 + GameCoreXboxOne: 5 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PS5: 5 + Stadia: 5 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..1c92a78 --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..a88bee0 --- /dev/null +++ b/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + m_PackageRequiringCoreStatsPresent: 0 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..3a95c98 --- /dev/null +++ b/ProjectSettings/VFXManager.asset @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/ProjectSettings/XRSettings.asset b/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..482590c --- /dev/null +++ b/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file