├── unity-samples ├── ProjectSettings │ ├── boot.config │ ├── ProjectVersion.txt │ ├── NavMeshLayers.asset │ ├── NetworkManager.asset │ ├── ClusterInputManager.asset │ ├── PresetManager.asset │ ├── XRSettings.asset │ ├── VersionControlSettings.asset │ ├── TimeManager.asset │ ├── VFXManager.asset │ ├── AudioManager.asset │ ├── TagManager.asset │ ├── UnityConnectSettings.asset │ ├── PackageManagerSettings.asset │ ├── EditorBuildSettings.asset │ ├── EditorSettings.asset │ ├── MemorySettings.asset │ ├── GvhProjectSettings.xml │ ├── DynamicsManager.asset │ ├── NavMeshAreas.asset │ ├── Physics2DSettings.asset │ ├── GraphicsSettings.asset │ └── SceneTemplateSettings.json ├── Assets │ ├── Tests │ │ ├── UnitTests │ │ └── UnitTests.meta │ ├── Plugins │ │ ├── iOS │ │ ├── Appboy │ │ ├── Android │ │ │ ├── proguard-user.txt │ │ │ ├── appboy.aar │ │ │ ├── appboy-ui.aar │ │ │ ├── appboy-unity.aar │ │ │ ├── AndroidManifest.xml.meta │ │ │ ├── mainTemplate.gradle.meta │ │ │ ├── proguard-user.txt.meta │ │ │ ├── gradleTemplate.properties.meta │ │ │ ├── gradleTemplate.properties │ │ │ ├── appboy-ui.aar.meta │ │ │ ├── appboy.aar.meta │ │ │ ├── appboy-unity.aar.meta │ │ │ ├── AndroidManifest.xml │ │ │ └── mainTemplate.gradle │ │ ├── Android.meta │ │ ├── Appboy.meta │ │ └── iOS.meta │ ├── Prefabs │ │ ├── Pickup.prefab │ │ └── Pickup.prefab.meta │ ├── Tests.meta │ ├── _Scenes │ │ ├── ChangeUser.unity.meta │ │ ├── LogPurchase.unity.meta │ │ ├── MainMenu.unity.meta │ │ ├── SetUserField.unity.meta │ │ ├── LogCustomEvent.unity.meta │ │ ├── SetCustomAttributes.unity.meta │ │ ├── CustomAttributesSetting.unity.meta │ │ ├── SetCustomAttributesArray.unity.meta │ │ ├── FeatureFlags.unity.meta │ │ ├── SetCustomAttributesArraySettings.lighting.meta │ │ └── SetCustomAttributesArraySettings.lighting │ ├── Editor.meta │ ├── Plugins.meta │ ├── Prefabs.meta │ ├── Scripts.meta │ ├── _Scenes.meta │ ├── GoogleService-Info.plist.meta │ ├── google-services.json.meta │ ├── Editor │ │ ├── BuildAndroid.cs.meta │ │ ├── BuildIos.cs.meta │ │ ├── SwitchPlatform.cs.meta │ │ ├── BuildIos.cs │ │ ├── BuildAndroid.cs │ │ └── SwitchPlatform.cs │ ├── Scripts │ │ ├── ChangeUser.cs.meta │ │ ├── LogPurchase.cs.meta │ │ ├── MainMenu.cs.meta │ │ ├── LogCustomEvent.cs.meta │ │ ├── SetUserField.cs.meta │ │ ├── SetCustomAttributes.cs.meta │ │ ├── UnitySampleConstants.cs.meta │ │ ├── CustomAttributesSetting.cs.meta │ │ ├── SetCustomAttributesArray.cs.meta │ │ ├── FeatureFlags.cs.meta │ │ ├── ChangeUser.cs │ │ ├── CustomAttributesSetting.cs │ │ ├── LogCustomEvent.cs │ │ ├── LogPurchase.cs │ │ ├── FeatureFlags.cs │ │ ├── SetCustomAttributesArray.cs │ │ ├── UnitySampleConstants.cs │ │ ├── SetUserField.cs │ │ └── SetCustomAttributes.cs │ ├── Resources.meta │ ├── Resources │ │ ├── AppboyConfig.asset.meta │ │ └── AppboyConfig.asset │ ├── GoogleService-Info.plist │ └── google-services.json ├── UIElementsSchema │ └── UIElements.xsd ├── README.md └── Packages │ └── manifest.json ├── .github ├── assets │ ├── logo-dark.png │ └── logo-light.png └── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature.yml │ └── bug.yml ├── Assets ├── Plugins │ ├── Android │ │ ├── appboy.aar │ │ ├── appboy-ui.aar │ │ ├── appboy-unity.aar │ │ ├── appboy.aar.meta │ │ ├── appboy-ui.aar.meta │ │ └── appboy-unity.aar.meta │ ├── Appboy │ │ ├── Models │ │ │ ├── SlideFrom.cs │ │ │ ├── DismissType.cs │ │ │ ├── ClickAction.cs │ │ │ ├── InAppMessage │ │ │ │ ├── InAppMessageType.cs │ │ │ │ ├── IInAppMessage.cs.meta │ │ │ │ ├── InAppMessageBase.cs.meta │ │ │ │ ├── InAppMessageButton.cs.meta │ │ │ │ ├── InAppMessageFactory.cs.meta │ │ │ │ ├── InAppMessageFull.cs.meta │ │ │ │ ├── InAppMessageModal.cs.meta │ │ │ │ ├── InAppMessageSlideup.cs.meta │ │ │ │ ├── InAppMessageType.cs.meta │ │ │ │ ├── IInAppMessageImmersive.cs.meta │ │ │ │ ├── InAppMessageConstants.cs.meta │ │ │ │ ├── InAppMessageImmersiveBase.cs.meta │ │ │ │ ├── InAppMessageFull.cs │ │ │ │ ├── InAppMessageModal.cs │ │ │ │ ├── IInAppMessageImmersive.cs │ │ │ │ ├── InAppMessageSlideup.cs │ │ │ │ ├── InAppMessageFactory.cs │ │ │ │ ├── IInAppMessage.cs │ │ │ │ ├── InAppMessageConstants.cs │ │ │ │ ├── InAppMessageButton.cs │ │ │ │ ├── InAppMessageImmersiveBase.cs │ │ │ │ └── InAppMessageBase.cs │ │ │ ├── CardCategory.cs │ │ │ ├── Cards.meta │ │ │ ├── InAppMessage.meta │ │ │ ├── Gender.cs │ │ │ ├── Feed.cs.meta │ │ │ ├── Gender.cs.meta │ │ │ ├── CardCategory.cs.meta │ │ │ ├── Cards │ │ │ │ ├── Card.cs.meta │ │ │ │ ├── BannerCard.cs.meta │ │ │ │ ├── ClassicCard.cs.meta │ │ │ │ ├── ContentCard.cs.meta │ │ │ │ ├── CaptionedImageCard.cs.meta │ │ │ │ ├── TextAnnouncementCard.cs.meta │ │ │ │ ├── BannerCard.cs │ │ │ │ ├── TextAnnouncementCard.cs │ │ │ │ ├── CaptionedImageCard.cs │ │ │ │ ├── ClassicCard.cs │ │ │ │ ├── Card.cs │ │ │ │ └── ContentCard.cs │ │ │ ├── ClickAction.cs.meta │ │ │ ├── DismissType.cs.meta │ │ │ ├── FeatureFlag.cs.meta │ │ │ ├── SlideFrom.cs.meta │ │ │ ├── PushNotification.cs.meta │ │ │ ├── TrackingProperty.cs.meta │ │ │ ├── ApplePushNotification.cs.meta │ │ │ ├── ApplePushNotificationAlert.cs.meta │ │ │ ├── TrackingPropertyAllowList.cs.meta │ │ │ ├── AppboyNotificationSubscriptionType.cs.meta │ │ │ ├── AppboyNotificationSubscriptionType.cs │ │ │ ├── ApplePushNotificationAlert.cs │ │ │ ├── Feed.cs │ │ │ ├── TrackingPropertyAllowList.cs │ │ │ ├── PushNotification.cs │ │ │ ├── TrackingProperty.cs │ │ │ └── ApplePushNotification.cs │ │ ├── Appboy.asmdef.meta │ │ ├── Editor.meta │ │ ├── Models.meta │ │ ├── Tests.meta │ │ ├── Internal.meta │ │ ├── Utilities.meta │ │ ├── Editor │ │ │ ├── Appboy.Editor.asmdef.meta │ │ │ ├── AppboyConfig.cs.meta │ │ │ ├── PostBuild.cs.meta │ │ │ ├── PreBuild.cs.meta │ │ │ ├── AppboyConfigEditor.cs.meta │ │ │ └── Appboy.Editor.asmdef │ │ ├── AppboyBinding.cs.meta │ │ ├── BrazePlatform.cs.meta │ │ ├── BrazeiOSPlatform.cs.meta │ │ ├── Utilities │ │ │ ├── EnumUtils.cs.meta │ │ │ ├── JsonUtils.cs.meta │ │ │ ├── MiniJson.cs.meta │ │ │ ├── ColorUtils.cs.meta │ │ │ ├── SimpleJSON.cs.meta │ │ │ ├── CollectionUtils.cs.meta │ │ │ ├── EnumUtils.cs │ │ │ ├── JsonUtils.cs │ │ │ ├── ColorUtils.cs │ │ │ └── CollectionUtils.cs │ │ ├── BrazeAndroidPlatform.cs.meta │ │ ├── BrazeInAppMessageListener.cs.meta │ │ ├── Internal │ │ │ ├── BrazeInternalComponent.cs.meta │ │ │ ├── BrazeInternalGameObject.cs.meta │ │ │ ├── BrazeInternalGameObject.cs │ │ │ └── BrazeInternalComponent.cs │ │ ├── Tests │ │ │ ├── ApplePushNotificationTester.cs.meta │ │ │ ├── AppboyBindingTester.cs.meta │ │ │ └── ApplePushNotificationTester.cs │ │ ├── Appboy.asmdef │ │ ├── BrazeInAppMessageListener.cs │ │ └── BrazePlatform.cs │ ├── CHANGELOG.md.meta │ ├── iOS.meta │ ├── Android.meta │ ├── Appboy.meta │ └── iOS │ │ ├── AppboyBinding.m.meta │ │ ├── AppboyAppDelegate.mm.meta │ │ ├── AppboyUnityManager.h.meta │ │ ├── AppboyUnityManager.mm.meta │ │ └── AppboyAppDelegate.mm ├── Editor.meta ├── Plugins.meta └── Editor │ ├── Build.cs.meta │ └── Build.cs ├── LICENSE ├── README.md └── .gitignore /unity-samples/ProjectSettings/boot.config: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /unity-samples/Assets/Tests/UnitTests: -------------------------------------------------------------------------------- 1 | ./../../../Tests/ -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/iOS: -------------------------------------------------------------------------------- 1 | ./../../../Assets/Plugins/iOS -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Appboy: -------------------------------------------------------------------------------- 1 | ./../../../Assets/Plugins/Appboy -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/proguard-user.txt: -------------------------------------------------------------------------------- 1 | -keep class com.braze.** { *; } 2 | -------------------------------------------------------------------------------- /.github/assets/logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/.github/assets/logo-dark.png -------------------------------------------------------------------------------- /.github/assets/logo-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/.github/assets/logo-light.png -------------------------------------------------------------------------------- /Assets/Plugins/Android/appboy.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/Assets/Plugins/Android/appboy.aar -------------------------------------------------------------------------------- /Assets/Plugins/Android/appboy-ui.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/Assets/Plugins/Android/appboy-ui.aar -------------------------------------------------------------------------------- /Assets/Plugins/Android/appboy-unity.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/Assets/Plugins/Android/appboy-unity.aar -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2021.3.19f1 2 | m_EditorVersionWithRevision: 2021.3.19f1 (c9714fde33b6) 3 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/SlideFrom.cs: -------------------------------------------------------------------------------- 1 | namespace Appboy.Models { 2 | public enum SlideFrom { 3 | TOP, 4 | BOTTOM 5 | } 6 | } 7 | 8 | -------------------------------------------------------------------------------- /unity-samples/Assets/Prefabs/Pickup.prefab: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/unity-samples/Assets/Prefabs/Pickup.prefab -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/appboy.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/unity-samples/Assets/Plugins/Android/appboy.aar -------------------------------------------------------------------------------- /unity-samples/Assets/Prefabs/Pickup.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f621c0d11493241968358deb42ca9ca7 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /unity-samples/Assets/Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 730bd74c1465949808d8f90147c0825b 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/ChangeUser.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2e7803b95bbbe45999ed72c5779359d5 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/LogPurchase.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8ce813cfef4ce44779284b5a4f6b9ac4 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/MainMenu.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: efc303f32979b4fbcab6286ccd307510 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/SetUserField.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 385a4274d8c8c450aab7946c567221fa 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/DismissType.cs: -------------------------------------------------------------------------------- 1 | namespace Appboy.Models { 2 | public enum DismissType { 3 | AUTO_DISMISS, 4 | SWIPE 5 | } 6 | } 7 | 8 | -------------------------------------------------------------------------------- /unity-samples/Assets/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc17f81a6ec22416eb983295f7d4f2d6 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f2937a20f4f2b4df4b8dbb1f8cbe371b 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/appboy-ui.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/unity-samples/Assets/Plugins/Android/appboy-ui.aar -------------------------------------------------------------------------------- /unity-samples/Assets/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c228b867bfba34e849e96a11ef8e0909 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bfd76f9a6492441e9be9e59af6ad9a17 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5f4caffa53fd8487f8dece016e330e3d 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/LogCustomEvent.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cc6e432aea266402983492e6980f6eca 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/NavMeshLayers.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/unity-samples/ProjectSettings/NavMeshLayers.asset -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/unity-samples/ProjectSettings/NetworkManager.asset -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0c1cdf1eeeed74d5d9500b607001ce01 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/appboy-unity.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braze-inc/braze-unity-sdk/HEAD/unity-samples/Assets/Plugins/Android/appboy-unity.aar -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Appboy.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2800baefc291f49ef940a993751cc58b 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/iOS.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4ddfe7cbc54c74dfa8917935a6a6fb4b 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/Tests/UnitTests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a5d7bb83f5a134c609c6d4b19bb15318 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/SetCustomAttributes.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 65101655a667a43a9b84b5295ff805d2 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/ClickAction.cs: -------------------------------------------------------------------------------- 1 | namespace Appboy.Models { 2 | public enum ClickAction { 3 | NEWS_FEED, 4 | URI, 5 | NONE 6 | } 7 | } 8 | 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/CustomAttributesSetting.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cc7f708df01bb4368a44c2232e46f783 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/SetCustomAttributesArray.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a8bc8f68fb22447509ac77391774e8b0 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageType.cs: -------------------------------------------------------------------------------- 1 | namespace Appboy.Models.InAppMessage { 2 | public enum InAppMessageType { 3 | FULL, 4 | MODAL, 5 | SLIDEUP 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/CardCategory.cs: -------------------------------------------------------------------------------- 1 | namespace Appboy.Models { 2 | public enum CardCategory { 3 | ADVERTISING, 4 | ANNOUNCEMENTS, 5 | NEWS, 6 | SOCIAL, 7 | NO_CATEGORY 8 | } 9 | } -------------------------------------------------------------------------------- /Assets/Plugins/CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 250661f94b3c34ff69c9085478060cf8 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 71fbc09525bca413cafd9ae08a29d175 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2245c82083ae24e51b7730ccad41cef9 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /Assets/Plugins/iOS.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6d9c7041e643e49958759c15a0d3b847 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Android.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0b188b8d8c25040e59346b214285c462 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7946e19958b6c4b36938e0ff6292a975 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/GoogleService-Info.plist.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e3769ccd5c75442c4ac905481cbdc424 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /unity-samples/Assets/google-services.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 19e3eb6f838324b47954e3f285f992df 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Appboy.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04daa7abf8c09a14b88cac8335a5991f 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ed3f31f832ecb4cd98c6f8dbd5ea07f6 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 78b8d94eadfe241f0976ce862b0b5e64 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 745cb92dce1ef4df79ef620ba31f92cf 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/FeatureFlags.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4f4b792d184e44774a2bec2fb1ff7f23 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Internal.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ab5b022ad07294763b86968c6e01168b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 430a0954c4eb64461bdf334343ac7fe7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 581060ca2af7c4a3680c5237d918720f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Editor/Appboy.Editor.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3741a048b6e841942a548370758d5b36 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/AndroidManifest.xml.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c0ae98308ab0475a9583e1ea6e82ec65 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/mainTemplate.gradle.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 384fd0375e42b4a56b99e6c41f7ea0d8 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/proguard-user.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5c1fb6a650396482e8c356067ceb9775 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: df80300b9949a4830a004fc04e20dd68 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/gradleTemplate.properties.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2074e214d5033446b91cd49bee6eeff0 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /unity-samples/Assets/Editor/BuildAndroid.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 508fcf7c0e98f4d259d4b801f4856d07 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Editor/BuildIos.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d70b17ecd96784b17be4aab82b54297d 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/ChangeUser.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 42d42e9d040394a7fb30521eef9f671d 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/LogPurchase.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9dca31c72d6cf445e8a4c8bfa45e39e7 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/MainMenu.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f9efa5e544fea4cf681f37af207626ce 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Editor/SwitchPlatform.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e75e1a070be844e8888293b16a63219 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/LogCustomEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f867d19a7319c4ac5b09923ab4d81ebb 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/SetUserField.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a43a0581f3eab4687b9a26a1ac9ec5fe 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/SetCustomAttributes.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f419b7d14183b4163bdc48be8c5f51b1 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/UnitySampleConstants.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2f166d1c4771948d6bdfeb01a6c6eb7a 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4cca1780f25f147cf99743a00cb6e0d4 3 | folderAsset: yes 4 | timeCreated: 1468867689 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/CustomAttributesSetting.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6e2d85283a0f943c49ed44ea0be19e00 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/SetCustomAttributesArray.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 21e81985fbb5c4a489a367ea64282cac 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /unity-samples/Assets/Resources/AppboyConfig.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b87565d7728d04b16ad8eaaed93eb5e9 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Gender.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | 3 | namespace Appboy.Models { 4 | public enum Gender { 5 | Male = 0, 6 | Female = 1, 7 | Other = 2, 8 | Unknown = 3, 9 | NotApplicable = 4, 10 | PreferNotToSay = 5 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/gradleTemplate.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M 2 | org.gradle.parallel=true 3 | android.enableR8=**MINIFY_WITH_R_EIGHT** 4 | unityStreamingAssets=.unity3d**STREAMING_ASSETS** 5 | **ADDITIONAL_PROPERTIES** 6 | android.useAndroidX=true 7 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/SetCustomAttributesArraySettings.lighting.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e794114f51d843faac0c35f110e6b8c 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 4890085278179872738 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Editor/Build.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cd8fcd9f68b1b4e538bdc396cccd711e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/AppboyBinding.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 007ca751b66d44f5c8123bd1f3a837ec 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/BrazePlatform.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d7c0eae43a8bd437aa65b823dc3b85fd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Feed.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3b5c4577e26454f82be11c518a883693 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Gender.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 267bfa7d9703141148e030f36a525996 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/BrazeiOSPlatform.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5f08496014c394002aa024d327451592 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Editor/AppboyConfig.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 19e53a81bfc8b41c48967f2a15ad4eac 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Editor/PostBuild.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 52a8a8a106e35454ab7bf54eee1b2a01 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Editor/PreBuild.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80fe2e93ba6ac4b5e871d9a72d507ac9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/CardCategory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1087fad3cfd6b41b6893173dccab4fe2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/Card.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3bb68f31d408047cc90fad65e1a79c0a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/ClickAction.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f91ce74c434e849c1936029cf6ee5a5b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/DismissType.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b89cceede85364be9898bcf97a3db402 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/FeatureFlag.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e25d445dffa56445782e1870de82c9bc 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/SlideFrom.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 02ee9dd32c1b24f4fa6b23d04db7d3b3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/EnumUtils.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dc527e22e46ab47c7a9b4c29dcf44eeb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/JsonUtils.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 85dd05760355043dba8d8a78592ae142 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/MiniJson.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b98e0c319b9a54421af54afa1db719cc 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/FeatureFlags.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6c4a3428bf57842b994d9c573e741ff9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/BrazeAndroidPlatform.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dc63ef47bf9384adf98719fbe60813cb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/BannerCard.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 24bf81669aaa74edc8eef167b39b10c1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/ClassicCard.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5ee9112294e054ed78c97b36ec9b410b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/ContentCard.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c122137dc5df64fb68a5e8c806ca818d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/PushNotification.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d99751b90d2da4a13aa30cae46932384 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/TrackingProperty.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 71b9be4efe7204b5f9a1a9c6f963c275 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/ColorUtils.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fd61ba0cdcb694fd8bac13261a99d4c1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/SimpleJSON.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 48a35554305134309aa5136482600a68 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/BrazeInAppMessageListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 082da550bfeef406b8509e19c88a7c97 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Editor/AppboyConfigEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2d9584e498abb4c5d835d770676dfa30 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/ApplePushNotification.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e008e438c11bc47a5a140376934afbd0 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/CollectionUtils.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9d18b1a77ff694a70bf2eb86fc11b0a7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Internal/BrazeInternalComponent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 006e4d620bf2d4c11befcede36edae3f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Internal/BrazeInternalGameObject.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9874d28efa3d344afa3967391efe52cb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/ApplePushNotificationAlert.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1e999e41d336749c8a631d70e7b90e55 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/CaptionedImageCard.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 19e2e46fa80d64018a49b9b5b5ebc822 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/TextAnnouncementCard.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6124a7e440abd47c08bb7ef364a72ed4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/IInAppMessage.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 939aedf23eb5547a1983db2e56e1e143 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/TrackingPropertyAllowList.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 87bb9daed51594bd6a3773480b36e7f5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Tests/ApplePushNotificationTester.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0a10262561d3544c690239da9ac47a23 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageBase.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2a66c82b7a5f7457cb4350fc4750f648 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageButton.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f1c2680d4fef14194a3bd7201ad30623 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageFactory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b6caa8dc37cc54b3cad1b747219554da 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageFull.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 71aa35c7f608c46e4a559299640ed20b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageModal.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9eafea7b031e140b993d8fa811991a23 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageSlideup.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a0fc33198f781439c9050dd68ba421f3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageType.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 32690dc8af514453aba3f3bba9ca4e95 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/AppboyNotificationSubscriptionType.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 62532190c53dd41c7b974a8edd4e7da8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/IInAppMessageImmersive.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 29ed8d47c826540e3a05f96a4c826761 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageConstants.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 75318de82111844d39884cb36c13ad6e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageImmersiveBase.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 074dd7134d3fa4cb6b5df1836eb0ae4a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /unity-samples/Assets/Editor/BuildIos.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | class BuildIos { 4 | static void PerformBuild () { 5 | string[] scenes = { 6 | "Assets/_Scenes/MiniGame.unity", 7 | "Assets/_Scenes/MainMenu.unity" 8 | }; 9 | BuildPipeline.BuildPlayer (scenes, "iOS/Roll-A-Ball-Ios", BuildTarget.iOS, BuildOptions.None); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageFull.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Appboy.Utilities; 3 | 4 | namespace Appboy.Models.InAppMessage { 5 | public class InAppMessageFull : InAppMessageImmersiveBase { 6 | public InAppMessageFull() { 7 | } 8 | 9 | public InAppMessageFull(JSONObject json) : base(json) { 10 | } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Tests/AppboyBindingTester.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a1225fec74af348369eb7d7f189f8e64 3 | timeCreated: 1428595795 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageModal.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Appboy.Utilities; 3 | 4 | namespace Appboy.Models.InAppMessage { 5 | public class InAppMessageModal : InAppMessageImmersiveBase { 6 | public InAppMessageModal() { 7 | } 8 | 9 | public InAppMessageModal(JSONObject json) : base(json) { 10 | } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /unity-samples/Assets/Editor/BuildAndroid.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | class BuildAndroid { 4 | static void PerformBuild () { 5 | string[] scenes = { 6 | "Assets/_Scenes/MiniGame.unity", 7 | "Assets/_Scenes/MainMenu.unity" 8 | }; 9 | BuildPipeline.BuildPlayer (scenes, "Roll-A-Ball-Android.apk", BuildTarget.Android, BuildOptions.None); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Braze Support 4 | url: https://www.braze.com/docs/support_contact 5 | about: Contact Braze Support for company or campaign-specific troubleshooting 6 | - name: Security Issues 7 | url: https://www.braze.com/docs/developer_guide/disclosures/security_and_vulnerability_disclosure/ 8 | about: Please report security vulnerabilities here. 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Appboy.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Appboy", 3 | "rootNamespace": "Appboy", 4 | "references": [], 5 | "includePlatforms": [], 6 | "excludePlatforms": [], 7 | "allowUnsafeCode": false, 8 | "overrideReferences": false, 9 | "precompiledReferences": [], 10 | "autoReferenced": true, 11 | "defineConstraints": [], 12 | "versionDefines": [], 13 | "noEngineReferences": false 14 | } 15 | -------------------------------------------------------------------------------- /unity-samples/Assets/Editor/SwitchPlatform.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | using UnityEditor; 4 | using System; 5 | 6 | public class AppboySwitchPlatform : MonoBehaviour { 7 | 8 | static void SwitchToAndroid () { 9 | EditorUserBuildSettings.SwitchActiveBuildTarget (BuildTargetGroup.Android, BuildTarget.Android); 10 | } 11 | 12 | static void SwitchToIos () { 13 | EditorUserBuildSettings.SwitchActiveBuildTarget (BuildTargetGroup.iOS, BuildTarget.iOS); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 0 20 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/IInAppMessageImmersive.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | 6 | namespace Appboy.Models.InAppMessage { 7 | public interface IInAppMessageImmersive { 8 | string Header { get; set; } 9 | 10 | Color? HeaderTextColor { get; set; } 11 | 12 | Color? CloseButtonColor { get; set; } 13 | 14 | List Buttons { get; set; } 15 | 16 | void LogButtonClicked(int buttonID); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Editor/Appboy.Editor.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Appboy.Editor", 3 | "rootNamespace": "Appboy.Editor", 4 | "references": [ 5 | "GUID:04daa7abf8c09a14b88cac8335a5991f" 6 | ], 7 | "includePlatforms": [ 8 | "Editor" 9 | ], 10 | "excludePlatforms": [], 11 | "allowUnsafeCode": false, 12 | "overrideReferences": false, 13 | "precompiledReferences": [], 14 | "autoReferenced": true, 15 | "defineConstraints": [], 16 | "versionDefines": [], 17 | "noEngineReferences": false 18 | } -------------------------------------------------------------------------------- /unity-samples/UIElementsSchema/UIElements.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /unity-samples/README.md: -------------------------------------------------------------------------------- 1 | unity-samples 2 | ============= 3 | 4 | This sample app contains a Unity project that can build an Appboy-integrated iOS app and an Appboy-integrated Android app. 5 | 6 | #### Build Process 7 | 8 | You need to switch platforms to build iOS (append to the current project) or Android (which makes an APK). Do this in the Build Settings menu. 9 | 10 | To Run the Android apk on a device: 11 | 12 | * How to install apk to device 13 | 14 | `adb install /path/to/app.apk` (Device doesn't have the app installed) 15 | 16 | `adb install -r /path/to/app.apk` (Device already has the app installed) 17 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: 7 | - PickUp 8 | layers: 9 | - Default 10 | - TransparentFX 11 | - Ignore Raycast 12 | - 13 | - Water 14 | - UI 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | - 41 | m_SortingLayers: 42 | - name: Default 43 | uniqueID: 0 44 | locked: 0 45 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/AppboyNotificationSubscriptionType.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | 3 | namespace Appboy.Models { 4 | 5 | /// 6 | /// User opt-in states. 7 | /// 8 | public enum AppboyNotificationSubscriptionType { 9 | /// 10 | /// The user has explicitly opted-in. 11 | /// 12 | OPTED_IN = 0, 13 | /// 14 | /// The user is subscribed but has not explicitly opted-in. 15 | /// 16 | SUBSCRIBED = 1, 17 | /// 18 | /// The user is unsubscribed or has opted-out. 19 | /// 20 | UNSUBSCRIBED = 2 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/EnumUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Appboy.Utilities { 4 | public class EnumUtils { 5 | /// 6 | /// Attempts to convert the string value into the desired enum. If the conversion fails, the 7 | /// default value is returned. 8 | /// 9 | /// Note: This is a backport of the Enum.TryParse method added in .NET 4.0. 10 | /// 11 | public static object TryParse(Type enumType, string value, bool ignoreCase, object defaultValue) { 12 | try { 13 | return Enum.Parse(enumType, value, ignoreCase); 14 | } catch { 15 | return defaultValue; 16 | } 17 | } 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /Assets/Plugins/iOS/AppboyBinding.m.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d8698a753c434f0bb044c5188ae325b 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Any: 16 | second: 17 | enabled: 0 18 | settings: {} 19 | - first: 20 | Editor: Editor 21 | second: 22 | enabled: 0 23 | settings: 24 | DefaultValueInitialized: true 25 | - first: 26 | iPhone: iOS 27 | second: 28 | enabled: 1 29 | settings: 30 | AddToEmbeddedBinaries: false 31 | userData: 32 | assetBundleName: 33 | assetBundleVariant: 34 | -------------------------------------------------------------------------------- /Assets/Plugins/iOS/AppboyAppDelegate.mm.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e0c5b0ac8376d43169f39c3ec64fa59d 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Any: 16 | second: 17 | enabled: 0 18 | settings: {} 19 | - first: 20 | Editor: Editor 21 | second: 22 | enabled: 0 23 | settings: 24 | DefaultValueInitialized: true 25 | - first: 26 | iPhone: iOS 27 | second: 28 | enabled: 1 29 | settings: 30 | AddToEmbeddedBinaries: false 31 | userData: 32 | assetBundleName: 33 | assetBundleVariant: 34 | -------------------------------------------------------------------------------- /Assets/Plugins/iOS/AppboyUnityManager.h.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2dfee21ca0e9047f0937540ee9afbc3f 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Any: 16 | second: 17 | enabled: 0 18 | settings: {} 19 | - first: 20 | Editor: Editor 21 | second: 22 | enabled: 0 23 | settings: 24 | DefaultValueInitialized: true 25 | - first: 26 | iPhone: iOS 27 | second: 28 | enabled: 1 29 | settings: 30 | AddToEmbeddedBinaries: false 31 | userData: 32 | assetBundleName: 33 | assetBundleVariant: 34 | -------------------------------------------------------------------------------- /Assets/Plugins/iOS/AppboyUnityManager.mm.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 39b37507140ab4c11a935cae13ec4688 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Any: 16 | second: 17 | enabled: 0 18 | settings: {} 19 | - first: 20 | Editor: Editor 21 | second: 22 | enabled: 0 23 | settings: 24 | DefaultValueInitialized: true 25 | - first: 26 | iPhone: iOS 27 | second: 28 | enabled: 1 29 | settings: 30 | AddToEmbeddedBinaries: false 31 | userData: 32 | assetBundleName: 33 | assetBundleVariant: 34 | -------------------------------------------------------------------------------- /Assets/Plugins/Android/appboy.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bb4cc678dc9b04ccebb014d4a9770f52 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Android: Android 16 | second: 17 | enabled: 1 18 | settings: 19 | CPU: ARMv7 20 | - first: 21 | Any: 22 | second: 23 | enabled: 0 24 | settings: {} 25 | - first: 26 | Editor: Editor 27 | second: 28 | enabled: 0 29 | settings: 30 | CPU: AnyCPU 31 | DefaultValueInitialized: true 32 | OS: AnyOS 33 | userData: 34 | assetBundleName: 35 | assetBundleVariant: 36 | -------------------------------------------------------------------------------- /Assets/Plugins/Android/appboy-ui.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4a061ca2e6d7140e288f46acaa1e021b 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Android: Android 16 | second: 17 | enabled: 1 18 | settings: 19 | CPU: ARMv7 20 | - first: 21 | Any: 22 | second: 23 | enabled: 0 24 | settings: {} 25 | - first: 26 | Editor: Editor 27 | second: 28 | enabled: 0 29 | settings: 30 | CPU: AnyCPU 31 | DefaultValueInitialized: true 32 | OS: AnyOS 33 | userData: 34 | assetBundleName: 35 | assetBundleVariant: 36 | -------------------------------------------------------------------------------- /Assets/Plugins/Android/appboy-unity.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f2f921570d66b47fb80cbe948971bcfa 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Android: Android 16 | second: 17 | enabled: 1 18 | settings: 19 | CPU: ARMv7 20 | - first: 21 | Any: 22 | second: 23 | enabled: 0 24 | settings: {} 25 | - first: 26 | Editor: Editor 27 | second: 28 | enabled: 0 29 | settings: 30 | CPU: AnyCPU 31 | DefaultValueInitialized: true 32 | OS: AnyOS 33 | userData: 34 | assetBundleName: 35 | assetBundleVariant: 36 | -------------------------------------------------------------------------------- /Assets/Editor/Build.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | using System.IO; 4 | using UnityEditor; 5 | 6 | namespace Appboy.Editor { 7 | public static class Build { 8 | public static void ExportAllPackages() { 9 | // Create all the unity packages in one go 10 | ExportPackage_AllIosDeps(); 11 | } 12 | 13 | private static void ExportPackage_AllIosDeps() { 14 | Debug.Log("Running ExportPackage_AllIosDeps"); 15 | 16 | string[] AssetPathNames = { 17 | "Assets/Plugins/Android/appboy.aar", 18 | "Assets/Plugins/Android/appboy-ui.aar", 19 | "Assets/Plugins/Android/appboy-unity.aar", 20 | "Assets/Plugins/Appboy", 21 | "Assets/Plugins/iOS" 22 | }; 23 | AssetDatabase.ExportPackage(AssetPathNames, "unity-package/Appboy.unitypackage", ExportPackageOptions.Recurse); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/JsonUtils.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System; 6 | 7 | namespace Appboy.Utilities { 8 | public class JsonUtils { 9 | /// 10 | /// Converts a JSONObject to a Dictionary of strings. 11 | /// 12 | public static Dictionary JSONObjectToDictionary(JSONObject json) { 13 | Dictionary dictionary = new Dictionary(); 14 | if (json != null) { 15 | JSONNode.Enumerator enumerator = json.GetEnumerator(); 16 | while (enumerator.MoveNext()) { 17 | KeyValuePair entry = (KeyValuePair)enumerator.Current; 18 | dictionary.Add(entry.Key, entry.Value); 19 | } 20 | } 21 | return dictionary; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/BannerCard.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System; 3 | 4 | namespace Appboy.Models.Cards { 5 | public class BannerCard : Card { 6 | public string ImageUrl { get; private set; } 7 | // Optional 8 | public string Url { get; private set; } 9 | 10 | public string Domain { get; private set; } 11 | 12 | public BannerCard(JSONObject json) : base(json) { 13 | if (json["image"] == null) { 14 | throw new ArgumentException("Missing required field(s)."); 15 | } 16 | ImageUrl = json["image"]; 17 | if (json["url"] != null) { 18 | Url = json["url"]; 19 | } 20 | if (json["domain"] != null) { 21 | Domain = json["domain"]; 22 | } 23 | } 24 | 25 | public override string ToString() { 26 | return String.Format("BannerCard[{0}, ImageUrl={1}, Url={2}, Domain={3}]", 27 | base.ToString(), ImageUrl, Url, Domain); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/ChangeUser.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using Appboy.Utilities; 3 | using System; 4 | using System.Collections; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using UnityEngine; 8 | using UnityEngine.SceneManagement; 9 | using UnityEngine.UI; 10 | using UnityEngine.Networking; 11 | using Utilities; 12 | 13 | public class ChangeUser : MonoBehaviour { 14 | 15 | public InputField UserIDField; 16 | 17 | public void OnDoneButtonClicked() { 18 | Debug.Log(String.Format("Changing user ID to {0}", UserIDField.text)); 19 | getTokenSetAndExit(UserIDField.text); 20 | } 21 | 22 | public void OnCancelButtonClicked() { 23 | Debug.Log(String.Format(Constants.ChangeUserCancelLog)); 24 | SceneManager.LoadScene(Constants.MainMenuScene); 25 | } 26 | 27 | private void getTokenSetAndExit(string userId) { 28 | var token = "dummy_jwt_token"; 29 | Appboy.AppboyBinding.ChangeUser(userId, token); 30 | SceneManager.LoadScene(Constants.MainMenuScene); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | UnityAdsSettings: 27 | m_Enabled: 0 28 | m_InitializeOnStartup: 1 29 | m_TestMode: 0 30 | m_IosGameId: 31 | m_AndroidGameId: 32 | m_GameIds: {} 33 | m_GameId: 34 | PerformanceReportingSettings: 35 | m_Enabled: 0 36 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageSlideup.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using Appboy.Models; 4 | using Appboy.Utilities; 5 | 6 | namespace Appboy.Models.InAppMessage { 7 | public class InAppMessageSlideup : InAppMessageBase { 8 | public SlideFrom SlideupAnchor { get; set; } 9 | 10 | public bool HideChevron { get; set; } 11 | 12 | public Color? ChevronColor { get; set; } 13 | 14 | public override string ToString() { 15 | return String.Format("{0}, SlideupAnchor={1}, HideChevron={2}, ChevronColor={3}", 16 | base.ToString(), SlideupAnchor, HideChevron, ChevronColor); 17 | } 18 | 19 | public InAppMessageSlideup() { 20 | } 21 | 22 | public InAppMessageSlideup(JSONObject json) : base(json) { 23 | SlideupAnchor = (SlideFrom)EnumUtils.TryParse(typeof(SlideFrom), json[InAppMessageConstants.SlideFromKey], true, SlideFrom.BOTTOM); 24 | ChevronColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.CloseButtonColorKey]); 25 | HideChevron = json[InAppMessageConstants.HideChevronKey].AsBool; 26 | } 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/TextAnnouncementCard.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System; 3 | 4 | namespace Appboy.Models.Cards { 5 | public class TextAnnouncementCard : Card { 6 | public string Title { get; private set; } 7 | 8 | public string Description { get; private set; } 9 | // Optional 10 | public string Url { get; private set; } 11 | 12 | public string Domain { get; private set; } 13 | 14 | public TextAnnouncementCard(JSONObject json) : base(json) { 15 | if (json["title"] == null || json["description"] == null) { 16 | throw new ArgumentException("Missing required field(s)."); 17 | } 18 | Title = json["title"]; 19 | Description = json["description"]; 20 | if (json["url"] != null) { 21 | Url = json["url"]; 22 | } 23 | if (json["domain"] != null) { 24 | Domain = json["domain"]; 25 | } 26 | } 27 | 28 | public override string ToString() { 29 | return String.Format("TextAnnouncementCard[{0}, Title={1}, Description={2}, Url={3}, Domain={4}]", 30 | base.ToString(), Title, Description, Url, Domain); 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreviewPackages: 0 16 | m_EnablePackageDependencies: 0 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | oneTimeWarningShown: 0 20 | m_Registries: 21 | - m_Id: main 22 | m_Name: 23 | m_Url: https://packages.unity.com 24 | m_Scopes: [] 25 | m_IsDefault: 1 26 | m_Capabilities: 7 27 | m_UserSelectedRegistryName: 28 | m_UserAddingNewScopedRegistry: 0 29 | m_RegistryInfoDraft: 30 | m_ErrorMessage: 31 | m_Original: 32 | m_Id: 33 | m_Name: 34 | m_Url: 35 | m_Scopes: [] 36 | m_IsDefault: 0 37 | m_Capabilities: 0 38 | m_Modified: 0 39 | m_Name: 40 | m_Url: 41 | m_Scopes: 42 | - 43 | m_SelectedScopeIndex: 0 44 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/_Scenes/MainMenu.unity 10 | guid: efc303f32979b4fbcab6286ccd307510 11 | - enabled: 1 12 | path: Assets/_Scenes/ChangeUser.unity 13 | guid: 2e7803b95bbbe45999ed72c5779359d5 14 | - enabled: 1 15 | path: Assets/_Scenes/LogCustomEvent.unity 16 | guid: cc6e432aea266402983492e6980f6eca 17 | - enabled: 1 18 | path: Assets/_Scenes/LogPurchase.unity 19 | guid: 8ce813cfef4ce44779284b5a4f6b9ac4 20 | - enabled: 1 21 | path: Assets/_Scenes/SetUserField.unity 22 | guid: 385a4274d8c8c450aab7946c567221fa 23 | - enabled: 1 24 | path: Assets/_Scenes/CustomAttributesSetting.unity 25 | guid: cc7f708df01bb4368a44c2232e46f783 26 | - enabled: 1 27 | path: Assets/_Scenes/SetCustomAttributes.unity 28 | guid: 65101655a667a43a9b84b5295ff805d2 29 | - enabled: 1 30 | path: Assets/_Scenes/SetCustomAttributesArray.unity 31 | guid: a8bc8f68fb22447509ac77391774e8b0 32 | - enabled: 1 33 | path: Assets/_Scenes/FeatureFlags.unity 34 | guid: 4f4b792d184e44774a2bec2fb1ff7f23 35 | m_configObjects: {} 36 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 9 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 1 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 0 16 | m_EtcTextureFastCompressor: 2 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 5 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 1 30 | m_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/CaptionedImageCard.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System; 3 | 4 | namespace Appboy.Models.Cards { 5 | public class CaptionedImageCard : Card { 6 | public string ImageUrl { get; private set; } 7 | 8 | public string Title { get; private set; } 9 | 10 | public string Description { get; private set; } 11 | // Optional 12 | public string Url { get; private set; } 13 | 14 | public string Domain { get; private set; } 15 | 16 | public CaptionedImageCard(JSONObject json) : base(json) { 17 | if (json["image"] == null || json["title"] == null || json["description"] == null) { 18 | throw new ArgumentException("Missing required field(s)."); 19 | } 20 | ImageUrl = json["image"]; 21 | Title = json["title"]; 22 | Description = json["description"]; 23 | if (json["url"] != null) { 24 | Url = json["url"]; 25 | } 26 | if (json["domain"] != null) { 27 | Domain = json["domain"]; 28 | } 29 | } 30 | 31 | public override string ToString() { 32 | return String.Format("CaptionedImageCard:[{0}, Description={1}, ImageUrl={2}, " + 33 | "Title={3}, Url={4}, Domain={5}]", 34 | base.ToString(), Description, ImageUrl, Title, Url, Domain); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/ClassicCard.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System; 3 | 4 | namespace Appboy.Models.Cards { 5 | public class ClassicCard : Card { 6 | public string Description { get; private set; } 7 | 8 | public string ImageUrl { get; private set; } 9 | 10 | // Optional 11 | public string Title { get; private set; } 12 | 13 | public string Url { get; private set; } 14 | 15 | public string Domain { get; private set; } 16 | 17 | public ClassicCard(JSONObject json) : base(json) { 18 | if (json["description"] == null || json["image"] == null) { 19 | throw new ArgumentException("Missing required field(s)."); 20 | } 21 | Description = json["description"]; 22 | ImageUrl = json["image"]; 23 | if (json["title"] != null) { 24 | Title = json["title"]; 25 | } 26 | if (json["url"] != null) { 27 | Url = json["url"]; 28 | } 29 | if (json["domain"] != null) { 30 | Domain = json["domain"]; 31 | } 32 | } 33 | 34 | public override string ToString() { 35 | return String.Format("ClassicCard[{0}, Description={1}, ImageUrl={2}, " + 36 | "Title={3}, Url={4}, Domain={5}", 37 | base.ToString(), Description, ImageUrl, Title, Url, Domain); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /unity-samples/Assets/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CLIENT_ID 6 | 523313722967-j3g1ha142hgr57dg9qmuk9vp20v4epf4.apps.googleusercontent.com 7 | REVERSED_CLIENT_ID 8 | com.googleusercontent.apps.523313722967-j3g1ha142hgr57dg9qmuk9vp20v4epf4 9 | API_KEY 10 | AIzaSyARGytGF2tbv_7breS-qAXTTqdp-39QXbo 11 | GCM_SENDER_ID 12 | 523313722967 13 | PLIST_VERSION 14 | 1 15 | BUNDLE_ID 16 | com.appboy.unity.AppboySample 17 | PROJECT_ID 18 | kitchen-sink-cbc5d 19 | STORAGE_BUCKET 20 | kitchen-sink-cbc5d.appspot.com 21 | IS_ADS_ENABLED 22 | 23 | IS_ANALYTICS_ENABLED 24 | 25 | IS_APPINVITE_ENABLED 26 | 27 | IS_GCM_ENABLED 28 | 29 | IS_SIGNIN_ENABLED 30 | 31 | GOOGLE_APP_ID 32 | 1:523313722967:ios:b545b7f459c982976c5512 33 | DATABASE_URL 34 | https://kitchen-sink-cbc5d.firebaseio.com 35 | 36 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/GvhProjectSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/CustomAttributesSetting.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using System; 3 | using UnityEngine; 4 | using UnityEngine.SceneManagement; 5 | using UnityEngine.UI; 6 | using Utilities; 7 | 8 | public class CustomAttributesSetting : MonoBehaviour { 9 | 10 | public InputField IncrementKeyField; 11 | public InputField IncrementValueField; 12 | 13 | public void OnIncrementDoneButtonClick() { 14 | Debug.Log(String.Format("Increasing custom attribute {0} by {1}", IncrementKeyField.text, IncrementValueField.text)); 15 | if (UtilityMethods.textIsValid(IncrementValueField.text) && 16 | UtilityMethods.textIsValid(IncrementKeyField.text)) { 17 | int increment; 18 | if(UtilityMethods.ParseStringToInt(IncrementValueField.text, Constants.IncrementValueParseErrorDescription, out increment)) { 19 | Appboy.AppboyBinding.IncrementCustomUserAttribute(IncrementKeyField.text, increment); 20 | SceneManager.LoadScene(Constants.MainMenuScene); 21 | } 22 | } 23 | } 24 | 25 | public void OnSetCustomAttributesButtonClick() { 26 | SceneManager.LoadScene(Constants.SetCustomAttributesScene); 27 | } 28 | 29 | public void OnSetCustomAttributesArrayButtonClick() { 30 | SceneManager.LoadScene(Constants.SetCustomAttributesArrayScene); 31 | } 32 | 33 | public void OnBackButtonClick() { 34 | SceneManager.LoadScene(Constants.MainMenuScene); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.yml: -------------------------------------------------------------------------------- 1 | name: ✅ Feature Request 2 | description: Request New SDK Features 3 | title: '[Feature]: ' 4 | labels: ["feature-request"] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | :point_right: You can also submit feature requests in our [Public Roadmap Portal](https://dashboard.braze.com/resources/roadmap) 10 | - type: textarea 11 | id: problem 12 | attributes: 13 | label: What problem are you facing? 14 | description: Help us understand what you're unable to accomplish, or what's difficult with your integration 15 | placeholder: | 16 | ex: I am unable to accomplish XYZ today, since the SDK does not allow me to... 17 | validations: 18 | required: true 19 | - type: textarea 20 | id: workarounds 21 | attributes: 22 | label: Workarounds 23 | description: Are there any workarounds you can use? How complicated are they? 24 | validations: 25 | required: true 26 | - type: textarea 27 | id: ideal_solution 28 | attributes: 29 | label: Ideal Solution 30 | description: What would your ideal solution look like? 31 | validations: 32 | required: false 33 | - type: textarea 34 | id: other_information 35 | attributes: 36 | label: Other Information 37 | description: Any additional information you'd like to share? 38 | validations: 39 | required: false 40 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0.1 18 | m_ClothInterCollisionStiffness: 0.2 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 1 23 | m_ReuseCollisionCallbacks: 0 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ClothGravity: {x: 0, y: -9.81, z: 0} 26 | m_ContactPairsMode: 0 27 | m_BroadphaseType: 0 28 | m_WorldBounds: 29 | m_Center: {x: 0, y: 0, z: 0} 30 | m_Extent: {x: 250, y: 250, z: 250} 31 | m_WorldSubdivisions: 8 32 | m_FrictionType: 0 33 | m_EnableEnhancedDeterminism: 0 34 | m_EnableUnifiedHeightmaps: 1 35 | m_SolverType: 0 36 | m_DefaultMaxAngularSpeed: 7 37 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/ColorUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | 4 | namespace Appboy.Utilities { 5 | public class ColorUtils { 6 | 7 | // Parsing a string with hex number to color in the format of ARGB. The Hex string can be a uint or int number. 8 | public static Color? HexToColor(string hex) { 9 | if (hex != null) { 10 | int hexInt; 11 | if (int.TryParse(hex, out hexInt)) { 12 | return HexToColor(Convert.ToInt32(hexInt)); 13 | } else { 14 | // The number of hex might be a uint number and exceed the max value of int, try to parse hex to uint. 15 | uint hexUInt; 16 | if (UInt32.TryParse(hex, out hexUInt)) { 17 | return HexToColor((int)hexUInt); 18 | } else { 19 | Debug.Log( String.Format("The Hex color string {0} cannot be parsed to int. Return clear color." , hex)); 20 | } 21 | } 22 | } 23 | return null; 24 | } 25 | 26 | public static Color HexToColor(int hex) { 27 | Debug.Log( String.Format("The Hex color int is {0}.", hex)); 28 | byte A = (byte)((hex >> 24) & 0xFF); 29 | byte R = (byte)((hex >> 16) & 0xFF); 30 | byte G = (byte)((hex >> 8) & 0xFF); 31 | byte B = (byte)((hex) & 0xFF); 32 | Debug.Log( String.Format("The Hex color is a:{0} r:{1} g:{2} b:{3}.", A, R, G, B)); 33 | return new Color(R, G, B, A); 34 | } 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023 Braze, Inc. 2 | All rights reserved. 3 | 4 | * Use of source code or binaries contained within Braze’s SDKs is permitted only to enable use of the Braze platform by customers of Braze. 5 | * Modification of source code and inclusion in mobile apps is explicitly allowed provided that all other conditions are met. 6 | * Neither the name of Braze nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 7 | * Redistribution of source code or binaries is disallowed except with specific prior written permission. Any such redistribution must retain the above copyright notice, this list of conditions and the following disclaimer. 8 | 9 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 10 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Internal/BrazeInternalGameObject.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | 4 | namespace Appboy.Internal { 5 | public class BrazeInternalGameObject : MonoBehaviour { 6 | 7 | private static GameObject instance; 8 | 9 | private static GameObject Instance { 10 | get { 11 | if (instance == null) { 12 | instance = new GameObject("BrazeInternalCallback"); 13 | instance.AddComponent(); 14 | DontDestroyOnLoad(instance); 15 | } 16 | return instance; 17 | } 18 | } 19 | 20 | public static void setPushPromptResponseReceivedDelegate(PushPromptResponseReceived responseDelegate) { 21 | BrazeInternalComponent internalComponent = Instance.GetComponent(); 22 | internalComponent.setPushPromptResponseReceivedDelegate(responseDelegate); 23 | } 24 | 25 | public static void setPushTokenReceivedFromSystemDelegate(PushTokenReceivedFromSystem responseDelegate) { 26 | BrazeInternalComponent internalComponent = Instance.GetComponent(); 27 | internalComponent.setPushTokenReceivedFromSystemDelegate(responseDelegate); 28 | } 29 | 30 | public static void setInAppMessageListener(BrazeInAppMessageListener inAppMessageListener) { 31 | BrazeInternalComponent internalComponent = Instance.GetComponent(); 32 | internalComponent.iamListener = inAppMessageListener; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Appboy.Utilities; 3 | 4 | namespace Appboy.Models.InAppMessage { 5 | public class InAppMessageFactory { 6 | 7 | /// 8 | /// Builds in-app message instances from serialized in-app message objects. 9 | /// 10 | /// Use this method to create a useful model object from the in-app message string 11 | /// passed into your gameobject callback. 12 | /// 13 | /// 14 | /// The serialized in-app message object. 15 | /// 16 | /// 17 | /// An IInAppMessage instance populated by the serialized in-app message object. 18 | /// 19 | public static IInAppMessage BuildInAppMessage(string inAppMessageJSONString) { 20 | JSONObject json = InAppMessageConstants.JSONObjectFromString(inAppMessageJSONString); 21 | if (json != null) { 22 | InAppMessageType type = (InAppMessageType)EnumUtils.TryParse(typeof(InAppMessageType), json[InAppMessageConstants.TypeKey], true, InAppMessageType.SLIDEUP); 23 | switch (type) { 24 | case InAppMessageType.FULL: 25 | return new InAppMessageFull(json); 26 | case InAppMessageType.MODAL: 27 | return new InAppMessageModal(json); 28 | case InAppMessageType.SLIDEUP: 29 | default: 30 | return new InAppMessageSlideup(json); 31 | } 32 | } 33 | return null; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/IInAppMessage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | 6 | namespace Appboy.Models.InAppMessage { 7 | public interface IInAppMessage { 8 | Color? BackgroundColor { get; set; } 9 | 10 | Color? TextColor { get; set; } 11 | 12 | // The font awesome unicode string of the in-app message icon. 13 | string Icon { get; set; } 14 | 15 | // The color of the icon text. 16 | Color? IconColor { get; set; } 17 | 18 | // The color of the icon background. 19 | Color? IconBackgroundColor { get; set; } 20 | 21 | string ImageURI { get; set; } 22 | 23 | string Message { get; set; } 24 | 25 | Dictionary Extras { get; set; } 26 | 27 | ClickAction InAppClickAction { get; } 28 | 29 | string URI { get; } 30 | 31 | DismissType InAppDismissType { get; set; } 32 | 33 | // The number of seconds that should elapse before the in-app message is automatically dismissed. 34 | int Duration { get; set; } 35 | 36 | // Whether the in-app message is a test send. 37 | bool IsTestSend { get; } 38 | 39 | void LogClicked(); 40 | 41 | void LogImpression(); 42 | 43 | // Use this method for ClickAction.NEWS_FEED or ClickAction.NONE 44 | bool SetInAppClickAction(ClickAction clickAction); 45 | 46 | // Use this method for ClickAction.URI 47 | bool SetInAppClickAction(ClickAction clickAction, string uri); 48 | } 49 | } 50 | 51 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/ApplePushNotificationAlert.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace Appboy.Models { 6 | public class ApplePushNotificationAlert { 7 | public IList LocationArguments { get; set; } 8 | 9 | public string Body { get; set; } 10 | 11 | public string ActionLocationKey { get; set; } 12 | 13 | public string LocationKey { get; set; } 14 | 15 | public string LaunchImage { get; set; } 16 | 17 | public ApplePushNotificationAlert(JSONObject json) { 18 | LocationArguments = new List(); 19 | foreach (var jsonNode in json["loc-args"].AsArray) { 20 | LocationArguments.Add(jsonNode.ToString()); 21 | } 22 | Body = json["body"]; 23 | ActionLocationKey = json["action-loc-key"]; 24 | LocationKey = json["loc-key"]; 25 | LaunchImage = json["launch-image"]; 26 | } 27 | 28 | public override string ToString() { 29 | string LocationArgumentsString = "[ "; 30 | foreach (string N in LocationArguments) { 31 | if (LocationArgumentsString.Length > 2) { 32 | LocationArgumentsString += ", "; 33 | } 34 | LocationArgumentsString += N.ToString(); 35 | } 36 | LocationArgumentsString += " ]"; 37 | return String.Format("PushNotificationAlert[LocationArguments={0}, Body={1}, ActionLocationKey={2}, LocationKey={3}, LaunchImage={4}]", 38 | LocationArgumentsString, Body, ActionLocationKey, LocationKey, LaunchImage); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/appboy-ui.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4a061ca2e6d7140e288f46acaa1e021b 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | : Any 16 | second: 17 | enabled: 0 18 | settings: 19 | Exclude Android: 0 20 | Exclude Editor: 1 21 | Exclude Linux64: 1 22 | Exclude OSXUniversal: 1 23 | Exclude Win: 1 24 | Exclude Win64: 1 25 | - first: 26 | Android: Android 27 | second: 28 | enabled: 1 29 | settings: 30 | CPU: ARMv7 31 | - first: 32 | Any: 33 | second: 34 | enabled: 0 35 | settings: {} 36 | - first: 37 | Editor: Editor 38 | second: 39 | enabled: 0 40 | settings: 41 | CPU: AnyCPU 42 | DefaultValueInitialized: true 43 | OS: AnyOS 44 | - first: 45 | Standalone: Linux64 46 | second: 47 | enabled: 0 48 | settings: 49 | CPU: AnyCPU 50 | - first: 51 | Standalone: OSXUniversal 52 | second: 53 | enabled: 0 54 | settings: 55 | CPU: None 56 | - first: 57 | Standalone: Win 58 | second: 59 | enabled: 0 60 | settings: 61 | CPU: x86 62 | - first: 63 | Standalone: Win64 64 | second: 65 | enabled: 0 66 | settings: 67 | CPU: x86_64 68 | userData: 69 | assetBundleName: 70 | assetBundleVariant: 71 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/appboy.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bb4cc678dc9b04ccebb014d4a9770f52 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | : Any 16 | second: 17 | enabled: 0 18 | settings: 19 | Exclude Android: 0 20 | Exclude Editor: 1 21 | Exclude Linux64: 1 22 | Exclude OSXUniversal: 1 23 | Exclude Win: 1 24 | Exclude Win64: 1 25 | - first: 26 | Android: Android 27 | second: 28 | enabled: 1 29 | settings: 30 | CPU: ARMv7 31 | - first: 32 | Any: 33 | second: 34 | enabled: 0 35 | settings: {} 36 | - first: 37 | Editor: Editor 38 | second: 39 | enabled: 0 40 | settings: 41 | CPU: AnyCPU 42 | DefaultValueInitialized: true 43 | OS: AnyOS 44 | - first: 45 | Standalone: Linux64 46 | second: 47 | enabled: 0 48 | settings: 49 | CPU: AnyCPU 50 | - first: 51 | Standalone: OSXUniversal 52 | second: 53 | enabled: 0 54 | settings: 55 | CPU: None 56 | - first: 57 | Standalone: Win 58 | second: 59 | enabled: 0 60 | settings: 61 | CPU: x86 62 | - first: 63 | Standalone: Win64 64 | second: 65 | enabled: 0 66 | settings: 67 | CPU: x86_64 68 | userData: 69 | assetBundleName: 70 | assetBundleVariant: 71 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/appboy-unity.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f2f921570d66b47fb80cbe948971bcfa 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | : Any 16 | second: 17 | enabled: 0 18 | settings: 19 | Exclude Android: 0 20 | Exclude Editor: 1 21 | Exclude Linux64: 1 22 | Exclude OSXUniversal: 1 23 | Exclude Win: 1 24 | Exclude Win64: 1 25 | - first: 26 | Android: Android 27 | second: 28 | enabled: 1 29 | settings: 30 | CPU: ARMv7 31 | - first: 32 | Any: 33 | second: 34 | enabled: 0 35 | settings: {} 36 | - first: 37 | Editor: Editor 38 | second: 39 | enabled: 0 40 | settings: 41 | CPU: AnyCPU 42 | DefaultValueInitialized: true 43 | OS: AnyOS 44 | - first: 45 | Standalone: Linux64 46 | second: 47 | enabled: 0 48 | settings: 49 | CPU: AnyCPU 50 | - first: 51 | Standalone: OSXUniversal 52 | second: 53 | enabled: 0 54 | settings: 55 | CPU: None 56 | - first: 57 | Standalone: Win 58 | second: 59 | enabled: 0 60 | settings: 61 | CPU: x86 62 | - first: 63 | Standalone: Win64 64 | second: 65 | enabled: 0 66 | settings: 67 | CPU: x86_64 68 | userData: 69 | assetBundleName: 70 | assetBundleVariant: 71 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Utilities/CollectionUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Appboy.Utilities { 6 | public class CollectionUtils { 7 | // Serializes a string dictionary. 8 | public static string DictionaryToString(Dictionary dictionary) { 9 | if (dictionary != null && dictionary.Count > 0) { 10 | StringBuilder stringBuilder = new StringBuilder(); 11 | stringBuilder.Append("{"); 12 | foreach (KeyValuePair entry in dictionary) { 13 | stringBuilder.Append(String.Format("{0}={1},", entry.Key, entry.Value)); 14 | } 15 | if (stringBuilder.Length > 1) { 16 | stringBuilder.Length--; 17 | } 18 | stringBuilder.Append("}"); 19 | return stringBuilder.ToString(); 20 | } else { 21 | return ""; 22 | } 23 | } 24 | 25 | // Serializes a list to a string by calling ToString() on each object in the list, in the form of "[object, object, ...]". 26 | public static string ListToString(List list) { 27 | if (list != null && list.Count > 0) { 28 | StringBuilder stringBuilder = new StringBuilder(); 29 | stringBuilder.Append("["); 30 | foreach (T element in list) { 31 | stringBuilder.Append(String.Format("{0},", element.ToString())); 32 | } 33 | if (stringBuilder.Length > 1) { 34 | stringBuilder.Length--; 35 | } 36 | stringBuilder.Append("]"); 37 | return stringBuilder.ToString(); 38 | } else { 39 | return ""; 40 | } 41 | } 42 | } 43 | } 44 | 45 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Braze Logo 3 | Braze Logo 4 |

5 | 6 | Braze Unity SDK 7 | ========== 8 | 9 | This repository contains the the C# interface and native Unity functionality for the Unity plugins derived from the Braze Android and iOS SDKs. Since version 1.5.0, Braze's Unity plugins require Unity 5. See the CHANGELOG for more information. 10 | 11 | ## Plugin Setup 12 | 13 | Before you can start using Braze in Unity scripts, you'll need to import the plugin files to your Unity project. 14 | 15 | **Recommended:** The Android and iOS plugins are bundled as a Unity package available for download from the [SDK release page][1]. 16 | 17 | **Manual Plugin Setup:** Alternatively, you can copy the plugins into your Unity project: 18 | 1. First, clone this repo. 19 | 2. If you're not using any other plugins, all you have to do is copy the `Plugins` directory from this repo into the `Assets` folder of your Unity project. 20 | 3. If you already have a `//Assets/Plugins` directory (probably because you're using another plugin already), copy `Plugins/Appboy/AppboyBinding.cs` into `//Assets/Plugins`. Then copy the contents of `Plugins/iOS` and `Plugins/Android` from this repo into `//Assets/Plugins/iOS` and `//Assets/Plugins/Android` respectively. 21 | 22 | ## Integration Setup 23 | 24 | To integrate Braze into your Unity application, complete our instructions for [Integrating the Braze Unity SDK][2]. 25 | 26 | [1]: https://github.com/braze-inc/braze-unity-sdk/releases 27 | [2]: https://www.braze.com/docs/developer_guide/platforms/unity/sdk_integration 28 | -------------------------------------------------------------------------------- /unity-samples/Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ext.nunit": "1.0.6", 4 | "com.unity.ide.visualstudio": "2.0.22", 5 | "com.unity.ide.vscode": "1.2.5", 6 | "com.unity.test-framework": "1.1.33", 7 | "com.unity.ugui": "1.0.0", 8 | "com.unity.modules.ai": "1.0.0", 9 | "com.unity.modules.androidjni": "1.0.0", 10 | "com.unity.modules.animation": "1.0.0", 11 | "com.unity.modules.assetbundle": "1.0.0", 12 | "com.unity.modules.audio": "1.0.0", 13 | "com.unity.modules.cloth": "1.0.0", 14 | "com.unity.modules.director": "1.0.0", 15 | "com.unity.modules.imageconversion": "1.0.0", 16 | "com.unity.modules.imgui": "1.0.0", 17 | "com.unity.modules.jsonserialize": "1.0.0", 18 | "com.unity.modules.particlesystem": "1.0.0", 19 | "com.unity.modules.physics": "1.0.0", 20 | "com.unity.modules.physics2d": "1.0.0", 21 | "com.unity.modules.screencapture": "1.0.0", 22 | "com.unity.modules.terrain": "1.0.0", 23 | "com.unity.modules.terrainphysics": "1.0.0", 24 | "com.unity.modules.tilemap": "1.0.0", 25 | "com.unity.modules.ui": "1.0.0", 26 | "com.unity.modules.uielements": "1.0.0", 27 | "com.unity.modules.umbra": "1.0.0", 28 | "com.unity.modules.unityanalytics": "1.0.0", 29 | "com.unity.modules.unitywebrequest": "1.0.0", 30 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 31 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 32 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 33 | "com.unity.modules.unitywebrequestwww": "1.0.0", 34 | "com.unity.modules.vehicles": "1.0.0", 35 | "com.unity.modules.video": "1.0.0", 36 | "com.unity.modules.vr": "1.0.0", 37 | "com.unity.modules.wind": "1.0.0", 38 | "com.unity.modules.xr": "1.0.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | xcuserdata 3 | !xcshareddata 4 | 5 | # Logs 6 | Logs/ 7 | 8 | # Release folder 9 | Public/unity-samples/ 10 | Public/Libraries/ 11 | Public/Plugins/ 12 | Public/Assets/ 13 | Public/scripts/ 14 | 15 | # Unity 16 | UnityPackageManager/ 17 | /Packages 18 | /Temp 19 | /Library 20 | /UserSettings 21 | *.dwlt 22 | ## https://stackoverflow.com/a/57728803/3745724 23 | 24 | # Firebase 25 | /unity-samples/Assets/Plugins/Android/*.aar 26 | !/unity-samples/Assets/Plugins/Android/appboy*.aar 27 | *.jar 28 | *.so 29 | 30 | # Generated resources 31 | /unity-package 32 | /Assets/Resources* 33 | /Assembly*csproj 34 | /Appboy*csproj 35 | /*sln 36 | 37 | # Scripts 38 | scripts/build 39 | 40 | # Sample app 41 | unity-samples/*.sln 42 | unity-samples/Assembly*csproj 43 | **xcuserdata** 44 | unity-samples/Temp/ 45 | unity-samples/Obj/ 46 | unity-samples/UnityGenerated/ 47 | unity-samples/Library/ 48 | unity-samples/Builds/ 49 | unity-samples/build/ 50 | # Only keep one file in the Data and Libraries to keep the Data folder. 51 | # Unity won't append the built project if there isn't a Data and Libraries folders. 52 | unity-samples/iOS/Auto-Integrate-Sample/* 53 | unity-samples/iOS/Manual-Integrate-Sample/* 54 | !unity-samples/iOS/Manual-Integrate-Sample/Classes/UnityAppController.mm 55 | *.apk 56 | unity-samples/UnityPackageManager/ 57 | unity-samples/Logs/ 58 | unity-samples/.idea/ 59 | 60 | # OS generated 61 | .DS_Store 62 | .DS_Store? 63 | ._* 64 | .Spotlight-V100 65 | .Trashes 66 | Icon? 67 | ehthumbs.db 68 | Thumbs.db 69 | 70 | # emacs temporary files 71 | *~ 72 | 73 | # Tests 74 | unity-samples/Assets/test-results/ 75 | resultsAndroid.xml 76 | resultsIos.xml 77 | unity-samples/Assets/UnityTestTools/ 78 | unity-samples/test-results/ 79 | 80 | # Visual Studio 81 | .vs/ 82 | obj/ 83 | .vscode/ 84 | .vsconfig 85 | 86 | obj.meta 87 | unity-samples/UserSettings/ 88 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/BrazeInAppMessageListener.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Appboy.Models.InAppMessage; 3 | 4 | namespace Appboy { 5 | 6 | /// 7 | /// A listener for in-app messages UI events. 8 | /// In order to receive events, the listener instance must set on 9 | /// AppboyBinding.inAppMessageListener 10 | /// 11 | /// Usage: 12 | /// 13 | /// // Create listener + add some handlers 14 | /// BrazeInAppMessageListener listener = new BrazeInAppMessageListener(); 15 | /// listener.OnInAppMessageDismissed = delegate(IInAppMessage message) { 16 | /// Console.WriteLine(message); 17 | /// }; 18 | /// listener.OnInAppMessageClicked = delegate(IInAppMessage message) { 19 | /// Console.WriteLine(message); 20 | /// }; 21 | /// 22 | /// // Set listener on AppboyBinding to start receiving events. 23 | /// AppboyBinding.inAppMessageListener = listener; 24 | /// 25 | /// 26 | public class BrazeInAppMessageListener { 27 | 28 | /// 29 | /// Delegate executed before an in-app message is displayed. 30 | /// 31 | public Action BeforeInAppMessageDisplayed; 32 | 33 | /// 34 | /// Delegate executed whenever an in-app message is dismissed without a click. 35 | /// 36 | public Action OnInAppMessageDismissed; 37 | 38 | /// 39 | /// Delegate executed whenever an in-app message is clicked. 40 | /// 41 | public Action OnInAppMessageClicked; 42 | 43 | /// 44 | /// Delegate executed whenever an in-app message button is clicked. 45 | /// 46 | public Action OnInAppMessageButtonClicked; 47 | 48 | /// 49 | /// Delegate executed whenever an HTML in-app message is clicked. 50 | /// 51 | public Action OnInAppMessageHTMLClicked; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /unity-samples/Assets/_Scenes/SetCustomAttributesArraySettings.lighting: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!850595691 &4890085278179872738 4 | LightingSettings: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: SetCustomAttributesArraySettings 10 | serializedVersion: 4 11 | m_GIWorkflowMode: 1 12 | m_EnableBakedLightmaps: 1 13 | m_EnableRealtimeLightmaps: 0 14 | m_RealtimeEnvironmentLighting: 1 15 | m_BounceScale: 1 16 | m_AlbedoBoost: 1 17 | m_IndirectOutputScale: 1 18 | m_UsingShadowmask: 0 19 | m_BakeBackend: 0 20 | m_LightmapMaxSize: 1024 21 | m_BakeResolution: 50 22 | m_Padding: 2 23 | m_LightmapCompression: 0 24 | m_AO: 0 25 | m_AOMaxDistance: 1 26 | m_CompAOExponent: 0 27 | m_CompAOExponentDirect: 0 28 | m_ExtractAO: 0 29 | m_MixedBakeMode: 1 30 | m_LightmapsBakeMode: 1 31 | m_FilterMode: 1 32 | m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} 33 | m_ExportTrainingData: 0 34 | m_TrainingDataDestination: TrainingData 35 | m_RealtimeResolution: 1 36 | m_ForceWhiteAlbedo: 0 37 | m_ForceUpdates: 0 38 | m_FinalGather: 0 39 | m_FinalGatherRayCount: 1024 40 | m_FinalGatherFiltering: 1 41 | m_PVRCulling: 1 42 | m_PVRSampling: 1 43 | m_PVRDirectSampleCount: 32 44 | m_PVRSampleCount: 512 45 | m_PVREnvironmentSampleCount: 512 46 | m_PVREnvironmentReferencePointCount: 2048 47 | m_LightProbeSampleCountMultiplier: 4 48 | m_PVRBounces: 2 49 | m_PVRMinBounces: 2 50 | m_PVREnvironmentMIS: 0 51 | m_PVRFilteringMode: 0 52 | m_PVRDenoiserTypeDirect: 0 53 | m_PVRDenoiserTypeIndirect: 0 54 | m_PVRDenoiserTypeAO: 0 55 | m_PVRFilterTypeDirect: 0 56 | m_PVRFilterTypeIndirect: 0 57 | m_PVRFilterTypeAO: 0 58 | m_PVRFilteringGaussRadiusDirect: 1 59 | m_PVRFilteringGaussRadiusIndirect: 5 60 | m_PVRFilteringGaussRadiusAO: 2 61 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 62 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 63 | m_PVRFilteringAtrousPositionSigmaAO: 1 64 | m_PVRTiledBaking: 0 65 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.yml: -------------------------------------------------------------------------------- 1 | name: 🐞 Bug report 2 | description: File a Bug Report for unexpected or incorrect SDK Behavior 3 | title: '[Bug]: ' 4 | labels: ["bug"] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thanks for taking the time to fill out this bug report! 10 | 11 | :warning: Please consider contacting [Braze Support](https://www.braze.com/docs/support_contact) for in-depth troubleshooting and to avoid leaking private information to our public Github issues. 12 | - type: input 13 | id: sdk_version 14 | attributes: 15 | label: Braze Unity SDK Version 16 | placeholder: ex. 3.8.0 17 | validations: 18 | required: true 19 | - type: textarea 20 | id: repro_steps 21 | attributes: 22 | label: Steps To Reproduce 23 | description: Please provide a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) 24 | placeholder: | 25 | Example: 26 | ``` 27 | 28 | ``` 29 | validations: 30 | required: true 31 | - type: textarea 32 | id: expected_behavior 33 | attributes: 34 | label: Expected Behavior 35 | description: What did you expect to happen? 36 | validations: 37 | required: true 38 | - type: textarea 39 | id: actual_behavior 40 | attributes: 41 | label: Actual Incorrect Behavior 42 | description: What incorrect behavior happened instead? 43 | validations: 44 | required: true 45 | - type: textarea 46 | id: verbose_logs 47 | attributes: 48 | label: Verbose Logs 49 | description: Please copy and paste verbose log output. This will be automatically formatted into code, so no need for backticks. For Android, enable [Android Verbose Logging](https://www.braze.com/docs/developer_guide/platform_integration_guides/android/initial_sdk_setup/additional_customization_and_configuration/#android-verbose-logging). 50 | render: shell 51 | - type: textarea 52 | id: other_info 53 | attributes: 54 | label: Additional Information 55 | description: Anything else you'd like to share? 56 | -------------------------------------------------------------------------------- /unity-samples/Assets/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "901477453852", 4 | "firebase_url": "https://androidgcmsender.firebaseio.com", 5 | "project_id": "androidgcmsender", 6 | "storage_bucket": "androidgcmsender.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:901477453852:android:05411feb1511b551", 12 | "android_client_info": { 13 | "package_name": "com.appboy.unity.AppboySample" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "901477453852-4k1e9ehf8s8pqne5hcesfek4voim2d67.apps.googleusercontent.com", 19 | "client_type": 3 20 | } 21 | ], 22 | "api_key": [ 23 | { 24 | "current_key": "AIzaSyDYvseENe5UlXILj32yYFPhiUawZbG8Y40" 25 | } 26 | ], 27 | "services": { 28 | "appinvite_service": { 29 | "other_platform_oauth_client": [ 30 | { 31 | "client_id": "901477453852-4k1e9ehf8s8pqne5hcesfek4voim2d67.apps.googleusercontent.com", 32 | "client_type": 3 33 | } 34 | ] 35 | } 36 | } 37 | }, 38 | { 39 | "client_info": { 40 | "mobilesdk_app_id": "1:901477453852:android:05411feb1511b551", 41 | "android_client_info": { 42 | "package_name": "com.unity3d.player" 43 | } 44 | }, 45 | "oauth_client": [ 46 | { 47 | "client_id": "901477453852-4k1e9ehf8s8pqne5hcesfek4voim2d67.apps.googleusercontent.com", 48 | "client_type": 3 49 | } 50 | ], 51 | "api_key": [ 52 | { 53 | "current_key": "AIzaSyDYvseENe5UlXILj32yYFPhiUawZbG8Y40" 54 | } 55 | ], 56 | "services": { 57 | "appinvite_service": { 58 | "other_platform_oauth_client": [ 59 | { 60 | "client_id": "901477453852-4k1e9ehf8s8pqne5hcesfek4voim2d67.apps.googleusercontent.com", 61 | "client_type": 3 62 | } 63 | ] 64 | } 65 | } 66 | } 67 | ], 68 | "configuration_version": "1" 69 | } 70 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /unity-samples/Assets/Plugins/Android/mainTemplate.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | **APPLY_PLUGINS** 3 | 4 | dependencies { 5 | implementation fileTree(dir: 'libs', include: ['*.jar']) 6 | implementation 'com.google.firebase:firebase-messaging:22.0.0' 7 | implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" 8 | implementation "androidx.recyclerview:recyclerview:1.2.1" 9 | implementation "org.jetbrains.kotlin:kotlin-stdlib:2.0.20" 10 | implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1" 11 | implementation 'androidx.core:core:1.6.0' 12 | **DEPS**} 13 | 14 | android { 15 | compileSdkVersion **APIVERSION** 16 | buildToolsVersion '**BUILDTOOLS**' 17 | 18 | compileOptions { 19 | sourceCompatibility JavaVersion.VERSION_1_8 20 | targetCompatibility JavaVersion.VERSION_1_8 21 | } 22 | 23 | defaultConfig { 24 | minSdkVersion **MINSDKVERSION** 25 | targetSdkVersion **TARGETSDKVERSION** 26 | ndk { 27 | abiFilters **ABIFILTERS** 28 | } 29 | versionCode **VERSIONCODE** 30 | versionName '**VERSIONNAME**' 31 | consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD** 32 | } 33 | 34 | lintOptions { 35 | abortOnError false 36 | } 37 | 38 | aaptOptions { 39 | noCompress = **BUILTIN_NOCOMPRESS** + unityStreamingAssets.tokenize(', ') 40 | ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~" 41 | }**PACKAGING_OPTIONS** 42 | }**REPOSITORIES** 43 | **IL_CPP_BUILD_SETUP** 44 | **SOURCE_BUILD_SETUP** 45 | **EXTERNAL_SOURCES** 46 | 47 | configurations { 48 | compileClasspath 49 | } 50 | 51 | buildscript { 52 | repositories { 53 | google() 54 | mavenCentral() 55 | } 56 | dependencies { 57 | classpath "com.google.gms:google-services:4.3.4" 58 | } 59 | } 60 | 61 | apply plugin: 'com.google.gms.google-services' 62 | 63 | task copyGoogleServicesJson(type: Copy) { 64 | def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/") 65 | from unityProjectPath + '/Assets/google-services.json' 66 | into projectDir 67 | } 68 | 69 | preBuild.dependsOn(copyGoogleServicesJson) 70 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Feed.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Models.Cards; 2 | using Appboy.Utilities; 3 | using System; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | 7 | namespace Appboy.Models { 8 | public class Feed { 9 | public List Cards { get; private set; } 10 | 11 | public int Count { 12 | get { return Cards.Count; } 13 | } 14 | 15 | public bool IsFromOfflineStorage { get; private set; } 16 | 17 | public Feed(string message) { 18 | if (String.IsNullOrEmpty(message)) { 19 | throw new ArgumentException("Message cannot be null or empty.", "message"); 20 | } 21 | Cards = new List(); 22 | JSONObject json; 23 | try { 24 | json = (JSONObject)JSON.Parse(message); 25 | if (json["mFeedCards"] != null) { 26 | JSONArray jsonArray = (JSONArray)JSON.Parse(json["mFeedCards"].ToString()); 27 | Debug.Log(String.Format("Parsing News Feed card array of size {0}.", jsonArray.Count)); 28 | 29 | for (int i = 0; i < jsonArray.Count; i++) { 30 | JSONObject cardJson = jsonArray[i].AsObject; 31 | try { 32 | Debug.Log(String.Format("Parsing card with json: {0}", cardJson)); 33 | Card card = Feed.CreateCardFromJson(cardJson); 34 | if (card != null) { 35 | Cards.Add(card); 36 | } 37 | } catch { 38 | Debug.Log(String.Format("Unable to parse card from json: {0}", cardJson)); 39 | } 40 | } 41 | } 42 | } catch { 43 | throw new ArgumentException("Could not parse News Feed json."); 44 | } 45 | 46 | IsFromOfflineStorage = json["mFromOfflineStorage"].AsBool; 47 | } 48 | 49 | private static Card CreateCardFromJson(JSONObject json) { 50 | string type = json["type"]; 51 | switch (type) { 52 | case "banner_image": 53 | return new BannerCard(json); 54 | case "captioned_image": 55 | return new CaptionedImageCard(json); 56 | case "short_news": 57 | return new ClassicCard(json); 58 | case "text_announcement": 59 | return new TextAnnouncementCard(json); 60 | default: 61 | return null; 62 | } 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 0 46 | m_AutoSyncTransforms: 1 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageConstants.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Appboy.Utilities; 3 | using UnityEngine; 4 | 5 | namespace Appboy.Models.InAppMessage { 6 | public class InAppMessageConstants { 7 | // In-app message base 8 | public const string MessageKey = "message"; 9 | public const string ExtrasKey = "extras"; 10 | public const string ClickActionKey = "click_action"; 11 | public const string URIKey = "uri"; 12 | public const string ImageURLKey = "image_url"; 13 | public const string DismissTypeKey = "message_close"; 14 | public const string DurationKey = "duration"; 15 | public const string BackgroundColorKey = "bg_color"; 16 | public const string TextColorKey = "text_color"; 17 | public const string IconKey = "icon"; 18 | public const string IconColorKey = "icon_color"; 19 | public const string IconBackgroundColorKey = "icon_bg_color"; 20 | public const string TypeKey = "type"; 21 | public const string IsTestSendKey = "is_test_send"; 22 | 23 | // In-app message immersive 24 | public const string HeaderKey = "header"; 25 | public const string HeaderTextColorKey = "header_text_color"; 26 | public const string CloseButtonColorKey = "close_btn_color"; 27 | public const string ButtonsKey = "btns"; 28 | 29 | // In-app message slideup 30 | public const string SlideFromKey = "slide_from"; 31 | public const string HideChevronKey = "hide_chevron"; 32 | 33 | // In-app message buttons 34 | public const string ButtonIDKey = "id"; 35 | public const string ButtonTextKey = "text"; 36 | public const string ButtonTextColorKey = "text_color"; 37 | public const string ButtonBackgroundColorKey = "bg_color"; 38 | public const string ButtonURIKey = "uri"; 39 | public const string ButtonClickActionKey = "click_action"; 40 | 41 | // Safe wrapper for JSON.Parse 42 | public static JSONObject JSONObjectFromString(string JSONString) { 43 | if (String.IsNullOrEmpty(JSONString)) { 44 | Debug.Log("JSON string was null or empty."); 45 | } 46 | JSONObject json = null; 47 | try { 48 | json = (JSONObject)JSON.Parse(JSONString); 49 | } catch { 50 | Debug.Log(String.Format("Could not parse JSON {0}.", JSONString)); 51 | } 52 | return json; 53 | } 54 | } 55 | } 56 | 57 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/LogCustomEvent.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using System; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using UnityEngine.SceneManagement; 6 | using UnityEngine.UI; 7 | using Utilities; 8 | 9 | public class LogCustomEvent : MonoBehaviour { 10 | 11 | public InputField CustomEventField; 12 | public InputField CustomEventPropertiesKeyField; 13 | public InputField CustomEventPropertiesValueField; 14 | public Dictionary CustomEventProperties; 15 | 16 | public void OnDoneButtonClick() { 17 | Debug.Log(String.Format("Logging custom event {0}", CustomEventField.text)); 18 | if (CustomEventProperties == null) { 19 | Appboy.AppboyBinding.LogCustomEvent(CustomEventField.text); 20 | } else { 21 | Appboy.AppboyBinding.LogCustomEvent(CustomEventField.text, CustomEventProperties); 22 | } 23 | SceneManager.LoadScene(Constants.MainMenuScene); 24 | } 25 | 26 | public void OnCancelButtonClick() { 27 | Debug.Log(String.Format(Constants.CustomEventCancelLog)); 28 | SceneManager.LoadScene(Constants.MainMenuScene); 29 | } 30 | 31 | public void AddTestPropertiesButtonClick() { 32 | if (CustomEventProperties == null) { 33 | CustomEventProperties = new Dictionary (); 34 | } 35 | 36 | CustomEventProperties["intprop"] = 1; 37 | CustomEventProperties["doubleprop"] = 1.2D; 38 | CustomEventProperties["floatprop"] = 1.2F; 39 | CustomEventProperties["testcoercion"] = "11"; 40 | CustomEventProperties["dateprop"] = DateTime.Today; 41 | CustomEventProperties["boolprop"] = true; 42 | CustomEventProperties["nullprop"] = null; 43 | CustomEventProperties["objprop"] = new object(); 44 | } 45 | 46 | public void AddPropertyButtonClick() { 47 | if (!UtilityMethods.textIsValid (CustomEventPropertiesKeyField.text) || 48 | !UtilityMethods.textIsValid (CustomEventPropertiesValueField.text)) { 49 | Debug.Log ("Key and value must be valid strings."); 50 | return; 51 | } 52 | Debug.Log(String.Format("Add Property {0} : {1}", CustomEventPropertiesKeyField.text, CustomEventPropertiesValueField.text)); 53 | if (CustomEventProperties == null) { 54 | CustomEventProperties = new Dictionary (); 55 | } 56 | CustomEventProperties.Add(CustomEventPropertiesKeyField.text, CustomEventPropertiesValueField.text); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Appboy.Models; 3 | using UnityEngine; 4 | using Appboy.Utilities; 5 | 6 | namespace Appboy.Models.InAppMessage { 7 | public class InAppMessageButton { 8 | public int ButtonID { get; private set;} 9 | public string Text { get; set; } 10 | public string URI { get; private set; } 11 | public ClickAction ButtonClickAction { get; private set; } 12 | public Color? TextColor { get; set; } 13 | public Color? BackgroundColor { get; set; } 14 | 15 | public override string ToString() { 16 | return String.Format("In-App Message Button: ButtonID={0}, Text={1}, URI={2}, ButtonClickAction={3}, TextColor={4}, BackgroundColor={5}", 17 | ButtonID, Text, URI, ButtonClickAction, TextColor, BackgroundColor); 18 | } 19 | 20 | public InAppMessageButton() { 21 | } 22 | 23 | public InAppMessageButton(JSONObject json) { 24 | ButtonID = json[InAppMessageConstants.ButtonIDKey].AsInt; 25 | Text = json[InAppMessageConstants.ButtonTextKey]; 26 | TextColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.ButtonTextColorKey]); 27 | BackgroundColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.ButtonBackgroundColorKey]); 28 | URI = json[InAppMessageConstants.ButtonURIKey]; 29 | ButtonClickAction = (ClickAction)EnumUtils.TryParse(typeof(ClickAction), json[InAppMessageConstants.ButtonClickActionKey], true, ClickAction.NEWS_FEED); 30 | if (ButtonClickAction == ClickAction.URI && URI == null) { 31 | Debug.Log("Required URI not present for URI click action type. Setting click action to NONE."); 32 | ButtonClickAction = ClickAction.NONE; 33 | } 34 | } 35 | 36 | public bool SetButtonClickAction(ClickAction clickAction) { 37 | if (clickAction != ClickAction.URI) { 38 | ButtonClickAction = clickAction; 39 | URI = null; 40 | return true; 41 | } else { 42 | Debug.Log("A non-null URI is required for ClickAction.URI."); 43 | return false; 44 | } 45 | } 46 | 47 | public bool SetButtonClickAction(ClickAction clickAction, string uri) { 48 | if (uri != null && clickAction == ClickAction.URI) { 49 | ButtonClickAction = clickAction; 50 | URI = uri; 51 | return true; 52 | } else { 53 | return SetButtonClickAction(clickAction); 54 | } 55 | } 56 | } 57 | } 58 | 59 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageImmersiveBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Appboy.Utilities; 3 | using UnityEngine; 4 | using System.Collections.Generic; 5 | 6 | namespace Appboy.Models.InAppMessage { 7 | public abstract class InAppMessageImmersiveBase : InAppMessageBase, IInAppMessageImmersive { 8 | private bool _buttonClickLogged = false; 9 | 10 | public string Header { get; set; } 11 | 12 | public Color? HeaderTextColor { get; set; } 13 | 14 | public Color? CloseButtonColor { get; set; } 15 | 16 | public List Buttons { get; set; } 17 | 18 | public override string ToString() { 19 | return String.Format("{0}, Header={1}, HeaderTextColor={2}, CloseButtonColor={3}, Buttons{4}", 20 | base.ToString(), Header, HeaderTextColor, CloseButtonColor, CollectionUtils.ListToString(Buttons)); 21 | } 22 | 23 | protected InAppMessageImmersiveBase() { 24 | } 25 | 26 | public InAppMessageImmersiveBase(JSONObject json) : base(json) { 27 | Header = json[InAppMessageConstants.HeaderKey]; 28 | HeaderTextColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.HeaderTextColorKey]); 29 | CloseButtonColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.CloseButtonColorKey]); 30 | 31 | if (json[InAppMessageConstants.ButtonsKey] != null) { 32 | Buttons = new List(); 33 | JSONArray jsonArray = (JSONArray)JSON.Parse(json[InAppMessageConstants.ButtonsKey].ToString()); 34 | Debug.Log(String.Format("Parsing in-app message with {0} buttons", jsonArray.Count)); 35 | for (int i = 0; i < jsonArray.Count; i++) { 36 | JSONObject buttonJson = jsonArray[i].AsObject; 37 | try { 38 | Debug.Log(String.Format("Button no. {0} json string is {1}", i, buttonJson)); 39 | InAppMessageButton button = new InAppMessageButton(buttonJson); 40 | if (button != null) { 41 | Buttons.Add(button); 42 | } 43 | } catch { 44 | Debug.Log(String.Format("Unable to parse button from {0}", buttonJson)); 45 | } 46 | } 47 | } 48 | } 49 | 50 | public void LogButtonClicked(int buttonID) { 51 | if (!_buttonClickLogged) { 52 | _buttonClickLogged = true; 53 | AppboyBinding.LogInAppMessageButtonClicked(_jsonString, buttonID); 54 | } else { 55 | Debug.Log("Already logged a button click. Doing nothing."); 56 | } 57 | } 58 | } 59 | } 60 | 61 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} 40 | - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} 41 | m_PreloadedShaders: [] 42 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 43 | type: 0} 44 | m_CustomRenderPipeline: {fileID: 0} 45 | m_TransparencySortMode: 0 46 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 47 | m_DefaultRenderingPath: 1 48 | m_DefaultMobileRenderingPath: 1 49 | m_TierSettings: [] 50 | m_LightmapStripping: 0 51 | m_FogStripping: 0 52 | m_InstancingStripping: 0 53 | m_LightmapKeepPlain: 1 54 | m_LightmapKeepDirCombined: 1 55 | m_LightmapKeepDynamicPlain: 1 56 | m_LightmapKeepDynamicDirCombined: 1 57 | m_LightmapKeepShadowMask: 1 58 | m_LightmapKeepSubtractive: 1 59 | m_FogKeepLinear: 1 60 | m_FogKeepExp: 1 61 | m_FogKeepExp2: 1 62 | m_AlbedoSwatchInfos: [] 63 | m_LightsUseLinearIntensity: 0 64 | m_LightsUseColorTemperature: 0 65 | m_LogWhenShaderIsCompiled: 0 66 | m_AllowEnlightenSupportForUpgradedProject: 1 67 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Tests/ApplePushNotificationTester.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections.Generic; 3 | using Appboy.Models; 4 | using Appboy.Utilities; 5 | 6 | public class ApplePushNotificationTester : MonoBehaviour { 7 | 8 | // Use this for initialization 9 | void Start() { 10 | // test the normal aps dictionary that Apple defines 11 | string JSONString = @"{""alert"" : 12 | {""body"" : ""This is a push notification message."", 13 | ""action-loc-key"" : ""slide to open"", 14 | ""loc-key"" : ""Welcome to the game!"", 15 | ""loc-args"" : [""Jenna"", ""Frank"", ""Elena""], 16 | ""launch-image"" : ""launchFromPushImage.png""}, 17 | ""badge"" : 9, 18 | ""sound"" : ""pushNotificationSoundFile"", 19 | ""content-available"" : 3}"; 20 | 21 | JSONObject pushNotificationJson = (JSONObject)JSON.Parse(JSONString); 22 | ApplePushNotification pushNotification = new ApplePushNotification(pushNotificationJson); 23 | Debug.Log("Push Notification event(aps): " + pushNotification); 24 | 25 | // test the arbitrary dictionary that developer can pass in push notification 26 | JSONString = "{\"extra\" : {\"intKey\" : 12," 27 | + "\"floatKey\" : 13.356," 28 | + "\"doubleKey\" : 3.1415926535897," 29 | + "\"arrayKey\" : [\"a string\", 3, 3.3335, {\"subkey\" : \"subdictionary\"}]," 30 | + "\"dictionaryKey\" : {\"levelTwoIntKey\" : 212, " 31 | + "\"levelTwoFloatKey\" : 213.356," 32 | + "\"levelTwoDoubleKey\" : 23.1415926535897," 33 | + "\"levelTwoArrayKey\" : [\"a level 3 string\", 33, 33.3335, {\"subsubkey\" : \"subsubdictionary\"}]}}}"; 34 | pushNotificationJson = (JSONObject)JSON.Parse(JSONString); 35 | pushNotification = new ApplePushNotification(pushNotificationJson); 36 | 37 | string ExtraString = "{"; 38 | foreach (KeyValuePair N in pushNotification.Extra) { 39 | ExtraString += N.Key + " : "; 40 | ExtraString += this.PrintOutObjectValues(N.Value) + ", "; 41 | } 42 | ExtraString += "}"; 43 | Debug.Log("Push Notification event(extra): " + ExtraString); 44 | } 45 | 46 | public string PrintOutObjectValues(object o) { 47 | if (o is IList) { 48 | string ListString = "["; 49 | foreach (object ArrayObject in (IList)o) { 50 | ListString += this.PrintOutObjectValues(ArrayObject) + ", "; 51 | } 52 | return ListString + "], "; 53 | } 54 | 55 | if (o is IDictionary) { 56 | string DictionaryString = "{"; 57 | foreach (KeyValuePair Pair in (IDictionary)o) { 58 | DictionaryString += Pair.Key + " : "; 59 | DictionaryString += this.PrintOutObjectValues(Pair.Value) + ", "; 60 | } 61 | return DictionaryString + "},"; 62 | } 63 | 64 | return o.ToString(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/TrackingPropertyAllowList.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Appboy.Models { 4 | /// 5 | /// The list of properties to be collected for tracking users (default: an empty list). 6 | /// The SDK will route collection of any of these data into a separate tracking endpoint, which must be declared in the privacy manifest. 7 | /// 8 | public class TrackingPropertyAllowList { 9 | /// 10 | /// Tracking properties you wish to add to your allowlist. 11 | /// 12 | public List Adding { get; set; } 13 | 14 | /// 15 | /// Tracking properties you wish to remove from your allowlist. 16 | /// 17 | public List Removing { get; set; } 18 | 19 | /// 20 | /// Custom event strings you wish to add to your current allowlist. 21 | /// 22 | public List AddingCustomEvents { get; set; } 23 | 24 | /// 25 | /// Custom event strings you wish to remove from your current allowlist. 26 | /// 27 | public List RemovingCustomEvents { get; set; } 28 | 29 | /// 30 | /// Custom attribute strings you wish to add to your current allowlist. 31 | /// 32 | public List AddingCustomAttributes { get; set; } 33 | 34 | /// 35 | /// Custom attribute strings you wish to remove from your current allowlist. 36 | /// 37 | public List RemovingCustomAttributes { get; set; } 38 | 39 | /// 40 | /// Initializes a new instance of the class. 41 | /// 42 | public TrackingPropertyAllowList() 43 | { 44 | Adding = new List(); 45 | Removing = new List(); 46 | AddingCustomEvents = new List(); 47 | RemovingCustomEvents = new List(); 48 | AddingCustomAttributes = new List(); 49 | RemovingCustomAttributes = new List(); 50 | } 51 | 52 | /// 53 | /// Converts the TrackingPropertyAllowList to a Dictionary. 54 | /// 55 | /// A dictionary representation of the TrackingPropertyAllowList. 56 | public Dictionary ToDictionary() 57 | { 58 | var dictionary = new Dictionary 59 | { 60 | { "adding", Adding }, 61 | { "removing", Removing }, 62 | { "addingCustomEvents", AddingCustomEvents }, 63 | { "removingCustomEvents", RemovingCustomEvents }, 64 | { "addingCustomAttributes", AddingCustomAttributes }, 65 | { "removingCustomAttributes", RemovingCustomAttributes } 66 | }; 67 | 68 | return dictionary; 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/PushNotification.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace Appboy.Models { 6 | public class PushNotification { 7 | public string RawJsonString { get; private set; } 8 | public string Title { get; private set; } 9 | public string Content { get; private set; } 10 | public Dictionary Extras { get; private set; } 11 | public int AndroidNotificationId { get; private set; } 12 | public long AndroidPushReceivedTimestamp { get; private set; } 13 | public string Deeplink { get; private set; } 14 | 15 | public PushNotification(string message) { 16 | if (String.IsNullOrEmpty(message)) { 17 | throw new ArgumentException("Message cannot be null or empty.", "message"); 18 | } 19 | RawJsonString = message; 20 | JSONObject json; 21 | try { 22 | json = (JSONObject) JSON.Parse(message); 23 | } catch { 24 | throw new ArgumentException("Unable to parse json."); 25 | } 26 | Title = SafeGetString(json, "t", null); 27 | Content = SafeGetString(json, "a", null); 28 | Deeplink = SafeGetString(json, "uri", null); 29 | AndroidNotificationId = SafeGetInt(json, "nid", -1); 30 | AndroidPushReceivedTimestamp = SafeGetLong(json, "appboy_push_received_timestamp", -1); 31 | if (json["extra"] != null) { 32 | Extras = JsonUtils.JSONObjectToDictionary((JSONObject) JSON.Parse(json["extra"])); 33 | } else { 34 | Extras = new Dictionary(); 35 | } 36 | } 37 | 38 | public override string ToString() { 39 | return String.Format("PushNotification[Title={0}, Content={1}, Extras={2}, AndroidNotificationId={3}, AndroidPushReceivedTimestamp={4}, Deeplink={5}, RawJson={6}]", 40 | Title, Content, CollectionUtils.DictionaryToString(Extras), AndroidNotificationId, AndroidPushReceivedTimestamp, Deeplink, RawJsonString); 41 | } 42 | 43 | private string SafeGetString(JSONObject json, string key, string defaultValue) { 44 | if (json == null || key == null) { 45 | return defaultValue; 46 | } 47 | 48 | if (json[key] != null) { 49 | return json[key]; 50 | } 51 | return defaultValue; 52 | } 53 | 54 | private int SafeGetInt(JSONObject json, string key, int defaultValue) { 55 | if (json == null || key == null) { 56 | return defaultValue; 57 | } 58 | 59 | if (json[key] != null) { 60 | return Convert.ToInt32((int)json[key]); 61 | } 62 | return defaultValue; 63 | } 64 | 65 | private long SafeGetLong(JSONObject json, string key, long defaultValue) { 66 | if (json == null || key == null) { 67 | return defaultValue; 68 | } 69 | 70 | if (json[key] != null) { 71 | return Convert.ToInt64((ulong)json[key]); 72 | } 73 | return defaultValue; 74 | } 75 | } 76 | } 77 | 78 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/LogPurchase.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using System; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using UnityEngine.SceneManagement; 6 | using UnityEngine.UI; 7 | using Utilities; 8 | 9 | public class LogPurchase : MonoBehaviour { 10 | 11 | public InputField ProductNameField; 12 | public InputField ProductPriceField; 13 | public InputField ProductQuantityField; 14 | public InputField PurchasePropertiesKeyField; 15 | public InputField PurchasePropertiesValueField; 16 | public Dictionary PurchaseProperties; 17 | 18 | 19 | public void OnDoneButtonClick() { 20 | if (UtilityMethods.textIsValid(ProductNameField.text) && 21 | UtilityMethods.textIsValid(ProductPriceField.text) && 22 | UtilityMethods.textIsValid(ProductQuantityField.text)) { 23 | decimal price; 24 | int quantity; 25 | if (UtilityMethods.ParseStringToDecimal(ProductPriceField.text, Constants.PurchasePriceParseErrorDescription, out price) && 26 | UtilityMethods.ParseStringToInt(ProductQuantityField.text, Constants.PurchaseQuantityParseErrorDescription, out quantity)) { 27 | Debug.Log(String.Format("Logging purchase {0} with price {1} and quantity {2}", ProductNameField.text, price, quantity)); 28 | if (PurchaseProperties == null) { 29 | Appboy.AppboyBinding.LogPurchase(ProductNameField.text, "USD", price, quantity); 30 | } else { 31 | Appboy.AppboyBinding.LogPurchase(ProductNameField.text, "USD", price, quantity, PurchaseProperties); 32 | } 33 | SceneManager.LoadScene(Constants.MainMenuScene); 34 | } 35 | } 36 | } 37 | 38 | public void OnCancelButtonClick() { 39 | Debug.Log(String.Format(Constants.PurchaseCancelLog)); 40 | SceneManager.LoadScene(Constants.MainMenuScene); 41 | } 42 | 43 | public void AddTestPropertiesButtonClick() { 44 | if (PurchaseProperties == null) { 45 | PurchaseProperties = new Dictionary (); 46 | } 47 | 48 | PurchaseProperties["intprop"] = 1; 49 | PurchaseProperties["doubleprop"] = 1.2D; 50 | PurchaseProperties["floatprop"] = 1.2F; 51 | PurchaseProperties["testcoercion"] = "11"; 52 | PurchaseProperties["dateprop"] = DateTime.Today; 53 | PurchaseProperties["boolprop"] = true; 54 | PurchaseProperties["nullprop"] = null; 55 | PurchaseProperties["objprop"] = new object(); 56 | } 57 | 58 | public void AddPropertyButtonClick() { 59 | if (!UtilityMethods.textIsValid (PurchasePropertiesKeyField.text) || 60 | !UtilityMethods.textIsValid (PurchasePropertiesValueField.text)) { 61 | Debug.Log ("Key and value must be valid strings."); 62 | return; 63 | } 64 | Debug.Log(String.Format("Add Property {0} : {1}", PurchasePropertiesKeyField.text, PurchasePropertiesValueField.text)); 65 | if (PurchaseProperties == null) { 66 | PurchaseProperties = new Dictionary (); 67 | } 68 | PurchaseProperties.Add(PurchasePropertiesKeyField.text, PurchasePropertiesValueField.text); 69 | } 70 | } -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/FeatureFlags.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using Appboy.Models; 3 | using Appboy.Utilities; 4 | using System; 5 | using UnityEngine; 6 | using UnityEngine.SceneManagement; 7 | using UnityEngine.UI; 8 | using Utilities; 9 | using UnityEngine.Networking; 10 | using System.Text; 11 | using System.Threading.Tasks; 12 | using System.Collections; 13 | using System.Collections.Generic; 14 | 15 | public class FeatureFlags : MonoBehaviour { 16 | 17 | public InputField UserIDField; 18 | 19 | public void OnRetrieveButtonClicked() { 20 | Console.WriteLine(String.Format("Getting FF for {0}", UserIDField.text)); 21 | getFeatureFlag(UserIDField.text); 22 | } 23 | 24 | public void OnGetAllButtonClicked() { 25 | List ffList = Appboy.AppboyBinding.GetAllFeatureFlags(); 26 | Console.WriteLine("Showing All " + ffList.Count + " Feature Flags"); 27 | foreach (FeatureFlag ff in ffList) { 28 | Console.WriteLine(ff.ToString()); 29 | } 30 | Console.WriteLine("Done Showing All Feature Flags"); 31 | } 32 | 33 | public void OnRefreshFeatureFlagsButtonClicked() { 34 | Console.WriteLine("Refreshing Feature Flags"); 35 | Appboy.AppboyBinding.RefreshFeatureFlags(); 36 | } 37 | 38 | public void OnLogImpressionClicked() { 39 | Console.WriteLine("Logging Impression for Feature Flag {0}", UserIDField.text); 40 | Appboy.AppboyBinding.LogFeatureFlagImpression(UserIDField.text); 41 | } 42 | 43 | public void OnCancelButtonClicked() { 44 | Debug.Log(String.Format(Constants.ChangeUserCancelLog)); 45 | SceneManager.LoadScene(Constants.MainMenuScene); 46 | } 47 | 48 | private void getFeatureFlag(string ffId) { 49 | var ff = Appboy.AppboyBinding.GetFeatureFlag(ffId); 50 | if (ff == null) { 51 | Console.WriteLine(String.Format("No Feature Flag Found with ID: {0}", ffId)); 52 | return; 53 | } 54 | Debug.Log(ff.ToString()); 55 | 56 | // Print out each of the properties via convenience getter methods 57 | foreach(var entry in ff.Properties) { 58 | var type = entry.Value.type; 59 | if (type.Equals("string")) { 60 | Debug.Log($"- String property: {ff.GetStringProperty(entry.Key)}, key: \"{entry.Key}\""); 61 | } else if (type.Equals("number")) { 62 | Debug.Log($"- Number property as integer: {ff.GetIntegerProperty(entry.Key)}, key: \"{entry.Key}\""); 63 | Debug.Log($"- Number property as double: {ff.GetDoubleProperty(entry.Key)}, key: \"{entry.Key}\""); 64 | } else if (type.Equals("boolean")) { 65 | Debug.Log($"- Boolean property: {ff.GetBooleanProperty(entry.Key)}, key: \"{entry.Key}\""); 66 | } else if (type.Equals("datetime")) { 67 | Debug.Log($"- Timestamp property: {ff.GetTimestampProperty(entry.Key)}, key: \"{entry.Key}\""); 68 | } else if (type.Equals("jsonobject")) { 69 | Debug.Log($"- JSON property: {ff.GetJSONProperty(entry.Key)}, key: \"{entry.Key}\""); 70 | } else if (type.Equals("image")) { 71 | Debug.Log($"- Image property: {ff.GetImageProperty(entry.Key)}, key: \"{entry.Key}\""); 72 | } else { 73 | Debug.Log("Skipping invalid type: " + type); 74 | } 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/TrackingProperty.cs: -------------------------------------------------------------------------------- 1 | namespace Appboy.Models { 2 | /// 3 | /// The category of Braze SDK properties to be marked for user tracking. 4 | /// 5 | public static class TrackingProperty { 6 | /// 7 | /// Mark all custom attributes for tracking. 8 | /// 9 | public const string AllCustomAttributes = "all_custom_attributes"; 10 | 11 | /// 12 | /// Mark all custom events for tracking. 13 | /// 14 | public const string AllCustomEvents = "all_custom_events"; 15 | 16 | /// 17 | /// Braze events for analytics. 18 | /// 19 | public const string AnalyticsEvents = "analytics_events"; 20 | 21 | /// 22 | /// The user's attribution data. 23 | /// 24 | public const string AttributionData = "attribution_data"; 25 | 26 | /// 27 | /// The user's country. 28 | /// 29 | public const string Country = "country"; 30 | 31 | /// 32 | /// The user's date of birth. 33 | /// 34 | public const string DateOfBirth = "dob"; 35 | 36 | /// 37 | /// The user's device data. 38 | /// 39 | public const string DeviceData = "device_data"; 40 | 41 | /// 42 | /// The user's email address. 43 | /// 44 | public const string Email = "email"; 45 | 46 | /// 47 | /// The user's email subscription state. 48 | /// 49 | public const string EmailSubscriptionState = "email_subscription_state"; 50 | 51 | /// 52 | /// Mark every user data for tracking. 53 | /// Adding this property will cause other cases to be a no-op as everything will be routed to the tracking domain. 54 | /// 55 | public const string Everything = "everything"; 56 | 57 | /// 58 | /// The user's first name. 59 | /// 60 | public const string FirstName = "first_name"; 61 | 62 | /// 63 | /// The user's gender. 64 | /// 65 | public const string Gender = "gender"; 66 | 67 | /// 68 | /// The user's home city. 69 | /// 70 | public const string HomeCity = "home_city"; 71 | 72 | /// 73 | /// The user's language. 74 | /// 75 | public const string Language = "language"; 76 | 77 | /// 78 | /// The user's last name. 79 | /// 80 | public const string LastName = "last_name"; 81 | 82 | /// 83 | /// The user's notification subscription state. 84 | /// 85 | public const string NotificationSubscriptionState = "notification_subscription_state"; 86 | 87 | /// 88 | /// The user's phone number. 89 | /// 90 | public const string PhoneNumber = "phone_number"; 91 | 92 | /// 93 | /// The user's push token. 94 | /// 95 | public const string PushToken = "push_token"; 96 | } 97 | } -------------------------------------------------------------------------------- /Assets/Plugins/iOS/AppboyAppDelegate.mm: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "UnityAppController.h" 4 | #import "AppboyUnityManager.h" 5 | 6 | #import 7 | #import 8 | 9 | @interface AppboyAppDelegate : UnityAppController 10 | 11 | @property (nonatomic,copy) NSDictionary *brazeUnityPlist; 12 | 13 | @end 14 | 15 | @implementation AppboyAppDelegate : UnityAppController 16 | 17 | static Braze *_braze; 18 | 19 | #pragma mark - UIApplicationDelegate methods 20 | 21 | - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { 22 | [super application:application didFinishLaunchingWithOptions:launchOptions]; 23 | NSLog(@"AppboyAppDelegate called from application:didFinishLaunchingWithOptions:"); 24 | 25 | BRZConfiguration *config = [[BRZConfiguration alloc] init]; 26 | config.triggerMinimumTimeInterval = 1; 27 | Braze *braze = [AppboyUnityManager initBraze:config]; 28 | AppboyAppDelegate.braze = braze; 29 | 30 | // Set listeners 31 | [[AppboyUnityManager sharedInstance] setListenersFromPList]; 32 | 33 | // Store the braze settings (used in system push handlers) 34 | self.brazeUnityPlist = [AppboyUnityManager sharedInstance].brazeUnityPlist; 35 | 36 | // Register for push notifications 37 | if ([self.brazeUnityPlist[BRZUnityAutomaticPushIntegrationKey] boolValue] && 38 | ![self.brazeUnityPlist[BRZUnityDisableAutomaticPushRegistrationKey] boolValue]) { 39 | BOOL provisional = ![self.brazeUnityPlist[BRZUnityDisableProvisionalAuthKey] boolValue]; 40 | [[AppboyUnityManager sharedInstance] registerForRemoteNotificationsWithProvisional:provisional]; 41 | } 42 | 43 | return YES; 44 | } 45 | 46 | - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 47 | if ([UnityAppController instancesRespondToSelector:@selector(application:didRegisterForRemoteNotificationsWithDeviceToken:)]) { 48 | [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; 49 | } 50 | // Register device token with Braze 51 | if ([self.brazeUnityPlist[BRZUnityAutomaticPushIntegrationKey] boolValue]) { 52 | NSLog(@"Automatic push integration enabled. Sending device token to Braze: %@", deviceToken); 53 | // Even though the Swift SDK push automation automatically registers the device token, we still 54 | // call `registerPushToken:` to ensure that the device token is forwarded to the Unity side. 55 | // The Swift SDK push automation feature does not yet offer a subscription to the device token 56 | // registration event which would allow us to avoid implementing 57 | // `-application:didRegisterForRemoteNotificationsWithDeviceToken:` altogether. 58 | [[AppboyUnityManager sharedInstance] registerPushToken:deviceToken]; 59 | } else{ 60 | NSLog(@"Automatic push integration disabled. Ignoring device token %@", deviceToken); 61 | } 62 | } 63 | 64 | #pragma mark - Helpers 65 | 66 | + (Braze *)braze { 67 | return _braze; 68 | } 69 | 70 | + (void)setBraze:(Braze *)braze { 71 | _braze = braze; 72 | } 73 | 74 | @end 75 | 76 | IMPL_APP_CONTROLLER_SUBCLASS(AppboyAppDelegate) 77 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/SetCustomAttributesArray.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using UnityEngine; 6 | using UnityEngine.SceneManagement; 7 | using UnityEngine.UI; 8 | using Utilities; 9 | 10 | public class SetCustomAttributesArray : MonoBehaviour { 11 | 12 | public InputField CustomArrayKeyField; 13 | public InputField CustomArrayField; 14 | public InputField AddStringToArrayKeyField; 15 | public InputField AddStringToArrayStringField; 16 | public InputField RemoveStringFromArrayKeyField; 17 | public InputField RemoveStringFromArrayStringField; 18 | public InputField NestedArrayKeyField; 19 | 20 | 21 | public void OnBackButtonClick() { 22 | SceneManager.LoadScene(Constants.CustomAttributesSettingScene); 23 | } 24 | 25 | public void OnSetArrayButtonClick() { 26 | if (UtilityMethods.textIsValid(CustomArrayKeyField.text) && UtilityMethods.textIsValid(CustomArrayField.text)) { 27 | List stringList = CustomArrayField.text.Split(',').ToList(); 28 | Debug.Log(String.Format("Setting custom attribute array {0} with key {1}", 29 | string.Join(",", stringList.ToArray()), CustomArrayKeyField.text)); 30 | Appboy.AppboyBinding.SetCustomUserAttributeArray(CustomArrayKeyField.text, stringList, stringList.Count); 31 | } 32 | } 33 | 34 | public void OnAddStringButtonClick() { 35 | if (UtilityMethods.textIsValid(AddStringToArrayKeyField.text) && 36 | UtilityMethods.textIsValid(AddStringToArrayStringField.text)) { 37 | Debug.Log(String.Format("Adding string {0} to array with key {1}", AddStringToArrayStringField.text, AddStringToArrayKeyField.text)); 38 | Appboy.AppboyBinding.AddToCustomUserAttributeArray(AddStringToArrayKeyField.text, AddStringToArrayStringField.text); 39 | } 40 | } 41 | 42 | public void OnRemoveStringButtonClick() { 43 | if (UtilityMethods.textIsValid(RemoveStringFromArrayKeyField.text) && 44 | UtilityMethods.textIsValid(RemoveStringFromArrayStringField.text)) { 45 | Debug.Log(String.Format("Removing string {0} from array with key {1}", 46 | RemoveStringFromArrayStringField.text, RemoveStringFromArrayKeyField.text)); 47 | Appboy.AppboyBinding.RemoveFromCustomUserAttributeArray(RemoveStringFromArrayKeyField.text, RemoveStringFromArrayStringField.text); 48 | } 49 | } 50 | 51 | public void OnCreateNestedArrayButtonClick() { 52 | if (UtilityMethods.textIsValid(NestedArrayKeyField.text)) { 53 | Dictionary object1 = new Dictionary(); 54 | object1.Add("key int", 2); 55 | object1.Add("key string", "first value"); 56 | object1.Add("key bool", true); 57 | object1.Add("key float", 20.2); 58 | 59 | Dictionary object2 = new Dictionary(); 60 | object2.Add("key int", 3); 61 | object2.Add("key string", "second value"); 62 | object2.Add("key bool", false); 63 | object2.Add("key float", 23.2); 64 | 65 | List> listOfStuff = new List>(); 66 | listOfStuff.Add(object1); 67 | listOfStuff.Add(object2); 68 | 69 | Debug.Log(String.Format("Creating Nested Array {0}", NestedArrayKeyField.text)); 70 | Appboy.AppboyBinding.SetCustomUserAttribute(NestedArrayKeyField.text, listOfStuff); 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/Card.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System; 3 | using System.Collections.Generic; 4 | using Appboy.Models; 5 | using UnityEngine; 6 | 7 | namespace Appboy.Models.Cards { 8 | public class Card { 9 | public string ID { get; private set; } 10 | 11 | public string Type { get; private set; } 12 | 13 | public bool Viewed { get; private set; } 14 | 15 | public long Created { get; private set; } 16 | 17 | public long Updated { get; private set; } 18 | 19 | public HashSet Categories { get; private set; } 20 | 21 | public string JsonString { get; private set; } 22 | 23 | public Dictionary Extras { get; set; } 24 | 25 | public Card(JSONObject json) { 26 | if (json == null) { 27 | throw new ArgumentNullException("json"); 28 | } 29 | JsonString = json.ToString(); 30 | if (json["id"] == null || json["type"] == null || json["viewed"] == null || json["created"] == null || json["updated"] == null) { 31 | throw new ArgumentException("Missing required field(s)."); 32 | } 33 | ID = json["id"]; 34 | Type = json["type"]; 35 | Viewed = json["viewed"].AsBool; 36 | Created = json["created"].AsInt; 37 | Updated = json["updated"].AsInt; 38 | if (json["extras"] != null) { 39 | Extras = JsonUtils.JSONObjectToDictionary(json["extras"].AsObject); 40 | } 41 | Categories = new HashSet(); 42 | if (json["categories"] == null) { 43 | Categories.Add(CardCategory.NO_CATEGORY); 44 | } else { 45 | JSONArray jsonArray = (JSONArray)JSON.Parse(json["categories"].ToString()); 46 | if (jsonArray == null || jsonArray.Count == 0) { 47 | Categories.Add(CardCategory.NO_CATEGORY); 48 | } else { 49 | for (int i = 0; i < jsonArray.Count; i++) { 50 | CardCategory category = (CardCategory)EnumUtils.TryParse(typeof(CardCategory), jsonArray[i], true, CardCategory.NO_CATEGORY); 51 | Categories.Add(category); 52 | } 53 | if (Categories.Count == 0) { 54 | Categories.Add(CardCategory.NO_CATEGORY); 55 | } 56 | } 57 | } 58 | 59 | } 60 | 61 | public override string ToString() { 62 | return String.Format("{0}: ID={1}, Type={2}, Viewed={3}, Created={4}, Extras={5}, Updated={6}" + 63 | "Categories={7}", 64 | this.GetType().Name, ID, Type, Viewed, Created, CollectionUtils.DictionaryToString(Extras), 65 | Updated, CategoriesToString()); 66 | } 67 | 68 | public void LogImpression() { 69 | if (!string.IsNullOrEmpty(ID)) { 70 | #if UNITY_ANDROID 71 | AppboyBinding.LogCardImpression(ID); 72 | #elif UNITY_IOS 73 | AppboyBinding.LogCardImpression(JsonString); 74 | #endif 75 | } 76 | } 77 | 78 | public string CategoriesToString() { 79 | List categoriesString = new List(); 80 | foreach (CardCategory category in Categories) { 81 | categoriesString.Add(category.ToString()); 82 | } 83 | return string.Join(",", categoriesString.ToArray()); 84 | } 85 | 86 | public void LogClick() { 87 | if (!string.IsNullOrEmpty(ID)) { 88 | #if UNITY_ANDROID 89 | AppboyBinding.LogCardClicked(ID); 90 | #elif UNITY_IOS 91 | AppboyBinding.LogCardClicked(JsonString); 92 | #endif 93 | } 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/UnitySampleConstants.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Mono Runtime Version: 4.0.30319.1 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | // ------------------------------------------------------------------------------ 10 | using System; 11 | using UnityEngine; 12 | namespace Utilities { 13 | 14 | public class UtilityMethods { 15 | public static bool textIsValid(string text) { 16 | return text != null && text.Length > 0; 17 | } 18 | 19 | public static bool ParseStringToInt(string text, string ErrorDescription, out int ParsedInt) { 20 | try { 21 | ParsedInt = System.Convert.ToInt32(text); 22 | } catch { 23 | Debug.Log(String.Format("{0}: {1} isn't valid", ErrorDescription, text)); 24 | // Have to assign a number to the our parameter before leaving the method 25 | ParsedInt = 0; 26 | return false; 27 | } 28 | return true; 29 | } 30 | 31 | public static bool ParseStringToDecimal(string text, string ErrorDescription, out decimal ParsedDecimal) { 32 | try { 33 | ParsedDecimal = System.Convert.ToDecimal(text); 34 | } catch { 35 | Debug.Log(String.Format("{0}: {1} isn't valid", ErrorDescription, text)); 36 | // Have to assign a number to the our parameter before leaving the method 37 | ParsedDecimal = 0.0m; 38 | return false; 39 | } 40 | return true; 41 | } 42 | } 43 | 44 | public class Constants { 45 | // Scene names 46 | public static string MainMenuScene = "MainMenu"; 47 | public static string SetCustomAttributesScene = "SetCustomAttributes"; 48 | public static string SetCustomAttributesArrayScene = "SetCustomAttributesArray"; 49 | public static string ChangeUserScene = "ChangeUser"; 50 | public static string LogCustomEventScene = "LogCustomEvent"; 51 | public static string LogPurchaseScene = "LogPurchase"; 52 | public static string SetUserFieldScene = "SetUserField"; 53 | public static string CustomAttributesSettingScene = "CustomAttributesSetting"; 54 | public static string FeatureFlagScene = "FeatureFlags"; 55 | 56 | // Change User 57 | public static string ChangeUserCancelLog = "Cancel changing User ID."; 58 | 59 | // CUstom Attributes Setting 60 | public static string IncrementValueParseErrorDescription = "Increment value"; 61 | 62 | // Log Custom Event 63 | public static string CustomEventCancelLog = "Cancel logging custom event."; 64 | 65 | // Log Purchase 66 | public static string PurchasePriceParseErrorDescription = "Log Purchase price value"; 67 | public static string PurchaseQuantityParseErrorDescription = "Log Purchase quantity value"; 68 | public static string PurchaseCancelLog = "Cancel logging purchase."; 69 | 70 | // Set Custom Attribute 71 | public static string CustomAttributeIntParseErrorDescription = "Int custom attribute value"; 72 | 73 | // Set User Field 74 | public static string BirthdayMonthParseErrorDescription = "The birthday month number" ; 75 | public static string BirthdayDayParseErrorDescription = "The birthday day number" ; 76 | public static string BirthdayYearParseErrorDescription = "The birthday year number" ; 77 | } 78 | } 79 | 80 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/Cards/ContentCard.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Utilities; 2 | using System; 3 | using System.Collections.Generic; 4 | using Appboy.Models; 5 | using UnityEngine; 6 | 7 | namespace Appboy.Models.Cards { 8 | public class ContentCard { 9 | public string ID { get; private set; } 10 | 11 | public string Type { get; private set; } 12 | 13 | public bool Viewed { get; private set; } 14 | 15 | public long Created { get; private set; } 16 | 17 | public long Expires { get; private set; } 18 | 19 | public string ImageUrl { get; private set; } 20 | 21 | public string Title { get; private set; } 22 | 23 | public string Description { get; private set; } 24 | 25 | public string Url { get; private set; } 26 | 27 | public string Domain { get; private set; } 28 | 29 | public bool Dismissed { get; private set; } 30 | 31 | public bool Removed { get; private set; } 32 | 33 | public bool Pinned { get; private set; } 34 | 35 | public bool Dismissible { get; private set; } 36 | 37 | public bool UseWebView { get; private set; } 38 | 39 | public string JsonString { get; private set; } 40 | 41 | public Dictionary Extras { get; set; } 42 | 43 | public ContentCard(JSONObject json) { 44 | if (json == null) { 45 | Debug.Log("Json was null."); 46 | throw new ArgumentNullException("json"); 47 | } 48 | JsonString = json.ToString(); 49 | ID = json["id"]; 50 | Type = json["tp"]; 51 | Viewed = json["v"].AsBool; 52 | Created = json["ca"].AsInt; 53 | Expires = json["ea"].AsInt; 54 | ImageUrl = json["i"]; 55 | Title = json["tt"]; 56 | Description = json["ds"]; 57 | Url = json["u"]; 58 | Domain = json["dm"]; 59 | Dismissed = json["d"].AsBool; 60 | Removed = json["r"].AsBool; 61 | Pinned = json["p"].AsBool; 62 | Dismissible = json["db"].AsBool; 63 | UseWebView = json["uw"].AsBool; 64 | 65 | if (json["e"] != null) { 66 | Extras = JsonUtils.JSONObjectToDictionary(json["e"].AsObject); 67 | } 68 | } 69 | 70 | public override string ToString() { 71 | return String.Format("{0}: ID={1}, Type={2}, Viewed={3}, Created={4}, Extras={5}, Expires={6}, " + 72 | "ImageUrl={7}, Title={8}, Description={9}, Url={10}, Domain={11}, " + 73 | "Dismissed={12}, Removed={13}, Pinned={14}, Dismissible={15}, UseWebView={16}", 74 | this.GetType().Name, ID, Type, Viewed, Created, CollectionUtils.DictionaryToString(Extras), Expires, 75 | ImageUrl, Title, Description, Url, Domain, Dismissed, Removed, Pinned, Dismissible, UseWebView); 76 | } 77 | 78 | public void LogImpression() { 79 | if (!string.IsNullOrEmpty(ID)) { 80 | Debug.Log("Logging Content Card impression."); 81 | AppboyBinding.LogContentCardImpression(JsonString); 82 | } else { 83 | Debug.Log("No ID found. Not logging Content Card impression."); 84 | } 85 | } 86 | 87 | public void LogClick() { 88 | if (!string.IsNullOrEmpty(ID)) { 89 | Debug.Log("Logging Content Card click."); 90 | AppboyBinding.LogContentCardClicked(JsonString); 91 | } else { 92 | Debug.Log("No ID found. Not logging Content Card click."); 93 | } 94 | } 95 | 96 | public void LogDismissed() { 97 | if (!string.IsNullOrEmpty(ID)) { 98 | Debug.Log("Logging Content Card dismissed."); 99 | AppboyBinding.LogContentCardDismissed(JsonString); 100 | } else { 101 | Debug.Log("No ID found. Not logging Content Card dismissed."); 102 | } 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /unity-samples/Assets/Resources/AppboyConfig.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: 19e53a81bfc8b41c48967f2a15ad4eac, type: 3} 13 | m_Name: AppboyConfig 14 | m_EditorClassIdentifier: 15 | iOSAutomatesIntegration: 1 16 | androidAutomatesIntegration: 1 17 | ApiKey: ba91dbc3-3fc7-4b5c-afb3-c709f663bb53 18 | iOSEndpoint: sondheim.braze.com 19 | iOSSdkAuthenticationEnabled: 1 20 | iOSSdkAuthenticationFailedGameObjectName: BrazeCallback 21 | iOSSdkAuthenticationFailedCallbackMethodName: SdkAuthenticationFailureCallback 22 | iOSLogLevel: 0 23 | iOSImportDependencies: 0 24 | androidApiKey: 5a29c2d7-10af-4aa1-8f92-d0cff2e13d61 25 | androidEndpoint: sondheim.braze.com 26 | androidSdkAuthenticationEnabled: 1 27 | androidSdkAuthenticationFailedGameObjectName: BrazeCallback 28 | androidSdkAuthenticationFailedCallbackMethodName: SdkAuthenticationFailureCallback 29 | androidLogLevel: 0 30 | androidDeviceObjectWhitelist: RESOLUTION MODEL 31 | androidDeviceObjectWhitelistEnabled: 0 32 | androidSessionTimeoutSeconds: 2 33 | iOSIntegratesPush: 1 34 | iOSDisableAutomaticPushRegistration: 0 35 | iOSDisableProvisionalAuth: 0 36 | iOSDisableAutomaticPushCapability: 0 37 | iOSPushIsBackgroundEnabled: 1 38 | iOSPushReceivedGameObjectName: BrazeCallback 39 | iOSPushReceivedCallbackMethodName: PushNotificationReceivedCallbackForiOS 40 | iOSPushOpenedGameObjectName: BrazeCallback 41 | iOSPushOpenedCallbackMethodName: PushNotificationOpenedCallbackForiOS 42 | androidFirebaseCloudMessagingRegistrationEnabled: 1 43 | androidFirebaseCloudMessagingSenderId: 901477453852 44 | androidHandlePushDeepLinksAutomatically: 1 45 | androidAdmRegistrationEnabled: 1 46 | androidPushReceivedGameObjectName: BrazeCallback 47 | androidPushReceivedCallbackMethodName: PushNotificationReceivedCallback 48 | androidPushOpenedGameObjectName: BrazeCallback 49 | androidPushOpenedCallbackMethodName: PushNotificationOpenedCallback 50 | androidPushDeletedGameObjectName: BrazeCallback 51 | androidPushDeletedCallbackMethodName: PushNotificationDeletedCallback 52 | androidPushNotificationHtmlRenderingEnabled: 1 53 | androidPushDefaultNotificationAccentColor: 0xFF001122 54 | androidPushDefaultNotificationChannelName: 55 | androidPushDefaultNotificationChannelDescription: 56 | androidPushSmallNotificationIcon: 57 | androidPushLargeNotificationIcon: 58 | androidDelaySendingPushIntents: 1 59 | iOSInAppMessageGameObjectName: BrazeCallback 60 | iOSInAppMessageCallbackMethodName: InAppMessageReceivedCallback 61 | iOSDisplayInAppMessages: 1 62 | iOSInitialInAppMessageOperation: 0 63 | androidInAppMessageListenerGameObjectName: BrazeCallback 64 | androidInAppMessageListenerCallbackMethodName: InAppMessageReceivedCallback 65 | androidTriggerActionMinimumTimeSeconds: 66 | androidDisplayInAppMessagesAutomatically: 1 67 | androidSetInAppMessageManagerListenerAutomatically: 1 68 | androidInitialInAppMessageOperation: 0 69 | iOSFeedGameObjectName: BrazeCallback 70 | iOSFeedCallbackMethodName: FeedReceivedCallback 71 | iOSContentCardsGameObjectName: BrazeCallback 72 | iOSContentCardsCallbackMethodName: ContentCardsReceivedCallback 73 | androidContentCardsUpdatedListenerGameObjectName: BrazeCallback 74 | androidContentCardsUpdatedListenerCallbackMethodName: ContentCardsReceivedCallback 75 | androidContentCardsUnreadVisualIndicatorEnabled: 1 76 | featureFlagsGameObjectName: BrazeCallback 77 | featureFlagsCallbackMethodName: FeatureFlagsReceivedCallback 78 | androidLocationCollectionEnabled: 1 79 | androidGeofencesEnabled: 0 80 | androidAutomaticGeofenceRequestsEnabled: 0 81 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/ApplePushNotification.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System; 3 | using Appboy.Utilities; 4 | using System.Collections.Generic; 5 | 6 | namespace Appboy.Models { 7 | public class ApplePushNotification { 8 | // These properties are from the aps dictionary at the top level of the Apple Push Notification. 9 | // Note that these are actually nested inside the 'aps' key when sent from Apple, but we've 10 | // included them in the top level ApplePushNotification upon deserialization for convenience. 11 | public ApplePushNotificationAlert Alert { get; set; } 12 | 13 | public int Badge { get; set; } 14 | 15 | public string Sound { get; set; } 16 | 17 | public int ContentAvailable { get; set; } 18 | 19 | // All additional properties included with the notification alongside the 'aps' dictionary at 20 | // the top level of the Apple Push Notification. See 21 | // https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW10 22 | public IDictionary Extra { get; set; } 23 | 24 | public ApplePushNotification(string jsonString) : this((JSONObject) JSON.Parse(jsonString)) {} 25 | 26 | public ApplePushNotification(JSONObject json) { 27 | Alert = new ApplePushNotificationAlert(json["alert"].AsObject); 28 | Badge = json["badge"].AsInt; 29 | Sound = json["sound"]; 30 | ContentAvailable = json["content-available"].AsInt; 31 | Extra = new Dictionary(); 32 | JSONNode ExtraNode = json["extra"]; 33 | if (ExtraNode.GetType() == typeof(JSONObject)) { 34 | foreach (KeyValuePair KeyValuePairNode in ExtraNode.AsObject) { 35 | Extra.Add(KeyValuePairNode.Key, this.getJSONNodeValue(KeyValuePairNode.Value)); 36 | } 37 | } else { 38 | Debug.Log("Value of key Extra isn't a dictionary. Stop parsing the Extra dictionary"); 39 | } 40 | } 41 | 42 | private object getJSONNodeValue(JSONNode node) { 43 | int intNode = 0; 44 | if (int.TryParse(node.Value, out intNode)) { 45 | return intNode; 46 | } 47 | 48 | float floatNode = 0.0f; 49 | if (float.TryParse(node.Value, out floatNode)) { 50 | return floatNode; 51 | } 52 | 53 | double doubleNode = 0.0; 54 | if (double.TryParse(node.Value, out doubleNode)) { 55 | return doubleNode; 56 | } 57 | 58 | bool boolNode = false; 59 | if (bool.TryParse(node.Value, out boolNode)) { 60 | return boolNode; 61 | } 62 | 63 | if (node.GetType() == typeof(JSONArray)) { 64 | IList nodeList = new List(); 65 | foreach (JSONNode nodeInArray in node.AsArray) { 66 | nodeList.Add(this.getJSONNodeValue(nodeInArray)); 67 | } 68 | return nodeList; 69 | } 70 | 71 | if (node.GetType() == typeof(JSONObject)) { 72 | IDictionary nodeDictionary = new Dictionary(); 73 | foreach (KeyValuePair kvp in node.AsObject) { 74 | nodeDictionary.Add(kvp.Key, this.getJSONNodeValue(kvp.Value)); 75 | } 76 | return nodeDictionary; 77 | } 78 | 79 | // if the Node isn't one type of int/float/double/bool/list/dictionary, then we should save it as a string 80 | return node.ToString(); 81 | } 82 | 83 | public override string ToString() { 84 | string extraString = "{"; 85 | foreach (KeyValuePair N in Extra) { 86 | if (extraString.Length > 2) { 87 | extraString += ", "; 88 | } 89 | extraString += "\"" + N.Key + "\":" + N.Value.ToString(); 90 | } 91 | extraString += "}"; 92 | return String.Format("PushNotification[Alert={0}, Badge={1}, Sound={2}, ContentAvailable={3}, Extra={4}]", 93 | Alert.ToString(), Badge, Sound, ContentAvailable, extraString); 94 | } 95 | } 96 | } 97 | 98 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Internal/BrazeInternalComponent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using Appboy.Models.InAppMessage; 4 | using Appboy.Utilities; 5 | 6 | namespace Appboy.Internal { 7 | public class BrazeInternalComponent : MonoBehaviour { 8 | 9 | /*** Push Notifications ***/ 10 | 11 | private PushPromptResponseReceived pushPromptResponseReceived; 12 | private PushTokenReceivedFromSystem pushTokenReceivedFromSystem; 13 | 14 | public void setPushPromptResponseReceivedDelegate(PushPromptResponseReceived responseDelegate) { 15 | pushPromptResponseReceived = responseDelegate; 16 | } 17 | 18 | public void setPushTokenReceivedFromSystemDelegate(PushTokenReceivedFromSystem responseDelegate) { 19 | pushTokenReceivedFromSystem = responseDelegate; 20 | } 21 | 22 | public void onPushPromptResponseReceived(String response) { 23 | if (pushPromptResponseReceived != null) { 24 | pushPromptResponseReceived(Convert.ToBoolean(response)); 25 | } 26 | } 27 | 28 | public void onPushTokenReceivedFromSystem(String token) { 29 | if (pushTokenReceivedFromSystem != null) { 30 | pushTokenReceivedFromSystem(token); 31 | } 32 | } 33 | 34 | /*** In-app messages ***/ 35 | 36 | public BrazeInAppMessageListener iamListener; 37 | 38 | public void beforeInAppMessageDisplayed(string messageJSON) { 39 | Debug.Log("BrazeInternalComponent.beforeInAppMessageDisplayed called with json: " + messageJSON); 40 | if (iamListener == null || iamListener.BeforeInAppMessageDisplayed == null) { 41 | Debug.Log("BrazeInternalComponent.beforeInAppMessageDisplayed no-op on null listener"); 42 | return; 43 | } 44 | 45 | IInAppMessage message = InAppMessageFactory.BuildInAppMessage(messageJSON); 46 | iamListener.BeforeInAppMessageDisplayed(message); 47 | } 48 | 49 | public void onInAppMessageDismissed(string messageJSON) { 50 | Debug.Log("BrazeInternalComponent.onInAppMessageDismissed called with json: " + messageJSON); 51 | if (iamListener == null || iamListener.OnInAppMessageDismissed == null) { 52 | Debug.Log("BrazeInternalComponent.onInAppMessageDismissed no-op on null listener"); 53 | return; 54 | } 55 | 56 | IInAppMessage message = InAppMessageFactory.BuildInAppMessage(messageJSON); 57 | iamListener.OnInAppMessageDismissed(message); 58 | } 59 | 60 | public void onInAppMessageClicked(string messageJSON) { 61 | Debug.Log("BrazeInternalComponent.onInAppMessageClicked called with json: " + messageJSON); 62 | if (iamListener == null || iamListener.OnInAppMessageClicked == null) { 63 | Debug.Log("BrazeInternalComponent.onInAppMessageClicked no-op on null listener"); 64 | return; 65 | } 66 | 67 | IInAppMessage message = InAppMessageFactory.BuildInAppMessage(messageJSON); 68 | iamListener.OnInAppMessageClicked(message); 69 | } 70 | 71 | public void onInAppMessageButtonClicked(string argvJSON) { 72 | Debug.Log("BrazeInternalComponent.onInAppMessageButtonClicked called with json: " + argvJSON); 73 | if (iamListener == null || iamListener.OnInAppMessageButtonClicked == null) { 74 | Debug.Log("BrazeInternalComponent.onInAppMessageButtonClicked no-op on null listener"); 75 | return; 76 | } 77 | 78 | try { 79 | JSONArray argv = (JSONArray)JSON.Parse(argvJSON); 80 | (string messageJSON, int buttonId) = (argv[0], argv[1].AsInt); 81 | 82 | IInAppMessage message = InAppMessageFactory.BuildInAppMessage(messageJSON); 83 | InAppMessageButton button = ((IInAppMessageImmersive)message).Buttons[buttonId]; 84 | iamListener.OnInAppMessageButtonClicked(message, button); 85 | } catch { 86 | Debug.Log("Received invalid in-app message data from native side."); 87 | } 88 | } 89 | 90 | public void onInAppMessageHTMLClicked(string argvJSON) { 91 | Debug.Log("BrazeInternalComponent.onInAppMessageHTMLClicked called with json: " + argvJSON); 92 | if (iamListener == null || iamListener.OnInAppMessageHTMLClicked == null) { 93 | Debug.Log("BrazeInternalComponent.onInAppMessageHTMLClicked no-op on null listener"); 94 | return; 95 | } 96 | 97 | try { 98 | JSONArray argv = (JSONArray)JSON.Parse(argvJSON); 99 | (string messageJSON, string uriString) = (argv[0], argv[1]); 100 | 101 | IInAppMessage message = InAppMessageFactory.BuildInAppMessage(messageJSON); 102 | Uri uri = uriString != null ? new Uri(uriString) : null; 103 | iamListener.OnInAppMessageHTMLClicked(message, uri); 104 | } catch { 105 | Debug.Log("Received invalid in-app message data from native side."); 106 | } 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/SetUserField.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using System; 3 | using Appboy.Models; 4 | using UnityEngine; 5 | using UnityEngine.SceneManagement; 6 | using UnityEngine.UI; 7 | using Utilities; 8 | 9 | public class SetUserField : MonoBehaviour { 10 | 11 | public InputField FirstNameField; 12 | public InputField LastNameField; 13 | public InputField EmailField; 14 | public InputField BirthdayMonthField; 15 | public InputField BirthdayDayField; 16 | public InputField BirthdayYearField; 17 | public InputField CountryField; 18 | public InputField HomeCityField; 19 | public InputField PhoneField; 20 | public InputField LanguageField; 21 | 22 | Gender gender; 23 | AppboyNotificationSubscriptionType emailSubscription = AppboyNotificationSubscriptionType.SUBSCRIBED; 24 | AppboyNotificationSubscriptionType pushSubscription = AppboyNotificationSubscriptionType.SUBSCRIBED; 25 | 26 | public void OnCancelButtonClick() { 27 | SceneManager.LoadScene(Constants.MainMenuScene); 28 | } 29 | 30 | public void OnDoneButtonClick() { 31 | Debug.Log(String.Format("Setting User Fields: First name:{0}, Last name:{1}, Email:{2}, Gender:{3}, " + 32 | "Date of birth:{4}/{5}/{6}, Country:{7}, Home city:{8}, Email subscription:{9}, " + 33 | "Push subscription:{10}, phone:{11}, language:{12}", FirstNameField.text, LastNameField.text, EmailField.text, 34 | gender, BirthdayMonthField.text, BirthdayDayField.text, BirthdayYearField.text, 35 | CountryField.text, HomeCityField.text, emailSubscription, pushSubscription, PhoneField.text, LanguageField.text)); 36 | 37 | if (UtilityMethods.textIsValid(FirstNameField.text)) { 38 | Appboy.AppboyBinding.SetUserFirstName(FirstNameField.text); 39 | } 40 | if (UtilityMethods.textIsValid(LastNameField.text)) { 41 | Appboy.AppboyBinding.SetUserLastName(LastNameField.text); 42 | } 43 | if (UtilityMethods.textIsValid(EmailField.text)) { 44 | Appboy.AppboyBinding.SetUserEmail(EmailField.text); 45 | } 46 | Appboy.AppboyBinding.SetUserGender(gender); 47 | if (UtilityMethods.textIsValid(BirthdayDayField.text) && 48 | UtilityMethods.textIsValid(BirthdayMonthField.text) && 49 | UtilityMethods.textIsValid(BirthdayYearField.text)) { 50 | int month, day, year; 51 | if (UtilityMethods.ParseStringToInt(BirthdayMonthField.text, Constants.BirthdayMonthParseErrorDescription, out month) && 52 | UtilityMethods.ParseStringToInt(BirthdayDayField.text, Constants.BirthdayDayParseErrorDescription, out day) && 53 | UtilityMethods.ParseStringToInt(BirthdayYearField.text, Constants.BirthdayYearParseErrorDescription, out year)) { 54 | Appboy.AppboyBinding.SetUserDateOfBirth(year, month, day); 55 | } 56 | } 57 | if (UtilityMethods.textIsValid(CountryField.text)) { 58 | Appboy.AppboyBinding.SetUserCountry(CountryField.text); 59 | } 60 | if (UtilityMethods.textIsValid(HomeCityField.text)) { 61 | Appboy.AppboyBinding.SetUserHomeCity(HomeCityField.text); 62 | } 63 | Appboy.AppboyBinding.SetUserEmailNotificationSubscriptionType(emailSubscription); 64 | Appboy.AppboyBinding.SetUserPushNotificationSubscriptionType(pushSubscription); 65 | if (UtilityMethods.textIsValid(PhoneField.text)) { 66 | Appboy.AppboyBinding.SetUserPhoneNumber(PhoneField.text); 67 | } 68 | if (UtilityMethods.textIsValid(LanguageField.text)) { 69 | Appboy.AppboyBinding.SetUserLanguage(LanguageField.text); 70 | } 71 | 72 | SceneManager.LoadScene(Constants.MainMenuScene); 73 | } 74 | 75 | public void OnMaleToggleValueChange(bool IsOn) { 76 | if (IsOn) { 77 | gender = Gender.Male; 78 | } 79 | } 80 | 81 | public void OnFemaleToggleValueChange(bool IsOn) { 82 | if (IsOn) { 83 | gender = Gender.Female; 84 | } 85 | } 86 | 87 | public void OnEmailOPTToggleValueChange(bool IsOn) { 88 | if (IsOn) { 89 | emailSubscription = AppboyNotificationSubscriptionType.OPTED_IN; 90 | } 91 | } 92 | 93 | public void OnEmailSubToggleValueChange(bool IsOn) { 94 | if (IsOn) { 95 | emailSubscription = AppboyNotificationSubscriptionType.SUBSCRIBED; 96 | } 97 | } 98 | 99 | public void OnEmailUnsubToggleValueChange(bool IsOn) { 100 | if (IsOn) { 101 | emailSubscription = AppboyNotificationSubscriptionType.UNSUBSCRIBED; 102 | } 103 | } 104 | 105 | public void OnPushOPTToggleValueChange(bool IsOn) { 106 | if (IsOn) { 107 | pushSubscription = AppboyNotificationSubscriptionType.OPTED_IN; 108 | } 109 | } 110 | 111 | public void OnPushSubToggleValueChange(bool IsOn) { 112 | if (IsOn) { 113 | pushSubscription = AppboyNotificationSubscriptionType.SUBSCRIBED; 114 | } 115 | } 116 | 117 | public void OnPushUnsubToggleValueChange(bool IsOn) { 118 | if (IsOn) { 119 | pushSubscription = AppboyNotificationSubscriptionType.UNSUBSCRIBED; 120 | } 121 | } 122 | 123 | 124 | } 125 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/BrazePlatform.cs: -------------------------------------------------------------------------------- 1 | using Appboy.Internal; 2 | using Appboy.Models; 3 | using Appboy.Utilities; 4 | using Appboy; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Runtime.InteropServices; 8 | using System.Text; 9 | using UnityEngine; 10 | 11 | public interface BrazePlatform { 12 | void LogCustomEvent(string eventName); 13 | void LogCustomEvent(string eventName, Dictionary properties); 14 | void LogPurchase(string productId, 15 | string currencyCode, 16 | decimal price, 17 | int quantity 18 | ); 19 | void LogPurchase( 20 | string productId, 21 | string currencyCode, 22 | decimal price, 23 | int quantity, 24 | Dictionary properties 25 | ); 26 | 27 | void ChangeUser(string userId, string sdkAuthSignature = null); 28 | void SetSdkAuthenticationSignature(string sdkAuthSignature); 29 | 30 | void SetUserFirstName(string firstName); 31 | void SetUserLastName(string lastName); 32 | void SetUserEmail(string email); 33 | void SetUserGender(Gender gender); 34 | void SetUserDateOfBirth(int year, int month, int day); 35 | void SetUserCountry(string country); 36 | void SetUserHomeCity(string city); 37 | void SetUserEmailNotificationSubscriptionType(AppboyNotificationSubscriptionType emailNotificationSubscriptionType); 38 | void SetUserPushNotificationSubscriptionType(AppboyNotificationSubscriptionType pushNotificationSubscriptionType); 39 | void SetUserPhoneNumber(string phoneNumber); 40 | void SetUserLanguage(string language); 41 | 42 | void SetCustomUserAttribute(string key, bool value); 43 | void SetCustomUserAttribute(string key, int value); 44 | void SetCustomUserAttribute(string key, float value); 45 | void SetCustomUserAttribute(string key, string value); 46 | void SetCustomUserAttribute(string key, Dictionary value, bool merge); 47 | void SetCustomUserAttribute(string key, List> value); 48 | void SetCustomUserAttributeToNow(string key); 49 | void SetCustomUserAttributeToSecondsFromEpoch(string key, long secondsFromEpoch); 50 | void UnsetCustomUserAttribute(string key); 51 | void IncrementCustomUserAttribute(string key, int incrementValue); 52 | void SetCustomUserAttributeArray(string key, List array, int size); 53 | void AddToCustomUserAttributeArray(string key, string value); 54 | void RemoveFromCustomUserAttributeArray(string key, string value); 55 | 56 | void SetUserLastKnownLocation( 57 | double latitude, 58 | double longitude, 59 | double? altitude = null, 60 | double? accuracy = null, 61 | double? verticalAccuracy = null 62 | ); 63 | 64 | #if UNITY_ANDROID 65 | void RegisterAppboyPushMessages(string registrationId); 66 | #elif UNITY_IOS 67 | void RegisterAppboyPushMessages(byte[] registrationDeviceToken); 68 | #endif 69 | void PromptUserForPushPermissions(bool provisional, PushPromptResponseReceived reponseDelegate = null); 70 | void SetPushTokenReceivedFromSystemDelegate(PushTokenReceivedFromSystem tokenDelegate); 71 | 72 | BrazeInAppMessageListener inAppMessageListener { get; set; } 73 | void LogInAppMessageClicked(string inAppMessageJSONString); 74 | void LogInAppMessageImpression(string inAppMessageJSONString); 75 | void LogInAppMessageButtonClicked(string inAppMessageJSONString, int buttonID); 76 | 77 | void RequestFeedRefresh(); 78 | void RequestFeedRefreshFromCache(); 79 | void LogFeedDisplayed(); 80 | 81 | #if UNITY_ANDROID 82 | void LogCardImpression(string cardId); 83 | void LogCardClicked(string cardId); 84 | #elif UNITY_IOS 85 | void LogCardImpression(string cardJSONString); 86 | void LogCardClicked(string cardJSONString); 87 | #endif 88 | void RequestContentCardsRefresh(); 89 | void RequestContentCardsRefreshFromCache(); 90 | void LogContentCardClicked(string contentCardString); 91 | void LogContentCardImpression(string contentCardString); 92 | void LogContentCardDismissed(string contentCardString); 93 | 94 | void WipeData(); 95 | void EnableSDK(); 96 | void DisableSDK(); 97 | 98 | string GetInstallTrackingId(); 99 | void SetAdTrackingEnabled(bool adTrackingEnabled, string googleAdvertisingId); 100 | void UpdateTrackingPropertyAllowList(TrackingPropertyAllowList allowList); 101 | void SetAttributionData(string network, string campaign, string adgroup, string creative); 102 | 103 | void RequestLocationInitialization(); 104 | void RequestGeofences(decimal latitude, decimal longitude); 105 | 106 | void RequestImmediateDataFlush(); 107 | void AddAlias(string alias, string label); 108 | void ConfigureListener(BrazeUnityMessageType messageType, string gameobject, string method); 109 | void SetInAppMessageDisplayAction(BrazeUnityInAppMessageDisplayActionType actionType); 110 | void DisplayNextInAppMessage(); 111 | void HideCurrentInAppMessage(); 112 | void DisplayContentCards(); 113 | void AddToSubscriptionGroup(string id); 114 | void RemoveFromSubscriptionGroup(string id); 115 | void RefreshFeatureFlags(); 116 | #nullable enable 117 | FeatureFlag? GetFeatureFlag(string id); 118 | #nullable disable 119 | List GetAllFeatureFlags(); 120 | void LogFeatureFlagImpression(string id); 121 | } 122 | -------------------------------------------------------------------------------- /Assets/Plugins/Appboy/Models/InAppMessage/InAppMessageBase.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using Appboy.Utilities; 3 | using System; 4 | using System.Collections; 5 | using System.Collections.Generic; 6 | using System.Text; 7 | using UnityEngine; 8 | 9 | namespace Appboy.Models.InAppMessage { 10 | public abstract class InAppMessageBase : IInAppMessage { 11 | private const int DefaultDuration = 5000; 12 | protected string _jsonString; 13 | private bool _clickLogged = false; 14 | private bool _impressionLogged = false; 15 | private int _duration; 16 | 17 | // The background color of the in-app message. 18 | public Color? BackgroundColor { get; set; } 19 | 20 | public Color? TextColor { get; set; } 21 | 22 | // The font awesome unicode string of the in-app message icon. 23 | public string Icon { get; set; } 24 | 25 | // The color of the icon text. 26 | public Color? IconColor { get; set; } 27 | 28 | // The color of the icon background. 29 | public Color? IconBackgroundColor { get; set; } 30 | 31 | public string ImageURI { get; set; } 32 | 33 | public string Message { get; set; } 34 | 35 | public Dictionary Extras { get; set; } 36 | 37 | public ClickAction InAppClickAction { get; private set; } 38 | 39 | public string URI { get; private set; } 40 | 41 | public DismissType InAppDismissType { get; set; } 42 | 43 | // The number of seconds that should elapse before the in-app message is automatically dismissed. 44 | public int Duration { 45 | get { 46 | return _duration; 47 | } 48 | set { 49 | _duration = (value <= 0 ? DefaultDuration : value); 50 | } 51 | } 52 | 53 | // Whether the in-app message is a test send. 54 | public bool IsTestSend { get; } 55 | 56 | public override string ToString() { 57 | return String.Format("{0}: Message={1}, InAppClickAction={2}, URI={3}, InAppDismissType={4}, Duration={5}, Extras={6}, BackgroundColor={7}" + 58 | "TextColor={8}, Icon={9}, IconColor={10}, IconBackgroundColor={11}, ImageURI={12}, IsTestSend={13}", 59 | this.GetType().Name, Message, InAppClickAction, URI, InAppDismissType, Duration, CollectionUtils.DictionaryToString(Extras), 60 | BackgroundColor, TextColor, Icon, IconColor, IconBackgroundColor, ImageURI, IsTestSend); 61 | } 62 | 63 | protected InAppMessageBase() { 64 | } 65 | 66 | public InAppMessageBase(JSONObject json) { 67 | if (json == null) { 68 | throw new ArgumentNullException("Received null JSONObject."); 69 | } 70 | _jsonString = json.ToString(); 71 | 72 | Message = json[InAppMessageConstants.MessageKey]; 73 | if (json[InAppMessageConstants.ExtrasKey] != null) { 74 | Extras = JsonUtils.JSONObjectToDictionary(json[InAppMessageConstants.ExtrasKey].AsObject); 75 | } 76 | InAppClickAction = (ClickAction)EnumUtils.TryParse(typeof(ClickAction), json[InAppMessageConstants.ClickActionKey], true, ClickAction.NEWS_FEED); 77 | URI = json[InAppMessageConstants.URIKey]; 78 | ImageURI = json[InAppMessageConstants.ImageURLKey]; 79 | if (InAppClickAction == ClickAction.URI && URI == null) { 80 | Debug.Log("Received ClickAction.URI but URI was null. Setting click action to NONE."); 81 | InAppClickAction = ClickAction.NONE; 82 | } 83 | InAppDismissType = (DismissType)EnumUtils.TryParse(typeof(DismissType), json[InAppMessageConstants.DismissTypeKey], true, DismissType.AUTO_DISMISS); 84 | Duration = json[InAppMessageConstants.DurationKey].AsInt; 85 | BackgroundColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.BackgroundColorKey]); 86 | TextColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.TextColorKey]); 87 | Icon = json[InAppMessageConstants.IconKey]; 88 | IconColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.IconColorKey]); 89 | IconBackgroundColor = ColorUtils.HexToColor((int)json[InAppMessageConstants.IconBackgroundColorKey]); 90 | IsTestSend = json[InAppMessageConstants.IsTestSendKey].AsBool; 91 | } 92 | 93 | public void LogClicked() { 94 | if (!_clickLogged) { 95 | _clickLogged = true; 96 | AppboyBinding.LogInAppMessageClicked(_jsonString); 97 | } else { 98 | Debug.Log("Already logged a click. Doing nothing."); 99 | } 100 | } 101 | 102 | public void LogImpression() { 103 | if (!_impressionLogged) { 104 | _impressionLogged = true; 105 | AppboyBinding.LogInAppMessageImpression(_jsonString); 106 | } else { 107 | Debug.Log("Already logged an impression. Doing nothing."); 108 | } 109 | } 110 | 111 | // Set InAppClickAction to be NEWS_FEED or NONE 112 | public bool SetInAppClickAction(ClickAction clickAction) { 113 | if (clickAction != ClickAction.URI) { 114 | InAppClickAction = clickAction; 115 | URI = null; 116 | return true; 117 | } else { 118 | Debug.Log("A non-null URI is required in order to set the InAppClickAction to URI."); 119 | return false; 120 | } 121 | } 122 | 123 | // Set InAppClickAction to be URI 124 | public bool SetInAppClickAction(ClickAction clickAction, string uri) { 125 | if (uri != null && clickAction == ClickAction.URI) { 126 | InAppClickAction = clickAction; 127 | URI = uri; 128 | return true; 129 | } else { 130 | return SetInAppClickAction(clickAction); 131 | } 132 | } 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /unity-samples/Assets/Scripts/SetCustomAttributes.cs: -------------------------------------------------------------------------------- 1 | using Appboy; 2 | using System; 3 | using UnityEngine; 4 | using UnityEngine.SceneManagement; 5 | using UnityEngine.UI; 6 | using Utilities; 7 | using System.Collections.Generic; 8 | 9 | public class SetCustomAttributes : MonoBehaviour { 10 | 11 | public InputField BoolKeyField; 12 | public Toggle BoolToggle; 13 | public InputField IntKeyField; 14 | public InputField IntValueField; 15 | public InputField FloatKeyField; 16 | public InputField FloatValueField; 17 | public InputField StringKeyField; 18 | public InputField StringValueField; 19 | public InputField DateKeyField; 20 | public InputField NestedKeyField; 21 | public InputField MergeKeyField; 22 | public Text DateSecondLabel; 23 | public InputField DateSecondValueField; 24 | public Toggle DateNowToggle; 25 | public InputField UnsetKeyField; 26 | 27 | public void OnBackButtonClick() { 28 | SceneManager.LoadScene(Constants.CustomAttributesSettingScene); 29 | } 30 | 31 | public void OnSetBoolButtonClick() { 32 | if (UtilityMethods.textIsValid(BoolKeyField.text)) { 33 | Debug.Log(String.Format("Setting bool custom attribute {0} to {1}", BoolKeyField.text, BoolToggle.isOn)); 34 | Appboy.AppboyBinding.SetCustomUserAttribute(BoolKeyField.text, BoolToggle.isOn); 35 | } 36 | } 37 | 38 | public void OnSetIntButtonClick() { 39 | if (UtilityMethods.textIsValid(IntKeyField.text) && UtilityMethods.textIsValid(IntValueField.text)) { 40 | int value; 41 | if (UtilityMethods.ParseStringToInt(IntValueField.text, Constants.CustomAttributeIntParseErrorDescription, out value)) { 42 | Debug.Log(String.Format("Setting int custom attribute {0} to {1}", IntKeyField.text, IntValueField.text)); 43 | Appboy.AppboyBinding.SetCustomUserAttribute(IntKeyField.text, value); 44 | } 45 | } 46 | } 47 | 48 | public void OnSetFloatButtonClick() { 49 | if (UtilityMethods.textIsValid(FloatValueField.text) && UtilityMethods.textIsValid(FloatKeyField.text)) { 50 | float value; 51 | try { 52 | value = float.Parse(FloatValueField.text); 53 | } catch { 54 | Debug.Log(String.Format("The float custom attribute value {0} isn't valid", FloatValueField.text)); 55 | return; 56 | } 57 | Debug.Log(String.Format("Setting float custom attribute {0} to {1}", FloatKeyField.text, value)); 58 | Appboy.AppboyBinding.SetCustomUserAttribute(FloatKeyField.text, value); 59 | } 60 | } 61 | 62 | public void OnSetStringButtonClick() { 63 | if (UtilityMethods.textIsValid(StringKeyField.text) && UtilityMethods.textIsValid(StringValueField.text)) { 64 | Debug.Log(String.Format("Setting float custom attribute {0} to {1}", StringKeyField.text, StringValueField.text)); 65 | Appboy.AppboyBinding.SetCustomUserAttribute(StringKeyField.text, StringValueField.text); 66 | } 67 | } 68 | 69 | public void OnSetNestedButtonClick() { 70 | Dictionary nested = new Dictionary(); 71 | nested.Add("key int", 2); 72 | nested.Add("key string", "second value"); 73 | nested.Add("key bool", true); 74 | nested.Add("key float", 20.2); 75 | Dictionary nestedNested = new Dictionary(); 76 | nestedNested.Add("substring", "2nd level string"); 77 | nested.Add("key nested", nestedNested); 78 | 79 | if (UtilityMethods.textIsValid(NestedKeyField.text)) { 80 | Debug.Log(String.Format("Setting nested custom attribute {0} to nested structure", NestedKeyField.text)); 81 | Appboy.AppboyBinding.SetCustomUserAttribute(NestedKeyField.text, nested); 82 | } else { 83 | Debug.Log("Nested key not set"); 84 | } 85 | } 86 | 87 | public void OnSetNestedWithMergeButtonClick() { 88 | Dictionary nested = new Dictionary(); 89 | nested.Add("merge key int", 2); 90 | nested.Add("merge key string", "second value"); 91 | nested.Add("merge key bool", true); 92 | nested.Add("merge key float", 20.2); 93 | 94 | if (UtilityMethods.textIsValid(MergeKeyField.text)) { 95 | Debug.Log(String.Format("Merging nested custom attribute {0} with nested structrure", MergeKeyField.text)); 96 | Appboy.AppboyBinding.SetCustomUserAttribute(MergeKeyField.text, nested, true); 97 | } else { 98 | Debug.Log("Merge key not set"); 99 | } 100 | } 101 | 102 | public void OnSetDateButtonClick() { 103 | if (UtilityMethods.textIsValid(DateKeyField.text)) { 104 | if (DateNowToggle.isOn) { 105 | Debug.Log(String.Format("Setting date custom attribute {0} to Now", DateKeyField.text)); 106 | Appboy.AppboyBinding.SetCustomUserAttributeToNow(DateKeyField.text); 107 | } else { 108 | if (UtilityMethods.textIsValid(DateSecondValueField.text)) { 109 | long value; 110 | try { 111 | value = System.Convert.ToInt64(DateSecondValueField.text); 112 | } catch { 113 | Debug.Log(String.Format("The date custom attribute value in second {0} isn't valid", DateSecondValueField.text)); 114 | return; 115 | } 116 | Debug.Log(String.Format("Setting date custom attribute {0} to {1} seconds", DateKeyField.text, value)); 117 | Appboy.AppboyBinding.SetCustomUserAttributeToSecondsFromEpoch(DateKeyField.text, value); 118 | } 119 | } 120 | } 121 | } 122 | 123 | public void OnUnsetButtonClick() { 124 | if (UtilityMethods.textIsValid(UnsetKeyField.text)) { 125 | Debug.Log(String.Format("Unsetting custom attribute {0}", UnsetKeyField.text)); 126 | Appboy.AppboyBinding.UnsetCustomUserAttribute(UnsetKeyField.text); 127 | } 128 | } 129 | 130 | public void OnNowToggleValueChange() { 131 | DateSecondValueField.gameObject.SetActive(!DateNowToggle.isOn); 132 | DateSecondLabel.gameObject.SetActive(!DateNowToggle.isOn); 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /unity-samples/ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "ignore": false, 8 | "defaultInstantiationMode": 0, 9 | "supportsModification": true 10 | }, 11 | { 12 | "userAdded": false, 13 | "type": "UnityEditor.Animations.AnimatorController", 14 | "ignore": false, 15 | "defaultInstantiationMode": 0, 16 | "supportsModification": true 17 | }, 18 | { 19 | "userAdded": false, 20 | "type": "UnityEngine.AnimatorOverrideController", 21 | "ignore": false, 22 | "defaultInstantiationMode": 0, 23 | "supportsModification": true 24 | }, 25 | { 26 | "userAdded": false, 27 | "type": "UnityEditor.Audio.AudioMixerController", 28 | "ignore": false, 29 | "defaultInstantiationMode": 0, 30 | "supportsModification": true 31 | }, 32 | { 33 | "userAdded": false, 34 | "type": "UnityEngine.ComputeShader", 35 | "ignore": true, 36 | "defaultInstantiationMode": 1, 37 | "supportsModification": true 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEngine.Cubemap", 42 | "ignore": false, 43 | "defaultInstantiationMode": 0, 44 | "supportsModification": true 45 | }, 46 | { 47 | "userAdded": false, 48 | "type": "UnityEngine.GameObject", 49 | "ignore": false, 50 | "defaultInstantiationMode": 0, 51 | "supportsModification": true 52 | }, 53 | { 54 | "userAdded": false, 55 | "type": "UnityEditor.LightingDataAsset", 56 | "ignore": false, 57 | "defaultInstantiationMode": 0, 58 | "supportsModification": false 59 | }, 60 | { 61 | "userAdded": false, 62 | "type": "UnityEngine.LightingSettings", 63 | "ignore": false, 64 | "defaultInstantiationMode": 0, 65 | "supportsModification": true 66 | }, 67 | { 68 | "userAdded": false, 69 | "type": "UnityEngine.Material", 70 | "ignore": false, 71 | "defaultInstantiationMode": 0, 72 | "supportsModification": true 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEditor.MonoScript", 77 | "ignore": true, 78 | "defaultInstantiationMode": 1, 79 | "supportsModification": true 80 | }, 81 | { 82 | "userAdded": false, 83 | "type": "UnityEngine.PhysicMaterial", 84 | "ignore": false, 85 | "defaultInstantiationMode": 0, 86 | "supportsModification": true 87 | }, 88 | { 89 | "userAdded": false, 90 | "type": "UnityEngine.PhysicsMaterial2D", 91 | "ignore": false, 92 | "defaultInstantiationMode": 0, 93 | "supportsModification": true 94 | }, 95 | { 96 | "userAdded": false, 97 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 98 | "ignore": false, 99 | "defaultInstantiationMode": 0, 100 | "supportsModification": true 101 | }, 102 | { 103 | "userAdded": false, 104 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 105 | "ignore": false, 106 | "defaultInstantiationMode": 0, 107 | "supportsModification": true 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Rendering.VolumeProfile", 112 | "ignore": false, 113 | "defaultInstantiationMode": 0, 114 | "supportsModification": true 115 | }, 116 | { 117 | "userAdded": false, 118 | "type": "UnityEditor.SceneAsset", 119 | "ignore": false, 120 | "defaultInstantiationMode": 0, 121 | "supportsModification": false 122 | }, 123 | { 124 | "userAdded": false, 125 | "type": "UnityEngine.Shader", 126 | "ignore": true, 127 | "defaultInstantiationMode": 1, 128 | "supportsModification": true 129 | }, 130 | { 131 | "userAdded": false, 132 | "type": "UnityEngine.ShaderVariantCollection", 133 | "ignore": true, 134 | "defaultInstantiationMode": 1, 135 | "supportsModification": true 136 | }, 137 | { 138 | "userAdded": false, 139 | "type": "UnityEngine.Texture", 140 | "ignore": false, 141 | "defaultInstantiationMode": 0, 142 | "supportsModification": true 143 | }, 144 | { 145 | "userAdded": false, 146 | "type": "UnityEngine.Texture2D", 147 | "ignore": false, 148 | "defaultInstantiationMode": 0, 149 | "supportsModification": true 150 | }, 151 | { 152 | "userAdded": false, 153 | "type": "UnityEngine.Timeline.TimelineAsset", 154 | "ignore": false, 155 | "defaultInstantiationMode": 0, 156 | "supportsModification": true 157 | } 158 | ], 159 | "defaultDependencyTypeInfo": { 160 | "userAdded": false, 161 | "type": "", 162 | "ignore": false, 163 | "defaultInstantiationMode": 1, 164 | "supportsModification": true 165 | }, 166 | "newSceneOverride": 0 167 | } --------------------------------------------------------------------------------