diff --git a/Runtime/Internal/BridgeCallbackHandler.cs b/Runtime/Internal/BridgeCallbackHandler.cs index 33d1a0c..5bdf53d 100644 --- a/Runtime/Internal/BridgeCallbackHandler.cs +++ b/Runtime/Internal/BridgeCallbackHandler.cs @@ -254,7 +254,7 @@ private static long GetLong(Dictionary data, string key, long de return null; } - private static SubscriptionStatus DeserializeSubscriptionStatus(Dictionary data) + internal static SubscriptionStatus DeserializeSubscriptionStatus(Dictionary data) { if (data == null) return SubscriptionStatus.CreateUnknown(); diff --git a/Runtime/Superwall.cs b/Runtime/Superwall.cs index 0cb96d6..e3743f1 100644 --- a/Runtime/Superwall.cs +++ b/Runtime/Superwall.cs @@ -229,14 +229,9 @@ public SubscriptionStatus SubscriptionStatus if (!string.IsNullOrEmpty(json)) { var dict = Json.Deserialize(json) as Dictionary; - if (dict != null && dict.ContainsKey("type")) + if (dict != null) { - string type = dict["type"] as string; - switch (type) - { - case "active": return SubscriptionStatus.CreateActive(new System.Collections.Generic.List()); - case "inactive": return SubscriptionStatus.CreateInactive(); - } + return BridgeCallbackHandler.DeserializeSubscriptionStatus(dict); } } return SubscriptionStatus.CreateUnknown(); @@ -244,7 +239,17 @@ public SubscriptionStatus SubscriptionStatus set { var data = new Dictionary(); - data["type"] = value.Type.ToString(); + data["type"] = value.Type.ToString().ToLowerInvariant(); + if (value is SubscriptionStatus.ActiveStatus active && active.Entitlements != null) + { + var entitlements = new List(); + foreach (var entitlement in active.Entitlements) + { + if (entitlement == null || !entitlement.IsActive || string.IsNullOrEmpty(entitlement.Id)) continue; + entitlements.Add(new Dictionary { { "id", entitlement.Id } }); + } + data["entitlements"] = entitlements; + } CallNative_SetSubscriptionStatus(Json.Serialize(data)); } }