diff --git a/src/Packages/Audience/Runtime/AudienceConfig.cs b/src/Packages/Audience/Runtime/AudienceConfig.cs new file mode 100644 index 000000000..759645562 --- /dev/null +++ b/src/Packages/Audience/Runtime/AudienceConfig.cs @@ -0,0 +1,17 @@ +namespace Immutable.Audience +{ + /// Configuration passed to . + public class AudienceConfig + { + public string PublishableKey { get; set; } + public ConsentLevel Consent { get; set; } = ConsentLevel.None; + /// + /// Distribution platform the game is running on. + /// Use for common values, or pass any custom string. + /// + public string DistributionPlatform { get; set; } + public bool Debug { get; set; } = false; + public int FlushIntervalSeconds { get; set; } = Constants.DefaultFlushIntervalSeconds; + public int FlushSize { get; set; } = Constants.DefaultFlushSize; + } +} diff --git a/src/Packages/Audience/Runtime/AudienceConfig.cs.meta b/src/Packages/Audience/Runtime/AudienceConfig.cs.meta new file mode 100644 index 000000000..ab5d113be --- /dev/null +++ b/src/Packages/Audience/Runtime/AudienceConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0815c3d8a1164cd8811176be7d640aff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Audience/Runtime/AudienceError.cs b/src/Packages/Audience/Runtime/AudienceError.cs new file mode 100644 index 000000000..3e57ada0b --- /dev/null +++ b/src/Packages/Audience/Runtime/AudienceError.cs @@ -0,0 +1,23 @@ +using System; + +namespace Immutable.Audience +{ + public enum AudienceErrorCode + { + FlushFailed, + ValidationRejected, + ConsentSyncFailed, + NetworkError + } + + public class AudienceError : Exception + { + public AudienceErrorCode Code { get; } + + public AudienceError(AudienceErrorCode code, string message) + : base(message) + { + Code = code; + } + } +} diff --git a/src/Packages/Audience/Runtime/AudienceError.cs.meta b/src/Packages/Audience/Runtime/AudienceError.cs.meta new file mode 100644 index 000000000..b1b7d9574 --- /dev/null +++ b/src/Packages/Audience/Runtime/AudienceError.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93fbfe0c15974366b7a16693ceedb4df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Audience/Runtime/ConsentLevel.cs b/src/Packages/Audience/Runtime/ConsentLevel.cs new file mode 100644 index 000000000..66e518c05 --- /dev/null +++ b/src/Packages/Audience/Runtime/ConsentLevel.cs @@ -0,0 +1,13 @@ +namespace Immutable.Audience +{ + /// Controls what the Audience SDK tracks. + public enum ConsentLevel + { + /// SDK inert. No events queued or sent. No IDs persisted to disk. + None, + /// Track events with anonymousId only. Identify/Alias discarded with warning. + Anonymous, + /// All events. Identify/Alias send. userId attached to track events. + Full + } +} diff --git a/src/Packages/Audience/Runtime/ConsentLevel.cs.meta b/src/Packages/Audience/Runtime/ConsentLevel.cs.meta new file mode 100644 index 000000000..4f6dee409 --- /dev/null +++ b/src/Packages/Audience/Runtime/ConsentLevel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03ccd5190cb24864a2cde2c94f68b7f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Audience/Runtime/Core.meta b/src/Packages/Audience/Runtime/Core.meta new file mode 100644 index 000000000..e353cf31f --- /dev/null +++ b/src/Packages/Audience/Runtime/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fecac2b913974672addc6aa5d735c058 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Audience/Runtime/Core/Constants.cs b/src/Packages/Audience/Runtime/Core/Constants.cs new file mode 100644 index 000000000..6573730d8 --- /dev/null +++ b/src/Packages/Audience/Runtime/Core/Constants.cs @@ -0,0 +1,40 @@ +namespace Immutable.Audience +{ + internal static class Constants + { + internal const string TestKeyPrefix = "pk_imapik-test-"; + internal const string SandboxBaseUrl = "https://api.sandbox.immutable.com"; + internal const string ProductionBaseUrl = "https://api.immutable.com"; + + internal const string MessagesPath = "/v1/audience/messages"; + internal const string ConsentPath = "/v1/audience/tracking-consent"; + internal const string DataPath = "/v1/audience/data"; + + internal const int DefaultFlushIntervalSeconds = 5; + internal const int DefaultFlushSize = 20; + internal const int MaxBatchSize = 100; + internal const int StaleEventDays = 30; + + internal const string LibraryName = "com.immutable.audience"; + internal const string Surface = "unity"; + internal const string ConsentSource = "UnitySDK"; + + internal static string BaseUrl(string publishableKey) => + publishableKey != null && publishableKey.StartsWith(TestKeyPrefix) + ? SandboxBaseUrl + : ProductionBaseUrl; + } + + /// + /// String constants for common game distribution platforms. + /// Any string is accepted -- studios are not limited to these values. + /// + public static class DistributionPlatforms + { + public const string Steam = "steam"; + public const string Epic = "epic"; + public const string GOG = "gog"; + public const string Itch = "itch"; + public const string Standalone = "standalone"; + } +} diff --git a/src/Packages/Audience/Runtime/Core/Constants.cs.meta b/src/Packages/Audience/Runtime/Core/Constants.cs.meta new file mode 100644 index 000000000..d222e9aa5 --- /dev/null +++ b/src/Packages/Audience/Runtime/Core/Constants.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecbefc60c65a4c0f961601a2a47b5c8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Audience/Runtime/ImmutableAudience.cs b/src/Packages/Audience/Runtime/ImmutableAudience.cs index 677c80370..6c882b7b7 100644 --- a/src/Packages/Audience/Runtime/ImmutableAudience.cs +++ b/src/Packages/Audience/Runtime/ImmutableAudience.cs @@ -2,11 +2,17 @@ namespace Immutable.Audience { /// /// Entry point for the Immutable Audience SDK. - /// Call Init once on startup, then use the static methods from any thread. + /// Call once on startup, then use the static methods from any thread. /// public static class ImmutableAudience { - // Core types (AudienceConfig, ConsentLevel, AudienceError) and Init - // are added in the next PR once those types exist. See SDK-119. + // Scaffold only -- implementation follows in subsequent sub-issues (see SDK-99). + + /// Initialise the SDK. Call once, typically in your game's entry scene. + public static void Init(AudienceConfig config) + { + throw new System.NotImplementedException( + "Immutable Audience SDK: implementation pending. See SDK-99."); + } } } diff --git a/src/Packages/Audience/Runtime/ImmutableAudience.cs.meta b/src/Packages/Audience/Runtime/ImmutableAudience.cs.meta index 6e249f726..bf98375d9 100644 --- a/src/Packages/Audience/Runtime/ImmutableAudience.cs.meta +++ b/src/Packages/Audience/Runtime/ImmutableAudience.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9e8335985aa845dbb0edd341b6b4ecd4 +guid: 6c42c74555864965bb48ea6a2bd9c915 MonoImporter: externalObjects: {} serializedVersion: 2