diff --git a/.gitignore b/.gitignore index 0d48eae..6863e91 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,19 @@ -**.meta -*.meta .DS_Store *.log +*.vs +*.vscode +*.vsconfig +/obj Logs/ Packages/ -ProjectSettings/ Temp/ Library/ /*/outputs/ -adapty-*.unitypackage #android studio +*.sln +*.csproj build gen .gradle diff --git a/AdaptyUnityProject/.gitignore b/AdaptyUnityProject/.gitignore deleted file mode 100644 index 8150f04..0000000 --- a/AdaptyUnityProject/.gitignore +++ /dev/null @@ -1,70 +0,0 @@ -# This .gitignore file should be placed at the root of your Unity project directory -# -# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore -# -/[Ll]ibrary/ -/[Tt]emp/ -/[Oo]bj/ -/[Bb]uild/ -/[Bb]uilds/ -/[Ll]ogs/ -/[Uu]ser[Ss]ettings/ - -# MemoryCaptures can get excessive in size. -# They also could contain extremely sensitive data -/[Mm]emoryCaptures/ - -# Asset meta data should only be ignored when the corresponding asset is also ignored -!/[Aa]ssets/**/*.meta - -# Uncomment this line if you wish to ignore the asset store tools plugin -# /[Aa]ssets/AssetStoreTools* - -# Autogenerated Jetbrains Rider plugin -/[Aa]ssets/Plugins/Editor/JetBrains* - -# Visual Studio cache directory -.vs/ - -# Gradle cache directory -.gradle/ - -# Autogenerated VS/MD/Consulo solution and project files -ExportedObj/ -.consulo/ -*.csproj -*.unityproj -*.sln -*.suo -*.tmp -*.user -*.userprefs -*.pidb -*.booproj -*.svd -*.pdb -*.mdb -*.opendb -*.VC.db - -# Unity3D generated meta files -*.pidb.meta -*.pdb.meta -*.mdb.meta - -# Unity3D generated file on crash reports -sysinfo.txt - -# Builds -*.apk -*.unitypackage - -# Crashlytics generated file -crashlytics-build.properties - -# Packed Addressables -/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* - -# Temporary auto-generated Android Assets -/[Aa]ssets/[Ss]treamingAssets/aa.meta -/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/AdaptyUnityProject/.vscode/settings.json b/AdaptyUnityProject/.vscode/settings.json deleted file mode 100644 index 1060b04..0000000 --- a/AdaptyUnityProject/.vscode/settings.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "files.exclude": - { - "**/.DS_Store":true, - "**/.git":true, - "**/.gitignore":true, - "**/.gitmodules":true, - "**/*.booproj":true, - "**/*.pidb":true, - "**/*.suo":true, - "**/*.user":true, - "**/*.userprefs":true, - "**/*.unityproj":true, - "**/*.dll":true, - "**/*.exe":true, - "**/*.pdf":true, - "**/*.mid":true, - "**/*.midi":true, - "**/*.wav":true, - "**/*.gif":true, - "**/*.ico":true, - "**/*.jpg":true, - "**/*.jpeg":true, - "**/*.png":true, - "**/*.psd":true, - "**/*.tga":true, - "**/*.tif":true, - "**/*.tiff":true, - "**/*.3ds":true, - "**/*.3DS":true, - "**/*.fbx":true, - "**/*.FBX":true, - "**/*.lxo":true, - "**/*.LXO":true, - "**/*.ma":true, - "**/*.MA":true, - "**/*.obj":true, - "**/*.OBJ":true, - "**/*.asset":true, - "**/*.cubemap":true, - "**/*.flare":true, - "**/*.mat":true, - "**/*.meta":true, - "**/*.prefab":true, - "**/*.unity":true, - "build/":true, - "Build/":true, - "Library/":true, - "library/":true, - "obj/":true, - "Obj/":true, - "ProjectSettings/":true, - "temp/":true, - "Temp/":true - } -} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/Adapty.cs b/AdaptyUnityProject/Assets/Adapty/Adapty.cs deleted file mode 100755 index 10358e6..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Adapty.cs +++ /dev/null @@ -1,834 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace AdaptySDK { - public class Adapty { - public static readonly string pluginVersion = "1.0.0"; - - static DataState stringToDataState(string state) { - switch (state) { - case "cached": - return DataState.Cached; - case "synced": - return DataState.Synced; - default: - return DataState.Unknown; - } - } - - static PeriodUnit stringToPeriodUnit(string unit) { - switch (unit) { - case "day": - return PeriodUnit.Day; - case "week": - return PeriodUnit.Week; - case "month": - return PeriodUnit.Month; - case "year": - return PeriodUnit.Year; - default: - return PeriodUnit.Unknown; - } - } - - static string periodUnitToString(PeriodUnit unit){ - switch (unit) { - case PeriodUnit.Day: - return "day"; - case PeriodUnit.Week: - return "week"; - case PeriodUnit.Month: - return "month"; - case PeriodUnit.Year: - return "year"; - default: - return "unknown"; - } - } - - static PaymentMode stringToPaymentMode(string mode) { - switch (mode) { - case "free_trial": - return PaymentMode.FreeTrial; - case "pay_as_you_go": - return PaymentMode.PayAsYouGo; - case "pay_up_front": - return PaymentMode.PayUpFront; - default: - return PaymentMode.Unknown; - } - } - - static System.DateTime stringToDateTime(string date) { - return System.DateTime.Parse(date, System.Globalization.CultureInfo.InvariantCulture); - } - - static AdaptyError dictionaryToAdaptyError(Dictionary dictionary) { - AdaptyError obj = new AdaptyError(); - if (dictionary.ContainsKey("message")) { - obj.message = (string)dictionary["message"]; - } - if (dictionary.ContainsKey("code")) { - obj.code = (long)dictionary["code"]; - } - return obj; - } - - static PaywallModel dictionaryToPaywallModel(Dictionary dictionary) { - PaywallModel obj = new PaywallModel(); - if (dictionary.ContainsKey("developerId")) { - obj.developerId = (string)dictionary["developerId"]; - } - if (dictionary.ContainsKey("variationId")) { - obj.variationId = (string)dictionary["variationId"]; - } - if (dictionary.ContainsKey("revision")) { - obj.revision = (long)dictionary["revision"]; - } - if (dictionary.ContainsKey("isPromo")) { - obj.isPromo = (bool)dictionary["isPromo"]; - } - if (dictionary.ContainsKey("products")) { - List products = (List)dictionary["products"]; - List array = new List(); - foreach (object product in products) { - array.Add(dictionaryToProductModel((Dictionary)product)); - } - obj.products = array.ToArray(); - } - if (dictionary.ContainsKey("visualPaywall")) { - obj.visualPaywall = (string)dictionary["visualPaywall"]; - } - if (dictionary.ContainsKey("customPayload")) { - obj.customPayload = (Dictionary)dictionary["customPayload"]; - } - return obj; - } - - static ProductSubscriptionPeriodModel dictionaryToProductSubscriptionPeriodModel(Dictionary dictionary) { - ProductSubscriptionPeriodModel obj = new ProductSubscriptionPeriodModel(); - if (dictionary.ContainsKey("unit")) { - obj.unit = stringToPeriodUnit((string)dictionary["unit"]); - } - if (dictionary.ContainsKey("numberOfUnits")) { - obj.numberOfUnits = (long)dictionary["numberOfUnits"]; - } - return obj; - } - - static ProductDiscountModel dictionaryToProductDiscountModel(Dictionary dictionary) { - ProductDiscountModel obj = new ProductDiscountModel(); - if (dictionary.ContainsKey("price")) { - obj.price = decimal.Parse((string)dictionary["price"]); - } - if (dictionary.ContainsKey("identifier")) { - obj.identifier = (string)dictionary["identifier"]; - } - if (dictionary.ContainsKey("subscriptionPeriod")) { - obj.subscriptionPeriod = dictionaryToProductSubscriptionPeriodModel((Dictionary)dictionary["subscriptionPeriod"]); - } - if (dictionary.ContainsKey("numberOfPeriods")) { - obj.numberOfPeriods = (long)dictionary["numberOfPeriods"]; - } - if (dictionary.ContainsKey("paymentMode")) { - obj.paymentMode = stringToPaymentMode((string)dictionary["paymentMode"]); - } - if (dictionary.ContainsKey("localizedPrice")) { - obj.localizedPrice = (string)dictionary["localizedPrice"]; - } - if (dictionary.ContainsKey("localizedSubscriptionPeriod")) { - obj.localizedSubscriptionPeriod = (string)dictionary["localizedSubscriptionPeriod"]; - } - if (dictionary.ContainsKey("localizedNumberOfPeriods")) { - obj.localizedNumberOfPeriods = (string)dictionary["localizedNumberOfPeriods"]; - } - return obj; - } - - static AccessLevelInfoModel dictionaryToAccessLevelInfoModel(Dictionary dictionary) { - AccessLevelInfoModel obj = new AccessLevelInfoModel(); - if (dictionary.ContainsKey("id")) { - obj.id = (string)dictionary["id"]; - } - if (dictionary.ContainsKey("isActive")) { - obj.isActive = (bool)dictionary["isActive"]; - } - if (dictionary.ContainsKey("vendorProductId")) { - obj.vendorProductId = (string)dictionary["vendorProductId"]; - } - if (dictionary.ContainsKey("store")) { - obj.store = (string)dictionary["store"]; - } - if (dictionary.ContainsKey("activatedAt")) { - obj.activatedAt = stringToDateTime((string)dictionary["activatedAt"]); - } - if (dictionary.ContainsKey("renewedAt")) { - obj.renewedAt = stringToDateTime((string)dictionary["renewedAt"]); - } - if (dictionary.ContainsKey("expiresAt")) { - obj.expiresAt = stringToDateTime((string)dictionary["expiresAt"]); - } - if (dictionary.ContainsKey("isLifetime")) { - obj.isLifetime = (bool)dictionary["isLifetime"]; - } - if (dictionary.ContainsKey("activeIntroductoryOfferType")) { - obj.activeIntroductoryOfferType = (string)dictionary["activeIntroductoryOfferType"]; - } - if (dictionary.ContainsKey("activePromotionalOfferType")) { - obj.activePromotionalOfferType = (string)dictionary["activePromotionalOfferType"]; - } - if (dictionary.ContainsKey("willRenew")) { - obj.willRenew = (bool)dictionary["willRenew"]; - } - if (dictionary.ContainsKey("isInGracePeriod")) { - obj.isInGracePeriod = (bool)dictionary["isInGracePeriod"]; - } - if (dictionary.ContainsKey("unsubscribedAt")) { - obj.unsubscribedAt = stringToDateTime((string)dictionary["unsubscribedAt"]); - } - if (dictionary.ContainsKey("billingIssueDetectedAt")) { - obj.billingIssueDetectedAt = stringToDateTime((string)dictionary["billingIssueDetectedAt"]); - } - if (dictionary.ContainsKey("vendorTransactionId")) { - obj.vendorTransactionId = (string)dictionary["vendorTransactionId"]; - } - if (dictionary.ContainsKey("vendorOriginalTransactionId")) { - obj.vendorOriginalTransactionId = (string)dictionary["vendorOriginalTransactionId"]; - } - if (dictionary.ContainsKey("startsAt")) { - obj.startsAt = stringToDateTime((string)dictionary["startsAt"]); - } - if (dictionary.ContainsKey("cancellationReason")) { - obj.cancellationReason = (string)dictionary["cancellationReason"]; - } - if (dictionary.ContainsKey("isRefund")) { - obj.isRefund = (bool)dictionary["isRefund"]; - } - return obj; - } - - static SubscriptionInfoModel dictionaryToSubscriptionInfoModel(Dictionary dictionary) { - SubscriptionInfoModel obj = new SubscriptionInfoModel(); - if (dictionary.ContainsKey("isActive")) { - obj.isActive = (bool)dictionary["isActive"]; - } - if (dictionary.ContainsKey("vendorProductId")) { - obj.vendorProductId = (string)dictionary["vendorProductId"]; - } - if (dictionary.ContainsKey("store")) { - obj.store = (string)dictionary["store"]; - } - if (dictionary.ContainsKey("activatedAt")) { - obj.activatedAt = stringToDateTime((string)dictionary["activatedAt"]); - } - if (dictionary.ContainsKey("renewedAt")) { - obj.renewedAt = stringToDateTime((string)dictionary["renewedAt"]); - } - if (dictionary.ContainsKey("expiresAt")) { - obj.expiresAt = stringToDateTime((string)dictionary["expiresAt"]); - } - if (dictionary.ContainsKey("startsAt")) { - obj.startsAt = stringToDateTime((string)dictionary["startsAt"]); - } - if (dictionary.ContainsKey("isLifetime")) { - obj.isLifetime = (bool)dictionary["isLifetime"]; - } - if (dictionary.ContainsKey("activeIntroductoryOfferType")) { - obj.activeIntroductoryOfferType = (string)dictionary["activeIntroductoryOfferType"]; - } - if (dictionary.ContainsKey("activePromotionalOfferType")) { - obj.activePromotionalOfferType = (string)dictionary["activePromotionalOfferType"]; - } - if (dictionary.ContainsKey("willRenew")) { - obj.willRenew = (bool)dictionary["willRenew"]; - } - if (dictionary.ContainsKey("isInGracePeriod")) { - obj.isInGracePeriod = (bool)dictionary["isInGracePeriod"]; - } - if (dictionary.ContainsKey("unsubscribedAt")) { - obj.unsubscribedAt = stringToDateTime((string)dictionary["unsubscribedAt"]); - } - if (dictionary.ContainsKey("billingIssueDetectedAt")) { - obj.billingIssueDetectedAt = stringToDateTime((string)dictionary["billingIssueDetectedAt"]); - } - if (dictionary.ContainsKey("isSandbox")) { - obj.isSandbox = (bool)dictionary["isSandbox"]; - } - if (dictionary.ContainsKey("vendorTransactionId")) { - obj.vendorTransactionId = (string)dictionary["vendorTransactionId"]; - } - if (dictionary.ContainsKey("vendorOriginalTransactionId")) { - obj.vendorOriginalTransactionId = (string)dictionary["vendorOriginalTransactionId"]; - } - if (dictionary.ContainsKey("cancellationReason")) { - obj.cancellationReason = (string)dictionary["cancellationReason"]; - } - if (dictionary.ContainsKey("isRefund")) { - obj.isRefund = (bool)dictionary["isRefund"]; - } - return obj; - } - - static NonSubscriptionInfoModel dictionaryToNonSubscriptionInfoModel(Dictionary dictionary) { - NonSubscriptionInfoModel obj = new NonSubscriptionInfoModel(); - if (dictionary.ContainsKey("purchaseId")) { - obj.purchaseId = (string)dictionary["purchaseId"]; - } - if (dictionary.ContainsKey("vendorProductId")) { - obj.vendorProductId = (string)dictionary["vendorProductId"]; - } - if (dictionary.ContainsKey("store")) { - obj.store = (string)dictionary["store"]; - } - if (dictionary.ContainsKey("purchasedAt")) { - obj.purchasedAt = stringToDateTime((string)dictionary["purchasedAt"]); - } - if (dictionary.ContainsKey("isOneTime")) { - obj.isOneTime = (bool)dictionary["isOneTime"]; - } - if (dictionary.ContainsKey("isSandbox")) { - obj.isSandbox = (bool)dictionary["isSandbox"]; - } - if (dictionary.ContainsKey("vendorTransactionId")) { - obj.vendorTransactionId = (string)dictionary["vendorTransactionId"]; - } - if (dictionary.ContainsKey("vendorOriginalTransactionId")) { - obj.vendorOriginalTransactionId = (string)dictionary["vendorOriginalTransactionId"]; - } - if (dictionary.ContainsKey("isRefund")) { - obj.isRefund = (bool)dictionary["isRefund"]; - } - return obj; - } - - static ProductModel dictionaryToProductModel(Dictionary dictionary) { - ProductModel obj = new ProductModel(); - if (dictionary.ContainsKey("vendorProductId")) { - obj.vendorProductId = (string)dictionary["vendorProductId"]; - } - if (dictionary.ContainsKey("introductoryOfferEligibility")) { - obj.introductoryOfferEligibility = (bool)dictionary["introductoryOfferEligibility"]; - } - if (dictionary.ContainsKey("promotionalOfferEligibility")) { - obj.promotionalOfferEligibility = (bool)dictionary["promotionalOfferEligibility"]; - } - if (dictionary.ContainsKey("promotionalOfferId")) { - obj.promotionalOfferId = (string)dictionary["promotionalOfferId"]; - } - if (dictionary.ContainsKey("localizedDescription")) { - obj.localizedDescription = (string)dictionary["localizedDescription"]; - } - if (dictionary.ContainsKey("localizedTitle")) { - obj.localizedTitle = (string)dictionary["localizedTitle"]; - } - if (dictionary.ContainsKey("price")) { - obj.price = decimal.Parse((string)dictionary["price"]); - } - if (dictionary.ContainsKey("currencyCode")) { - obj.currencyCode = (string)dictionary["currencyCode"]; - } - if (dictionary.ContainsKey("currencySymbol")) { - obj.currencySymbol = (string)dictionary["currencySymbol"]; - } - if (dictionary.ContainsKey("regionCode")) { - obj.regionCode = (string)dictionary["regionCode"]; - } - if (dictionary.ContainsKey("subscriptionPeriod")) { - obj.subscriptionPeriod = dictionaryToProductSubscriptionPeriodModel((Dictionary)dictionary["subscriptionPeriod"]); - } - if (dictionary.ContainsKey("introductoryDiscount")) { - obj.introductoryDiscount = dictionaryToProductDiscountModel((Dictionary)dictionary["introductoryDiscount"]); - } - if (dictionary.ContainsKey("subscriptionGroupIdentifier")) { - obj.subscriptionGroupIdentifier = (string)dictionary["subscriptionGroupIdentifier"]; - } - if (dictionary.ContainsKey("discounts")) { - List discounts = (List)dictionary["discounts"]; - List array = new List(); - foreach (object discount in discounts) { - array.Add(dictionaryToProductDiscountModel((Dictionary)discount)); - } - obj.discounts = array.ToArray(); - } - if (dictionary.ContainsKey("localizedPrice")) { - obj.localizedPrice = (string)dictionary["localizedPrice"]; - } - if (dictionary.ContainsKey("localizedSubscriptionPeriod")) { - obj.localizedSubscriptionPeriod = (string)dictionary["localizedSubscriptionPeriod"]; - } - if (dictionary.ContainsKey("skuId")) { - obj.skuId = (string)dictionary["skuId"]; - } - return obj; - } - - static PurchaserInfoModel dictionaryToPurchaserInfoModel(Dictionary dictionary) { - PurchaserInfoModel obj = new PurchaserInfoModel(); - if (dictionary.ContainsKey("customerUserId")) { - obj.customerUserId = (string)dictionary["customerUserId"]; - } - if (dictionary.ContainsKey("accessLevels")) { - Dictionary accessLevels = (Dictionary)dictionary["accessLevels"]; - Dictionary converted_dictionary = new Dictionary(); - foreach (KeyValuePair item in accessLevels) { - converted_dictionary.Add(item.Key, dictionaryToAccessLevelInfoModel((Dictionary)item.Value)); - } - obj.accessLevels = converted_dictionary; - } - if (dictionary.ContainsKey("subscriptions")) { - Dictionary subscriptions = (Dictionary)dictionary["subscriptions"]; - Dictionary converted_dictionary = new Dictionary(); - foreach (KeyValuePair item in subscriptions) { - converted_dictionary.Add(item.Key, dictionaryToSubscriptionInfoModel((Dictionary)item.Value)); - } - obj.subscriptions = converted_dictionary; - } - if (dictionary.ContainsKey("nonSubscriptions")) { - Dictionary nonSubscriptions = (Dictionary)dictionary["nonSubscriptions"]; - Dictionary converted_dictionary = new Dictionary(); - foreach (KeyValuePair item in nonSubscriptions) { - converted_dictionary.Add(item.Key, dictionaryToNonSubscriptionInfoModel((Dictionary)item.Value)); - } - obj.nonSubscriptions = converted_dictionary; - } - return obj; - } - - static PromoModel dictionaryToPromoModel(Dictionary dictionary) { - PromoModel obj = new PromoModel(); - if (dictionary.ContainsKey("promoType")) { - obj.promoType = (string)dictionary["promoType"]; - } - if (dictionary.ContainsKey("variationId")) { - obj.variationId = (string)dictionary["variationId"]; - } - if (dictionary.ContainsKey("expiresAt")) { - obj.expiresAt = stringToDateTime((string)dictionary["expiresAt"]); - } - if (dictionary.ContainsKey("paywall")) { - obj.paywall = dictionaryToPaywallModel((Dictionary)dictionary["paywall"]); - } - return obj; - } - - static Dictionary subscriptionPeriodToDictionary(ProductSubscriptionPeriodModel subscriptionPeriod) { - Dictionary dictionary = new Dictionary(); - dictionary.Add("unit", periodUnitToString(subscriptionPeriod.unit)); - dictionary.Add("numberOfUnits", subscriptionPeriod.numberOfUnits); - return dictionary; - } - - static Dictionary discountToDictionary(ProductDiscountModel discount) { - Dictionary dictionary = new Dictionary(); - dictionary.Add("price", discount.price.ToString()); - dictionary.Add("numberOfPeriods", discount.numberOfPeriods); - if (discount.localizedPrice != null) { - dictionary.Add("localizedPrice", discount.localizedPrice); - } - if (discount.subscriptionPeriod != null) { - dictionary.Add("subscriptionPeriod", subscriptionPeriodToDictionary(discount.subscriptionPeriod)); - } - return dictionary; - } - - static Dictionary productToDictionary(ProductModel product) { - Dictionary dictionary = new Dictionary(); - if (product.vendorProductId != null) { - dictionary.Add("vendorProductId", product.vendorProductId); - } - if (product.localizedTitle != null) { - dictionary.Add("localizedTitle", product.localizedTitle); - } - if (product.localizedDescription != null) { - dictionary.Add("localizedDescription", product.localizedDescription); - } - if (product.localizedPrice != null) { - dictionary.Add("localizedPrice", product.localizedPrice); - } - dictionary.Add("price", product.price.ToString()); - if (product.currencyCode != null) { - dictionary.Add("currencyCode", product.currencyCode); - } - if (product.currencySymbol != null) { - dictionary.Add("currencySymbol", product.currencySymbol); - } - if (product.regionCode != null) { - dictionary.Add("regionCode", product.regionCode); - } - if (product.subscriptionPeriod != null) { - dictionary.Add("subscriptionPeriod", subscriptionPeriodToDictionary(product.subscriptionPeriod)); - } - if (product.subscriptionGroupIdentifier != null) { - dictionary.Add("subscriptionGroupIdentifier", product.subscriptionGroupIdentifier); - } - dictionary.Add("introductoryOfferEligibility", product.introductoryOfferEligibility); - dictionary.Add("promotionalOfferEligibility", product.promotionalOfferEligibility); - if (product.promotionalOfferId != null) { - dictionary.Add("promotionalOfferId", product.promotionalOfferId); - } - if (product.introductoryDiscount != null) { - dictionary.Add("introductoryDiscount", discountToDictionary(product.introductoryDiscount)); - } - if (product.discounts != null) { - List> discounts = new List>(); - foreach (ProductDiscountModel discount in product.discounts) { - discounts.Add(discountToDictionary(discount)); - } - dictionary.Add("discounts", discounts); - } - if (product.skuId != null) { - dictionary.Add("skuId", product.skuId); - } - return dictionary; - } - - static void addAdaptyErrorParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("error")) { - parameters.Add(dictionaryToAdaptyError((Dictionary)dictionary["error"])); - } else { - parameters.Add(null); - } - } - - static void addPaywallsParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("paywalls")) { - List paywalls = (List)dictionary["paywalls"]; - List array = new List(); - foreach (object paywall in paywalls) { - array.Add(dictionaryToPaywallModel((Dictionary)paywall)); - } - parameters.Add(array.ToArray()); - } else { - parameters.Add(null); - } - } - - static void addProductsParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("products")) { - List products = (List)dictionary["products"]; - List array = new List(); - foreach (object product in products) { - array.Add(dictionaryToProductModel((Dictionary)product)); - } - parameters.Add(array.ToArray()); - } else { - parameters.Add(null); - } - } - - static void addProductParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("product")) { - parameters.Add(dictionaryToProductModel((Dictionary)dictionary["product"])); - } else { - parameters.Add(null); - } - } - - static void addPurchaserInfoParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("purchaserInfo")) { - parameters.Add(dictionaryToPurchaserInfoModel((Dictionary)dictionary["purchaserInfo"])); - } else { - parameters.Add(null); - } - } - - static void addDataStateParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("state")) { - parameters.Add(stringToDataState((string)dictionary["state"])); - } else { - parameters.Add(null); - } - } - - static void addReceiptOrPurchaseTokenParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("receipt")) { - parameters.Add((string)dictionary["receipt"]); - } else if (dictionary.ContainsKey("purchaseToken")) { - parameters.Add((string)dictionary["purchaseToken"]); - } else { - parameters.Add(null); - } - } - - static void addValidationResultParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("validationResult")) { - parameters.Add((Dictionary)dictionary["validationResult"]); - } else { - parameters.Add(null); - } - } - - static void addValidationResultsParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("validationResults")) { - List validationResults = (List)dictionary["validationResults"]; - List> array = new List>(); - foreach (object validationResult in validationResults) { - array.Add((Dictionary)validationResult); - } - parameters.Add(validationResults.ToArray()); - } else { - parameters.Add(null); - } - } - - static void addPromoParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("promo")) { - parameters.Add(dictionaryToPromoModel((Dictionary)dictionary["promo"])); - } else { - parameters.Add(null); - } - } - - static object[] messageToParameters(string method, string message) { - List parameters = new List(); - Dictionary dictionary = Json.Deserialize(message) as Dictionary; - switch (method) { - case "OnIdentify": - case "OnLogout": - case "OnSyncPurchases": - case "OnUpdateAttribution": - case "OnUpdateProfile": - // AdaptyError error - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnGetPaywalls": - // PaywallModel[] paywalls, ProductModel[] products, DataState state, AdaptyError error - addPaywallsParameter(parameters, dictionary); - addProductsParameter(parameters, dictionary); - addDataStateParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnMakePurchase": - case "OnMakeDeferredPurchase": - // PurchaserInfoModel purchaserInfo, string receipt, Dictionary validationResult, ProductModel product, AdaptyError error - addPurchaserInfoParameter(parameters, dictionary); - addReceiptOrPurchaseTokenParameter(parameters, dictionary); - addValidationResultParameter(parameters, dictionary); - addProductParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnRestorePurchases": - // PurchaserInfoModel purchaserInfo, string receipt, Dictionary[] validationResults, AdaptyError error - addPurchaserInfoParameter(parameters, dictionary); - addReceiptOrPurchaseTokenParameter(parameters, dictionary); - addValidationResultsParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnValidateAppleReceipt": - case "OnValidateGooglePurchase": - // PurchaserInfoModel purchaserInfo, Dictionary validationResult, AdaptyError error - addPurchaserInfoParameter(parameters, dictionary); - addValidationResultParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnGetPurchaserInfo": - // PurchaserInfoModel purchaserInfo, DataState state, AdaptyError error - addPurchaserInfoParameter(parameters, dictionary); - addDataStateParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnPurchaserInfoUpdated": - // PurchaserInfoModel purchaserInfo - addPurchaserInfoParameter(parameters, dictionary); - break; - case "OnGetPromo": - // PromoModel promo, AdaptyError error - addPromoParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnPromoReceived": - // PromoModel promo - addPromoParameter(parameters, dictionary); - break; - - } - return parameters.ToArray(); - } - - public static void executeCallback() { - Callback callback = null; - #if UNITY_IOS - callback = AdaptyiOS.getCallback(); - #elif UNITY_ANDROID - callback = AdaptyAndroid.getCallback(); - #endif - if (callback != null && callback.objectName != null && callback.method != null && callback.message != null) { - GameObject gameObject = UnityEngine.GameObject.Find(callback.objectName); - if (gameObject != null) { - MonoBehaviour script = gameObject.GetComponent(); - if (script != null) { - System.Reflection.MethodInfo method = script.GetType().GetMethod(callback.method); - if (method != null) { - method.Invoke(script, messageToParameters(callback.method, callback.message)); - } - } - } - } - } - - public static void setLogLevel(LogLevel logLevel) { - #if !UNITY_EDITOR - int log_level_int = -1; - switch (logLevel) { - case LogLevel.None: - log_level_int = 0; - break; - case LogLevel.Error: - log_level_int = 1; - break; - case LogLevel.Verbose: - log_level_int = 2; - break; - } - #if UNITY_IOS - AdaptyiOS.setLogLevel(log_level_int); - #elif UNITY_ANDROID - AdaptyAndroid.setLogLevel(log_level_int); - #endif - #endif - } - - public static void activate(string key, bool observeMode) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.activate(key, observeMode); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.activate(key); - #endif - } - - public static void identify(string customerUserId, MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.identify(customerUserId, gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.identify(customerUserId, gameObject ? gameObject.name : null); - #endif - } - - public static void logout(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.logout(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.logout(gameObject ? gameObject.name : null); - #endif - } - - public static void getPaywalls(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.getPaywalls(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.getPaywalls(gameObject ? gameObject.name : null); - #endif - } - - public static void makePurchase(ProductModel product, string offerId, MonoBehaviour gameObject) { - #if !UNITY_EDITOR - string productJson = Json.Serialize(productToDictionary(product)); - #if UNITY_IOS - AdaptyiOS.makePurchase(productJson, offerId, gameObject ? gameObject.name : null); - #elif UNITY_ANDROID - AdaptyAndroid.makePurchase(productJson, gameObject ? gameObject.name : null); - #endif - #endif - } - - public static void restorePurchases(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.restorePurchases(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.restorePurchases(gameObject ? gameObject.name : null); - #endif - } - - public static void syncPurchases(MonoBehaviour gameObject) { - #if UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.syncPurchases(gameObject ? gameObject.name : null); - #endif - } - - public static void validateAppleReceipt(string receipt, MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.validateReceipt(receipt, gameObject ? gameObject.name : null); - #endif - } - - public static void validateGooglePurchase(PurchaseType purchaseType, string productId, string purchaseToken, string purchaseOrderId, ProductModel product, MonoBehaviour gameObject) { - #if UNITY_ANDROID && !UNITY_EDITOR - int purchaseTypeInt = 0; - if (purchaseType == PurchaseType.Subscription) { - purchaseTypeInt = 1; - } - string productJson = Json.Serialize(productToDictionary(product)); - AdaptyAndroid.validatePurchase(purchaseTypeInt, productId, purchaseToken, purchaseOrderId, productJson, gameObject ? gameObject.name : null); - #endif - } - - public static void getPurchaserInfo(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.getPurchaserInfo(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.getPurchaserInfo(gameObject ? gameObject.name : null); - #endif - } - - public static void setOnPurchaserInfoUpdatedListener(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.setOnPurchaserInfoUpdatedListener(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.setOnPurchaserInfoUpdatedListener(gameObject ? gameObject.name : null); - #endif - } - - public static void updateAttribution(Dictionary attribution, AttributionNetwork source, string networkUserId, MonoBehaviour gameObject) { - #if !UNITY_EDITOR - int sourceInt = -1; - switch (source) { - case AttributionNetwork.Appsflyer: - sourceInt = 0; - break; - case AttributionNetwork.Adjust: - sourceInt = 1; - break; - case AttributionNetwork.Branch: - sourceInt = 2; - break; - case AttributionNetwork.Custom: - sourceInt = 3; - break; - } - string attributionJson = Json.Serialize(attribution); - #if UNITY_IOS - AdaptyiOS.updateAttribution(attributionJson, sourceInt, networkUserId, gameObject ? gameObject.name : null); - #elif UNITY_ANDROID - AdaptyAndroid.updateAttribution(attributionJson, sourceInt, networkUserId, gameObject ? gameObject.name : null); - #endif - #endif - } - - public static void updateProfile(ProfileParameterBuilder profileParams, MonoBehaviour gameObject) { - #if !UNITY_EDITOR - string paramsJson = Json.Serialize(profileParams.getDictionary()); - #if UNITY_IOS - AdaptyiOS.updateProfile(paramsJson, gameObject ? gameObject.name : null); - #elif UNITY_ANDROID - AdaptyAndroid.updateProfile(paramsJson, gameObject ? gameObject.name : null); - #endif - #endif - } - - public static void getPromo(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.getPromo(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.getPromo(gameObject ? gameObject.name : null); - #endif - } - - public static void setOnPromoReceivedListener(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.setOnPromoReceivedListener(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.setOnPromoReceivedListener(gameObject ? gameObject.name : null); - #endif - } - } -} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyAndroid.cs b/AdaptyUnityProject/Assets/Adapty/AdaptyAndroid.cs deleted file mode 100644 index b1a2b6a..0000000 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyAndroid.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace AdaptySDK { - #if UNITY_ANDROID - class AdaptyAndroid { - private static readonly string tag = "AdaptyAndroid"; - private static AndroidJavaClass AdaptyAndroidClass = new AndroidJavaClass("com.adapty.unity.AdaptyAndroidWrapper"); - - private static AndroidJavaObject getActivity() { - AndroidJavaClass unity_player = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); - return unity_player.GetStatic("currentActivity"); - } - - private static AndroidJavaObject getContext() { - AndroidJavaObject activity = getActivity(); - return activity.Call("getApplicationContext"); - } - - public static Callback getCallback() { - AndroidJavaObject javaCallback = AdaptyAndroidClass.CallStatic("getCallback"); - if (javaCallback != null) { - Debug.Log(tag + " executeCallback()"); - Callback callback = new Callback(); - callback.objectName = javaCallback.Get("objectName"); - callback.method = javaCallback.Get("method"); - callback.message = javaCallback.Get("message"); - return callback; - } - return null; - } - - public static void setLogLevel(int logLevel) { - Debug.Log(tag + " setLogLevel()"); - AdaptyAndroidClass.CallStatic("setLogLevel", logLevel); - } - - public static void activate(string key) { - Debug.Log(tag + " activate()"); - AdaptyAndroidClass.CallStatic("activate", getContext(), key); - } - - public static void identify(string customerUserId, string objectName) { - Debug.Log(tag + " identify()"); - AdaptyAndroidClass.CallStatic("identify", customerUserId, objectName); - } - - public static void logout(string objectName) { - Debug.Log(tag + " logout()"); - AdaptyAndroidClass.CallStatic("logout", objectName); - } - - public static void getPaywalls(string objectName) { - Debug.Log(tag + " getPaywalls()"); - AdaptyAndroidClass.CallStatic("getPaywalls", objectName); - } - - public static void makePurchase(string productJson, string objectName) { - Debug.Log(tag + " makePurchase()"); - AdaptyAndroidClass.CallStatic("makePurchase", getActivity(), productJson, objectName); - } - - public static void restorePurchases(string objectName) { - Debug.Log(tag + " restorePurchases()"); - AdaptyAndroidClass.CallStatic("restorePurchases", objectName); - } - - public static void syncPurchases(string objectName) { - Debug.Log(tag + " syncPurchases()"); - AdaptyAndroidClass.CallStatic("syncPurchases", objectName); - } - - public static void validatePurchase(int purchaseTypeInt, string productId, string purchaseToken, string purchaseOrderId, string productJson, string objectName) { - Debug.Log(tag + " validatePurchase()"); - AdaptyAndroidClass.CallStatic("validatePurchase", purchaseTypeInt, productId, purchaseToken, purchaseOrderId, productJson, objectName); - } - - public static void getPurchaserInfo(string objectName) { - Debug.Log(tag + " getPurchaserInfo()"); - AdaptyAndroidClass.CallStatic("getPurchaserInfo", objectName); - } - - public static void setOnPurchaserInfoUpdatedListener(string objectName) { - Debug.Log(tag + " setOnPurchaserInfoUpdatedListener()"); - AdaptyAndroidClass.CallStatic("setOnPurchaserInfoUpdatedListener", objectName); - } - - public static void updateAttribution(string attributionJson, int sourceInt, string networkUserId, string objectName) { - Debug.Log(tag + " updateAttribution()"); - AdaptyAndroidClass.CallStatic("updateAttribution", attributionJson, sourceInt, networkUserId, objectName); - } - - public static void updateProfile(string paramsJson, string objectName) { - Debug.Log(tag + " updateProfile()"); - AdaptyAndroidClass.CallStatic("updateProfile", paramsJson, objectName); - } - - public static void getPromo(string objectName) { - Debug.Log(tag + " getPromo()"); - AdaptyAndroidClass.CallStatic("getPromo", objectName); - } - - public static void setOnPromoReceivedListener(string objectName) { - Debug.Log(tag + " setOnPromoReceivedListener()"); - AdaptyAndroidClass.CallStatic("setOnPromoReceivedListener", objectName); - } - } - #endif -} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyModels.cs b/AdaptyUnityProject/Assets/Adapty/AdaptyModels.cs deleted file mode 100644 index bef1e22..0000000 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyModels.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System.Collections.Generic; -using System; - -namespace AdaptySDK { - public enum LogLevel { - None, - Error, - Verbose - } - - public enum DataState { - Cached, - Synced, - Unknown - } - - public enum PurchaseType { - Inapp, - Subscription, - Unknown - } - - public enum AttributionNetwork { - Appsflyer, - Adjust, - Branch, - Custom, - Unknown - } - - public enum PeriodUnit { - Day, - Week, - Month, - Year, - Unknown - } - - public enum PaymentMode { - FreeTrial, - PayAsYouGo, - PayUpFront, - Unknown - } - - public enum Gender { - Female, - Male, - Other, - Unknown - } - - public class AdaptyError { - public string message; - public long code; - } - - public class ProductSubscriptionPeriodModel { - public PeriodUnit unit; - public long numberOfUnits; - } - - public class ProductDiscountModel { - public decimal price; - public string identifier; - public ProductSubscriptionPeriodModel subscriptionPeriod; - public long numberOfPeriods; - public PaymentMode paymentMode; - public string localizedPrice; - public string localizedSubscriptionPeriod; - public string localizedNumberOfPeriods; - } - - public class ProductModel { - public string vendorProductId; - public bool introductoryOfferEligibility = false; - public bool promotionalOfferEligibility = false; - public string promotionalOfferId; - public string localizedDescription = ""; - public string localizedTitle = ""; - public decimal price = 0; - public string currencyCode; - public string currencySymbol; - public string regionCode; - public ProductSubscriptionPeriodModel subscriptionPeriod; - public ProductDiscountModel introductoryDiscount; - public string subscriptionGroupIdentifier; - public ProductDiscountModel[] discounts; - public string localizedPrice; - public string localizedSubscriptionPeriod; - public string skuId; - } - - public class PaywallModel { - public string developerId; - public string variationId; - public long revision = 0; - public bool isPromo = false; - public ProductModel[] products; - public string visualPaywall = ""; - public Dictionary customPayload; - } - - public class PromoModel { - public string promoType; - public string variationId; - public DateTime expiresAt; - public PaywallModel paywall; - } - - public class AccessLevelInfoModel { - public string id; - public bool isActive; - public string vendorProductId; - public string store; - public DateTime activatedAt; - public DateTime renewedAt; - public DateTime expiresAt; - public bool isLifetime; - public string activeIntroductoryOfferType; - public string activePromotionalOfferType; - public bool willRenew; - public bool isInGracePeriod; - public DateTime unsubscribedAt; - public DateTime billingIssueDetectedAt; - public string vendorTransactionId; - public string vendorOriginalTransactionId; - public DateTime startsAt; - public string cancellationReason; - public bool isRefund; - } - - public class SubscriptionInfoModel { - public bool isActive; - public string vendorProductId; - public string store; - public DateTime activatedAt; - public DateTime renewedAt; - public DateTime expiresAt; - public DateTime startsAt; - public bool isLifetime; - public string activeIntroductoryOfferType; - public string activePromotionalOfferType; - public bool willRenew; - public bool isInGracePeriod; - public DateTime unsubscribedAt; - public DateTime billingIssueDetectedAt; - public bool isSandbox; - public string vendorTransactionId; - public string vendorOriginalTransactionId; - public string cancellationReason; - public bool isRefund; - } - - public class NonSubscriptionInfoModel { - public string purchaseId; - public string vendorProductId; - public string store; - public DateTime purchasedAt; - public bool isOneTime; - public bool isSandbox; - public string vendorTransactionId; - public string vendorOriginalTransactionId; - public bool isRefund; - } - - public class PurchaserInfoModel { - public string customerUserId; - public Dictionary accessLevels; - public Dictionary subscriptions; - public Dictionary nonSubscriptions; - } - - public class ProfileParameterBuilder { - private Dictionary values = new Dictionary(); - public Dictionary getDictionary() { - return values; - } - public ProfileParameterBuilder withEmail(string email) { - values.Add("email", email); - return this; - } - public ProfileParameterBuilder withPhoneNumber(string phoneNumber) { - values.Add("phoneNumber", phoneNumber); - return this; - } - public ProfileParameterBuilder withFacebookUserId(string facebookUserId) { - values.Add("facebookUserId", facebookUserId); - return this; - } - public ProfileParameterBuilder withAmplitudeUserId(string amplitudeUserId) { - values.Add("amplitudeUserId", amplitudeUserId); - return this; - } - public ProfileParameterBuilder withAmplitudeDeviceId(string amplitudeDeviceId) { - values.Add("amplitudeDeviceId", amplitudeDeviceId); - return this; - } - public ProfileParameterBuilder withMixpanelUserId(string mixpanelUserId) { - values.Add("mixpanelUserId", mixpanelUserId); - return this; - } - public ProfileParameterBuilder withAppmetricaProfileId(string appmetricaProfileId) { - values.Add("appmetricaProfileId", appmetricaProfileId); - return this; - } - public ProfileParameterBuilder withAppmetricaDeviceId(string appmetricaDeviceId) { - values.Add("appmetricaDeviceId", appmetricaDeviceId); - return this; - } - public ProfileParameterBuilder withFirstName(string firstName) { - values.Add("firstName", firstName); - return this; - } - public ProfileParameterBuilder withLastName(string lastName) { - values.Add("lastName", lastName); - return this; - } - public ProfileParameterBuilder withGender(Gender gender) { - values.Add("gender", gender.ToString("g").ToLower()); - return this; - } - // YYYY-MM-DD - public ProfileParameterBuilder withBirthday(string birthday) { - values.Add("birthday", birthday); - return this; - } - public ProfileParameterBuilder withAppTrackingTransparencyStatus(uint appTrackingTransparencyStatus) { - values.Add("appTrackingTransparencyStatus", appTrackingTransparencyStatus); - return this; - } - public ProfileParameterBuilder withCustomAttributes(Dictionary customAttributes) { - values.Add("customAttributes", customAttributes); - return this; - } - } - - class Callback { - public string objectName; - public string method; - public string message; - } -} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyObject.prefab b/AdaptyUnityProject/Assets/Adapty/AdaptyObject.prefab deleted file mode 100644 index 7ccc404..0000000 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyObject.prefab +++ /dev/null @@ -1,46 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &246365361262261464 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 246365361262261414} - - component: {fileID: 246365361262261465} - m_Layer: 0 - m_Name: AdaptyObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &246365361262261414 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 246365361262261464} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &246365361262261465 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 246365361262261464} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 86bd11ca2822145bbabca3e820f6308f, type: 3} - m_Name: - m_EditorClassIdentifier: - key: diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyObjectScript.cs b/AdaptyUnityProject/Assets/Adapty/AdaptyObjectScript.cs deleted file mode 100644 index bb0fe77..0000000 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyObjectScript.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AdaptySDK; - -public class AdaptyObjectScript : MonoBehaviour { - public string key; - public bool observeMode = false; - public LogLevel logLevel = LogLevel.Error; - - void Start() { - Adapty.setLogLevel(logLevel); - Adapty.activate(key, observeMode); - } - - void Update() { - #if !UNITY_EDITOR - Adapty.executeCallback(); - #endif - } -} diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyiOS.cs b/AdaptyUnityProject/Assets/Adapty/AdaptyiOS.cs deleted file mode 100644 index 5b46de9..0000000 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyiOS.cs +++ /dev/null @@ -1,146 +0,0 @@ -using System.Runtime.InteropServices; -using UnityEngine; - -namespace AdaptySDK { -#if UNITY_IOS - class AdaptyiOS { - private static readonly string tag = "AdaptyiOS"; - - public static Callback getCallback() { - if (AdaptyUnity_hasCallback()) { - Debug.Log(tag + " executeCallback()"); - Callback callback = new Callback(); - callback.objectName = AdaptyUnity_getCallbackObjectName(); - callback.method = AdaptyUnity_getCallbackMethod(); - callback.message = AdaptyUnity_getCallbackMessageAndPop(); - return callback; - } - return null; - } - - public static void setLogLevel(int logLevel) { - Debug.Log(tag + " setLogLevel()"); - AdaptyUnity_setLogLevel(logLevel); - } - - public static void activate(string key, bool observeMode) { - Debug.Log(tag + " activate()"); - AdaptyUnity_activate(key, observeMode); - } - - public static void identify(string customerUserId, string objectName) { - Debug.Log(tag + " identify()"); - AdaptyUnity_identify(customerUserId, objectName); - } - - public static void logout(string objectName) { - Debug.Log(tag + " logout()"); - AdaptyUnity_logout(objectName); - } - - public static void getPaywalls(string objectName) { - Debug.Log(tag + " getPaywalls()"); - AdaptyUnity_getPaywalls(objectName); - } - - public static void makePurchase(string productJson, string offerId, string objectName) { - Debug.Log(tag + " makePurchase()"); - AdaptyUnity_makePurchase(productJson, offerId, objectName); - } - - public static void restorePurchases(string objectName) { - Debug.Log(tag + " restorePurchases()"); - AdaptyUnity_restorePurchases(objectName); - } - - public static void validateReceipt(string receipt, string objectName) { - Debug.Log(tag + " validateReceipt()"); - AdaptyUnity_validateReceipt(receipt, objectName); - } - - public static void getPurchaserInfo(string objectName) { - Debug.Log(tag + " getPurchaserInfo()"); - AdaptyUnity_getPurchaserInfo(objectName); - } - - public static void setOnPurchaserInfoUpdatedListener(string objectName) { - Debug.Log(tag + " setOnPurchaserInfoUpdatedListener()"); - AdaptyUnity_setOnPurchaserInfoUpdatedListener(objectName); - } - - public static void updateAttribution(string attributionJson, int sourceInt, string networkUserId, string objectName) { - Debug.Log(tag + " updateAttribution()"); - AdaptyUnity_updateAttribution(attributionJson, sourceInt, networkUserId, objectName); - } - - public static void updateProfile(string paramsJson, string objectName) { - Debug.Log(tag + " updateProfile()"); - AdaptyUnity_updateProfile(paramsJson, objectName); - } - - public static void getPromo(string objectName) { - Debug.Log(tag + " getPromo()"); - AdaptyUnity_getPromo(objectName); - } - - public static void setOnPromoReceivedListener(string objectName) { - Debug.Log(tag + " setOnPromoReceivedListener()"); - AdaptyUnity_setOnPromoReceivedListener(objectName); - } - - [DllImport("__Internal")] - private static extern bool AdaptyUnity_hasCallback(); - - [DllImport("__Internal")] - private static extern string AdaptyUnity_getCallbackObjectName(); - - [DllImport("__Internal")] - private static extern string AdaptyUnity_getCallbackMethod(); - - [DllImport("__Internal")] - private static extern string AdaptyUnity_getCallbackMessageAndPop(); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_setLogLevel(int logLevel); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_activate(string key, bool observeMode); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_identify(string key, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_logout(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_getPaywalls(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_makePurchase(string productJson, string offerId, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_restorePurchases(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_validateReceipt(string receipt, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_getPurchaserInfo(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_setOnPurchaserInfoUpdatedListener(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_updateAttribution(string attributionJson, int sourceInt, string networkUserId, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_updateProfile(string paramsJson, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_getPromo(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_setOnPromoReceivedListener(string objectName); - } -#endif -} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/Docs/API.pdf b/AdaptyUnityProject/Assets/Adapty/Docs/API.pdf deleted file mode 100644 index c72b30d..0000000 Binary files a/AdaptyUnityProject/Assets/Adapty/Docs/API.pdf and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Adapty/Docs/Guides.pdf b/AdaptyUnityProject/Assets/Adapty/Docs/Guides.pdf deleted file mode 100644 index 5eebbf3..0000000 Binary files a/AdaptyUnityProject/Assets/Adapty/Docs/Guides.pdf and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyDependencies.xml b/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyDependencies.xml deleted file mode 100644 index b9bdbb3..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyDependencies.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - https://jitpack.io - - - - - - - - - - diff --git a/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyObjectEditor.cs b/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyObjectEditor.cs deleted file mode 100644 index a84702d..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyObjectEditor.cs +++ /dev/null @@ -1,55 +0,0 @@ -using UnityEditor; -using UnityEngine; - -[CustomEditor(typeof(AdaptyObjectScript))] -[CanEditMultipleObjects] -public class AdaptyObjectEditor : Editor { - SerializedProperty key, observeMode, logLevel; - - void OnEnable() { - key = serializedObject.FindProperty("key"); - observeMode = serializedObject.FindProperty("observeMode"); - logLevel = serializedObject.FindProperty("logLevel"); - } - - public override void OnInspectorGUI() { - serializedObject.Update(); - - int width = 236; - GUILayout.Box((Texture)AssetDatabase.LoadAssetAtPath("Assets/Adapty/Editor/logo.png", typeof(Texture)), new GUILayoutOption[] {GUILayout.Width(width), GUILayout.Height(63)}); - - EditorGUILayout.Separator(); - - EditorGUILayout.HelpBox("Set your key to init the Adapty SDK.", MessageType.Info); - EditorGUILayout.PropertyField(key); - - EditorGUILayout.Separator(); - - EditorGUILayout.HelpBox("If you have a functioning subscription system and want to give Adapty SDK a quick try, you can use Observer mode. On Android you have to call Adapty.syncPurchases() after each purchase or restoring purchases.", MessageType.Info); - EditorGUILayout.PropertyField(observeMode); - - EditorGUILayout.Separator(); - - EditorGUILayout.HelpBox("Set log level for errors and other important information to help you understand what is going on.", MessageType.Info); - EditorGUILayout.PropertyField(logLevel); - - EditorGUILayout.Separator(); - - EditorGUILayout.HelpBox("For more information on setting up Adapty check out our relevant docs.", MessageType.None); - - - if (GUILayout.Button("Adapty Unity Docs", new GUILayoutOption[] {GUILayout.Width(width)})) { - Application.OpenURL("https://docs.adapty.io/sdk/integrating-adapty-sdk/unity-sdk-intro"); - } - - if (GUILayout.Button("Adapty iOS Docs", new GUILayoutOption[] {GUILayout.Width(width)})) { - Application.OpenURL("https://docs.adapty.io/sdk/integrating-adapty-sdk/ios-sdk-intro"); - } - - if (GUILayout.Button("Adapty Android Docs", new GUILayoutOption[] {GUILayout.Width(width)})) { - Application.OpenURL("https://docs.adapty.io/sdk/integrating-adapty-sdk/android-sdk-intro"); - } - - serializedObject.ApplyModifiedProperties(); - } -} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/Editor/PostBuildProcessor.cs b/AdaptyUnityProject/Assets/Adapty/Editor/PostBuildProcessor.cs deleted file mode 100644 index 4e07315..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Editor/PostBuildProcessor.cs +++ /dev/null @@ -1,24 +0,0 @@ -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEditor.iOS.Xcode; -using System.IO; - -public class AdaptyPostBuildProcessor { - - [PostProcessBuild] - public static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath) { - if (buildTarget == BuildTarget.iOS) { - UpdateXcodeProject(buildTarget, buildPath + "/Unity-iPhone.xcodeproj/project.pbxproj"); - } - } - - private static void UpdateXcodeProject(BuildTarget buildTarget, string projectPath) { - PBXProject project = new PBXProject(); - project.ReadFromString(File.ReadAllText(projectPath)); - - string target = project.GetUnityFrameworkTargetGuid(); - project.AddBuildProperty(target, "OTHER_CPLUSPLUSFLAGS", "$(OTHER_CFLAGS) -fcxx-modules"); - - File.WriteAllText(projectPath, project.WriteToString()); - } -} diff --git a/AdaptyUnityProject/Assets/Adapty/Editor/PostBuildProcessor.cs.meta b/AdaptyUnityProject/Assets/Adapty/Editor/PostBuildProcessor.cs.meta deleted file mode 100644 index fed4f48..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Editor/PostBuildProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 311aba3f444fc44e58b50f91cd056b51 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Adapty/Editor/logo.png b/AdaptyUnityProject/Assets/Adapty/Editor/logo.png deleted file mode 100644 index da33e81..0000000 Binary files a/AdaptyUnityProject/Assets/Adapty/Editor/logo.png and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Adapty/MiniJSON.cs b/AdaptyUnityProject/Assets/Adapty/MiniJSON.cs deleted file mode 100644 index c22127d..0000000 --- a/AdaptyUnityProject/Assets/Adapty/MiniJSON.cs +++ /dev/null @@ -1,669 +0,0 @@ -/* - * Copyright (c) 2013 Calvin Rien - * - * Based on the JSON parser by Patrick van Bergen - * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html - * - * Simplified it so that it doesn't throw exceptions - * and can be used in Unity iPhone with maximum code stripping. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Text; -#pragma warning disable SA1649 // File name should match first type name. -#pragma warning disable CA1720 // Identifier '' contains type name - -namespace AdaptySDK -{ - // Example usage: - // - // using UnityEngine; - // using System.Collections; - // using System.Collections.Generic; - // using MiniJSON; - // - // public class MiniJSONTest : MonoBehaviour { - // void Start () { - // var jsonString = "{ \"array\": [1.44,2,3], " + - // "\"object\": {\"key1\":\"value1\", \"key2\":256}, " + - // "\"string\": \"The quick brown fox \\\"jumps\\\" over the lazy dog \", " + - // "\"unicode\": \"\\u3041 Men\u00fa sesi\u00f3n\", " + - // "\"int\": 65536, " + - // "\"float\": 3.1415926, " + - // "\"bool\": true, " + - // "\"null\": null }"; - // - // var dict = Json.Deserialize(jsonString) as Dictionary; - // - // Debug.Log("deserialized: " + dict.GetType()); - // Debug.Log("dict['array'][0]: " + ((List) dict["array"])[0]); - // Debug.Log("dict['string']: " + (string) dict["string"]); - // Debug.Log("dict['float']: " + (double) dict["float"]); // floats come out as doubles - // Debug.Log("dict['int']: " + (long) dict["int"]); // ints come out as longs - // Debug.Log("dict['unicode']: " + (string) dict["unicode"]); - // - // var str = Json.Serialize(dict); - // - // Debug.Log("serialized: " + str); - // } - // } - - /// - /// This class encodes and decodes JSON strings. - /// Spec. details, see http://www.json.org/ - /// - /// JSON uses Arrays and Objects. These correspond here to the datatypes IList and IDictionary. - /// All numbers are parsed to doubles. - /// - public static class Json - { - /// - /// Parses the string json into a value - /// - /// A JSON string. - /// An List<object>, a Dictionary<string, object>, a double, an integer,a string, null, true, or false - public static object Deserialize(string json) - { - if (json == null) - { - return null; - } - - return Parser.Parse(json); - } - - /// - /// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string - /// - /// A Dictionary<string, object> / List<object> - /// number of white space into the output JSON string for readability - /// A JSON encoded string, or null if object 'json' is not serializable - public static string Serialize(object obj, int space = 0) - { - var instance = new Serializer(space); - instance.SerializeValue(obj); - return instance.ToString(); - } - - sealed class Parser : IDisposable - { - const string WordBreak = "{}[],:\""; - - StringReader json; - - Parser(string jsonString) - { - json = new StringReader(jsonString); - } - - enum TOKEN - { - NONE, - CURLY_OPEN, - CURLY_CLOSE, - SQUARED_OPEN, - SQUARED_CLOSE, - COLON, - COMMA, - STRING, - NUMBER, - TRUE, - FALSE, - NULL, - } - - char PeekChar - { - get - { - return Convert.ToChar(json.Peek()); - } - } - - char NextChar - { - get - { - return Convert.ToChar(json.Read()); - } - } - - string NextWord - { - get - { - var word = new StringBuilder(); - - while (!IsWordBreak(PeekChar)) - { - word.Append(NextChar); - - if (json.Peek() == -1) - { - break; - } - } - - return word.ToString(); - } - } - - TOKEN NextToken - { - get - { - EatWhitespace(); - - if (json.Peek() == -1) - { - return TOKEN.NONE; - } - - switch (PeekChar) - { - case '{': - return TOKEN.CURLY_OPEN; - case '}': - json.Read(); - return TOKEN.CURLY_CLOSE; - case '[': - return TOKEN.SQUARED_OPEN; - case ']': - json.Read(); - return TOKEN.SQUARED_CLOSE; - case ',': - json.Read(); - return TOKEN.COMMA; - case '"': - return TOKEN.STRING; - case ':': - return TOKEN.COLON; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '-': - return TOKEN.NUMBER; - default: - break; - } - - switch (NextWord) - { - case "false": - return TOKEN.FALSE; - case "true": - return TOKEN.TRUE; - case "null": - return TOKEN.NULL; - default: - break; - } - - return TOKEN.NONE; - } - } - - public static bool IsWordBreak(char c) - { - return char.IsWhiteSpace(c) || WordBreak.IndexOf(c) != -1; - } - - public static object Parse(string jsonString) - { - using (var instance = new Parser(jsonString)) - { - return instance.ParseValue(); - } - } - - public void Dispose() - { - json.Dispose(); - json = null; - } - - Dictionary ParseObject() - { - var table = new Dictionary(); - - // ditch opening brace - json.Read(); - - // { - while (true) - { - switch (NextToken) - { - case TOKEN.NONE: - return null; - case TOKEN.COMMA: - continue; - case TOKEN.CURLY_CLOSE: - return table; - default: - // name - var name = ParseString(); - if (name == null) - { - return null; - } - - // : - if (NextToken != TOKEN.COLON) - { - return null; - } - // ditch the colon - json.Read(); - - // value - table[name] = ParseValue(); - break; - } - } - } - - List ParseArray() - { - var array = new List(); - - // ditch opening bracket - json.Read(); - - // [ - var parsing = true; - while (parsing) - { - var nextToken = NextToken; - - switch (nextToken) - { - case TOKEN.NONE: - return null; - case TOKEN.COMMA: - continue; - case TOKEN.SQUARED_CLOSE: - parsing = false; - break; - default: - var value = ParseByToken(nextToken); - - array.Add(value); - break; - } - } - - return array; - } - - object ParseValue() - { - var nextToken = NextToken; - return ParseByToken(nextToken); - } - - object ParseByToken(TOKEN token) - { - switch (token) - { - case TOKEN.STRING: - return ParseString(); - case TOKEN.NUMBER: - return ParseNumber(); - case TOKEN.CURLY_OPEN: - return ParseObject(); - case TOKEN.SQUARED_OPEN: - return ParseArray(); - case TOKEN.TRUE: - return true; - case TOKEN.FALSE: - return false; - case TOKEN.NULL: - return null; - default: - return null; - } - } - - string ParseString() - { - var s = new StringBuilder(); - char c; - - // ditch opening quote - json.Read(); - - var parsing = true; - while (parsing) - { - if (json.Peek() == -1) - { - break; - } - - c = NextChar; - switch (c) - { - case '"': - parsing = false; - break; - case '\\': - if (json.Peek() == -1) - { - parsing = false; - break; - } - - c = NextChar; - switch (c) - { - case '"': - case '\\': - case '/': - s.Append(c); - break; - case 'b': - s.Append('\b'); - break; - case 'f': - s.Append('\f'); - break; - case 'n': - s.Append('\n'); - break; - case 'r': - s.Append('\r'); - break; - case 't': - s.Append('\t'); - break; - case 'u': - var hex = new char[4]; - - for (int i = 0; i < 4; i++) - { - hex[i] = NextChar; - } - - s.Append((char)Convert.ToInt32(new string(hex), 16)); - break; - default: - s.Append(c); - break; - } - break; - default: - s.Append(c); - break; - } - } - - return s.ToString(); - } - - object ParseNumber() - { - var number = NextWord; - - if (number.IndexOf('.') == -1) - { - long parsedInt; - if (long.TryParse(number, out parsedInt)) - { - return parsedInt; - } - return 0; - } - - double parsedDouble; - if (double.TryParse(number, out parsedDouble)) - { - return parsedDouble; - } - return 0.0; - } - - void EatWhitespace() - { - while (char.IsWhiteSpace(PeekChar)) - { - json.Read(); - - if (json.Peek() == -1) - { - break; - } - } - } - } - - sealed class Serializer - { - readonly StringBuilder builder; - readonly int space; - - internal Serializer(int space) - { - this.space = space; - builder = new StringBuilder(); - } - - public override string ToString() - { - return builder.ToString(); - } - - public void SerializeValue(object value, int indent = 0) - { - IList asList; - IDictionary asDict; - string asStr; - - if (value == null) - { - builder.Append("null"); - } - else if ((asStr = value as string) != null) - { - SerializeString(asStr); - } - else if (value is bool) - { - builder.Append((bool)value ? "true" : "false"); - } - else if ((asList = value as IList) != null) - { - SerializeArray(asList, indent); - } - else if ((asDict = value as IDictionary) != null) - { - SerializeObject(asDict, indent); - } - else if (value is char) - { - SerializeString(new string((char)value, 1)); - } - else - { - SerializeOther(value); - } - } - - void SerializeObject(IDictionary obj, int indent) - { - builder.Append('{'); - - var first = true; - var nextIndent = indent + space; - - foreach (object e in obj.Keys) - { - if (!first) - { - builder.Append(','); - } - if (space > 0) - { - builder.Append('\n'); - builder.Append(' ', nextIndent); - } - - SerializeString(e.ToString()); - builder.Append(':'); - if (space > 0) builder.Append(' '); - - SerializeValue(obj[e], nextIndent); - - first = false; - } - - if (!first && space > 0) - { - builder.Append('\n'); - builder.Append(' ', indent); - } - builder.Append('}'); - } - - void SerializeArray(IList anArray, int indent) - { - builder.Append('['); - - var first = true; - var nextIndent = indent + space; - var count = anArray.Count; - for (var i = 0; i < count; ++i) - { - var obj = anArray[i]; - if (!first) - { - builder.Append(','); - } - if (space > 0) - { - builder.Append('\n'); - builder.Append(' ', nextIndent); - } - - SerializeValue(obj, nextIndent); - - first = false; - } - - if (!first && space > 0) - { - builder.Append('\n'); - builder.Append(' ', indent); - } - builder.Append(']'); - } - - void SerializeString(string str) - { - builder.Append('\"'); - - for (var i = 0; i < str.Length; ++i) - { - var c = str[i]; - switch (c) - { - case '"': - builder.Append("\\\""); - break; - case '\\': - builder.Append("\\\\"); - break; - case '\b': - builder.Append("\\b"); - break; - case '\f': - builder.Append("\\f"); - break; - case '\n': - builder.Append("\\n"); - break; - case '\r': - builder.Append("\\r"); - break; - case '\t': - builder.Append("\\t"); - break; - default: - var codepoint = Convert.ToInt32(c); - if ((codepoint >= 32) && (codepoint <= 126)) - { - builder.Append(c); - } - else - { - builder.Append("\\u"); - builder.Append(codepoint.ToString("x4")); - } - break; - } - } - - builder.Append('\"'); - } - - void SerializeOther(object value) - { - // NOTE: decimals lose precision during serialization. - // They always have, I'm just letting you know. - // Previously floats and doubles lost precision too. - if (value is float) - { - builder.Append(((float)value).ToString("R")); - } - else if (value is int - || value is uint - || value is long - || value is sbyte - || value is byte - || value is short - || value is ushort - || value is ulong) - { - builder.Append(value); - } - else if (value is double - || value is decimal) - { - builder.Append(Convert.ToDouble(value).ToString("R")); - } - else - { - SerializeString(value.ToString()); - } - } - } - } -} diff --git a/AdaptyUnityProject/Assets/Adapty/MiniJSON.cs.meta b/AdaptyUnityProject/Assets/Adapty/MiniJSON.cs.meta deleted file mode 100644 index 2336796..0000000 --- a/AdaptyUnityProject/Assets/Adapty/MiniJSON.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e03dd3cca037b4ab49d938ead7a5863f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/Android/unitywrapper-release.aar b/AdaptyUnityProject/Assets/Adapty/Plugins/Android/unitywrapper-release.aar deleted file mode 100644 index caa7650..0000000 Binary files a/AdaptyUnityProject/Assets/Adapty/Plugins/Android/unitywrapper-release.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/Android/unitywrapper-release.aar.meta b/AdaptyUnityProject/Assets/Adapty/Plugins/Android/unitywrapper-release.aar.meta deleted file mode 100644 index c895ba0..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/Android/unitywrapper-release.aar.meta +++ /dev/null @@ -1,80 +0,0 @@ -fileFormatVersion: 2 -guid: bfec0daf67ce849049214516581d3bca -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 1 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: AnyCPU - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm b/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm deleted file mode 100644 index 06ec8f9..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm +++ /dev/null @@ -1,20 +0,0 @@ -#import -#import "UnityAppController.h" -#import "AppDelegateListener.h" -@import Adapty; - - -@interface AdaptyAppController : UnityAppController -@end - -@implementation AdaptyAppController - -- (void)didReceiveRemoteNotification:(NSNotification*)notification { - [Adapty handlePushNotification:notification.userInfo completion:^(NSError * _Nullable) { - - }]; -} - -@end - -IMPL_APP_CONTROLLER_SUBCLASS(AdaptyAppController) diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyModels.mm b/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyModels.mm deleted file mode 100644 index 429b740..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyModels.mm +++ /dev/null @@ -1,506 +0,0 @@ -#import "Foundation/Foundation.h" -#import "StoreKit/StoreKit.h" - -@import Adapty; - -static NSMutableDictionary *skProductCache = [NSMutableDictionary dictionary]; - -static NSString *dateToString(NSDate *date) { - NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init]; - return [formatter stringFromDate:date]; -} - -static NSString *periodUnitToString(PeriodUnit unit){ - NSString *result = nil; - switch (unit) { - case PeriodUnitDay: - result = @"day"; - break; - case PeriodUnitWeek: - result = @"week"; - break; - case PeriodUnitMonth: - result = @"month"; - break; - case PeriodUnitYear: - result = @"year"; - break; - default: - case PeriodUnitUnknown: - result = @"unknown"; - break; - } - return result; -} - -static PeriodUnit stringToPeriodUnit(NSString *unit) { - PeriodUnit result = PeriodUnitUnknown; - if ([unit isEqualToString:@"day"]) { - return PeriodUnitDay; - } else if ([unit isEqualToString:@"week"]) { - return PeriodUnitWeek; - } else if ([unit isEqualToString:@"month"]) { - return PeriodUnitMonth; - } else if ([unit isEqualToString:@"year"]) { - return PeriodUnitYear; - } - return result; -} - -static NSString *paymentModeToString(PaymentMode mode){ - NSString *result = nil; - switch (mode) { - case PaymentModeFreeTrial: - result = @"free_trial"; - break; - case PaymentModePayAsYouGo: - result = @"pay_as_you_go"; - break; - case PaymentModePayUpFront: - result = @"pay_up_front"; - break; - default: - case PaymentModeUnknown: - result = @"unknown"; - break; - } - return result; -} - -static PaymentMode stringToPaymentMode(NSString *mode) { - PaymentMode result = PaymentModeUnknown; - if ([mode isEqualToString:@"free_trial"]) { - return PaymentModeFreeTrial; - } else if ([mode isEqualToString:@"pay_as_you_go"]) { - return PaymentModePayAsYouGo; - } else if ([mode isEqualToString:@"pay_up_front"]) { - return PaymentModePayUpFront; - } - return result; -} - -static Gender stringToGender(NSString *mode) { - Gender result = GenderOther; - if ([mode isEqualToString:@"female"]) { - return GenderFemale; - } else if ([mode isEqualToString:@"male"]) { - return GenderMale; - } else if ([mode isEqualToString:@"other"]) { - return GenderOther; - } - return result; -} - -static NSDictionary *adaptyErrorToDictionary(AdaptyError *adaptyError) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - if (adaptyError.localizedDescription) { - dictionary[@"message"] = adaptyError.localizedDescription; - } - dictionary[@"code"] = @(adaptyError.adaptyErrorCode); - return dictionary; -} - -static NSDictionary *subscriptionPeriodToDictionary(ProductSubscriptionPeriodModel *subscriptionPeriod) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"unit"] = periodUnitToString(subscriptionPeriod.unit); - dictionary[@"numberOfUnits"] = @(subscriptionPeriod.numberOfUnits); - return dictionary; -} - -static NSDictionary *discountToDictionary(ProductDiscountModel *discount) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - if (discount.identifier) { - dictionary[@"identifier"] = discount.identifier; - } - dictionary[@"price"] = [NSDecimalNumber decimalNumberWithDecimal:discount.price].stringValue; - dictionary[@"numberOfPeriods"] = @(discount.numberOfPeriods); - dictionary[@"paymentMode"] = paymentModeToString(discount.paymentMode); - if (discount.localizedPrice) { - dictionary[@"localizedPrice"] = discount.localizedPrice; - } - if (discount.localizedSubscriptionPeriod) { - dictionary[@"localizedSubscriptionPeriod"] = discount.localizedSubscriptionPeriod; - } - if (discount.localizedNumberOfPeriods) { - dictionary[@"localizedNumberOfPeriods"] = discount.localizedNumberOfPeriods; - } - dictionary[@"subscriptionPeriod"] = subscriptionPeriodToDictionary(discount.subscriptionPeriod); - return dictionary; -} - -static NSDictionary *productToDictionary(ProductModel *product) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"vendorProductId"] = product.vendorProductId; - dictionary[@"localizedTitle"] = product.localizedTitle; - dictionary[@"localizedDescription"] = product.localizedDescription; - if (product.localizedPrice) { - dictionary[@"localizedPrice"] = product.localizedPrice; - } - if (product.localizedSubscriptionPeriod) { - dictionary[@"localizedSubscriptionPeriod"] = product.localizedSubscriptionPeriod; - } - dictionary[@"price"] = [NSDecimalNumber decimalNumberWithDecimal:product.price].stringValue; - if (product.currencyCode) { - dictionary[@"currencyCode"] = product.currencyCode; - } - if (product.currencySymbol) { - dictionary[@"currencySymbol"] = product.currencySymbol; - } - if (product.regionCode) { - dictionary[@"regionCode"] = product.regionCode; - } - if (product.subscriptionPeriod) { - dictionary[@"subscriptionPeriod"] = subscriptionPeriodToDictionary(product.subscriptionPeriod); - } - if (product.subscriptionGroupIdentifier) { - dictionary[@"subscriptionGroupIdentifier"] = product.subscriptionGroupIdentifier; - } - dictionary[@"introductoryOfferEligibility"] = @(product.introductoryOfferEligibility); - dictionary[@"promotionalOfferEligibility"] = @(product.promotionalOfferEligibility); - if (product.promotionalOfferId) { - dictionary[@"promotionalOfferId"] = product.promotionalOfferId; - } - if (product.introductoryDiscount) { - dictionary[@"introductoryDiscount"] = discountToDictionary(product.introductoryDiscount); - } - - NSMutableArray *discountsArray = [[NSMutableArray alloc] init]; - for (int i = 0; i < product.discounts.count; ++i) { - if (product.discounts[i]) { - [discountsArray addObject:discountToDictionary(product.discounts[i])]; - } - } - dictionary[@"discounts"] = discountsArray; - if (product.skProduct) { - dictionary[@"skuId"] = product.skProduct.productIdentifier; - skProductCache[product.skProduct.productIdentifier] = product.skProduct; - } - return dictionary; -} - -static NSDictionary *paywallToDictionary(PaywallModel *paywall) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"developerId"] = paywall.developerId; - dictionary[@"variationId"] = paywall.variationId; - dictionary[@"revision"] = @(paywall.revision); - dictionary[@"isPromo"] = @(paywall.isPromo); - dictionary[@"customPayload"] = paywall.customPayload; - - NSMutableArray *productsArray = [[NSMutableArray alloc] init]; - for (int i = 0; i < paywall.products.count; ++i) { - if (paywall.products[i]) { - [productsArray addObject:productToDictionary(paywall.products[i])]; - } - } - dictionary[@"products"] = productsArray; - return dictionary; -} - -static NSDictionary *promoToDictionary(PromoModel *promo) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"promoType"] = promo.promoType; - dictionary[@"variationId"] = promo.variationId; - if (promo.expiresAt) { - dictionary[@"expiresAt"] = dateToString(promo.expiresAt); - } - if (promo.paywall) { - dictionary[@"paywall"] = paywallToDictionary(promo.paywall); - } - return dictionary; -} - -static NSDictionary *accessLevelInfoToDictionary(AccessLevelInfoModel *accessLevel) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"id"] = accessLevel.id; - dictionary[@"isActive"] = @(accessLevel.isActive); - dictionary[@"vendorProductId"] = accessLevel.vendorProductId; - if (accessLevel.vendorTransactionId) { - dictionary[@"vendorTransactionId"] = accessLevel.vendorTransactionId; - } - if (accessLevel.vendorOriginalTransactionId) { - dictionary[@"vendorOriginalTransactionId"] = accessLevel.vendorOriginalTransactionId; - } - dictionary[@"store"] = accessLevel.store; - if (accessLevel.activatedAt) { - dictionary[@"activatedAt"] = dateToString(accessLevel.activatedAt); - } - if (accessLevel.startsAt) { - dictionary[@"startsAt"] = dateToString(accessLevel.startsAt); - } - if (accessLevel.renewedAt) { - dictionary[@"renewedAt"] = dateToString(accessLevel.renewedAt); - } - if (accessLevel.expiresAt) { - dictionary[@"expiresAt"] = dateToString(accessLevel.expiresAt); - } - dictionary[@"isLifetime"] = @(accessLevel.isLifetime); - dictionary[@"willRenew"] = @(accessLevel.willRenew); - dictionary[@"isInGracePeriod"] = @(accessLevel.isInGracePeriod); - if (accessLevel.unsubscribedAt) { - dictionary[@"unsubscribedAt"] = dateToString(accessLevel.unsubscribedAt); - } - if (accessLevel.billingIssueDetectedAt) { - dictionary[@"billingIssueDetectedAt"] = dateToString(accessLevel.billingIssueDetectedAt); - } - if (accessLevel.cancellationReason) { - dictionary[@"cancellationReason"] = accessLevel.cancellationReason; - } - dictionary[@"isRefund"] = @(accessLevel.isRefund); - if (accessLevel.activeIntroductoryOfferType) { - dictionary[@"activeIntroductoryOfferType"] = accessLevel.activeIntroductoryOfferType; - } - if (accessLevel.activePromotionalOfferType) { - dictionary[@"activePromotionalOfferType"] = accessLevel.activePromotionalOfferType; - } - return dictionary; -} - -static NSDictionary *subscriptionInfoToDictionary(SubscriptionInfoModel *subscription) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"id"] = @(subscription.isActive); - dictionary[@"isActive"] = @(subscription.isActive); - dictionary[@"vendorProductId"] = subscription.vendorProductId; - if (subscription.vendorTransactionId) { - dictionary[@"vendorTransactionId"] = subscription.vendorTransactionId; - } - if (subscription.vendorOriginalTransactionId) { - dictionary[@"vendorOriginalTransactionId"] = subscription.vendorOriginalTransactionId; - } - dictionary[@"store"] = subscription.store; - if (subscription.activatedAt) { - dictionary[@"activatedAt"] = dateToString(subscription.activatedAt); - } - if (subscription.startsAt) { - dictionary[@"startsAt"] = dateToString(subscription.startsAt); - } - if (subscription.renewedAt) { - dictionary[@"renewedAt"] = dateToString(subscription.renewedAt); - } - if (subscription.expiresAt) { - dictionary[@"expiresAt"] = dateToString(subscription.expiresAt); - } - dictionary[@"isLifetime"] = @(subscription.isLifetime); - dictionary[@"willRenew"] = @(subscription.willRenew); - dictionary[@"isInGracePeriod"] = @(subscription.isInGracePeriod); - if (subscription.unsubscribedAt) { - dictionary[@"unsubscribedAt"] = dateToString(subscription.unsubscribedAt); - } - if (subscription.billingIssueDetectedAt) { - dictionary[@"billingIssueDetectedAt"] = dateToString(subscription.billingIssueDetectedAt); - } - if (subscription.cancellationReason) { - dictionary[@"cancellationReason"] = subscription.cancellationReason; - } - dictionary[@"isRefund"] = @(subscription.isRefund); - if (subscription.activeIntroductoryOfferType) { - dictionary[@"activeIntroductoryOfferType"] = subscription.activeIntroductoryOfferType; - } - if (subscription.activePromotionalOfferType) { - dictionary[@"activePromotionalOfferType"] = subscription.activePromotionalOfferType; - } - dictionary[@"isSandbox"] = @(subscription.isSandbox); - return dictionary; -} - -static NSDictionary *nonSubscriptionInfoToDictionary(NonSubscriptionInfoModel *nonSubscription) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"purchaseId"] = nonSubscription.purchaseId; - dictionary[@"vendorProductId"] = nonSubscription.vendorProductId; - if (nonSubscription.vendorTransactionId) { - dictionary[@"vendorTransactionId"] = nonSubscription.vendorTransactionId; - } - dictionary[@"store"] = nonSubscription.store; - if (nonSubscription.purchasedAt) { - dictionary[@"purchasedAt"] = dateToString(nonSubscription.purchasedAt); - } - dictionary[@"isRefund"] = @(nonSubscription.isRefund); - dictionary[@"isOneTime"] = @(nonSubscription.isOneTime); - dictionary[@"isSandbox"] = @(nonSubscription.isSandbox); - return dictionary; -} - -static NSDictionary *purchaserInfoToDictionary(PurchaserInfoModel *purchaser) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - if (purchaser.customerUserId) { - dictionary[@"customerUserId"] = purchaser.customerUserId; - } - - NSMutableDictionary *accessLevels = [NSMutableDictionary dictionary]; - [purchaser.accessLevels enumerateKeysAndObjectsUsingBlock:^(NSString *key, AccessLevelInfoModel *accessLevel, BOOL *stop) { - accessLevels[key] = accessLevelInfoToDictionary(accessLevel); - }]; - dictionary[@"accessLevels"] = accessLevels; - - NSMutableDictionary *subscriptions = [NSMutableDictionary dictionary]; - [purchaser.subscriptions enumerateKeysAndObjectsUsingBlock:^(NSString *key, SubscriptionInfoModel *subscription, BOOL *stop) { - subscriptions[key] = subscriptionInfoToDictionary(subscription); - }]; - dictionary[@"subscriptions"] = subscriptions; - - NSMutableDictionary *nonSubscriptions = [NSMutableDictionary dictionary]; - [purchaser.nonSubscriptions enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSArray *nonSubscriptionsArray, BOOL *stop) { - NSMutableArray *array = [[NSMutableArray alloc] init]; - for (int i = 0; i < nonSubscriptionsArray.count; ++i) { - if (nonSubscriptionsArray[i]) { - [array addObject:nonSubscriptionInfoToDictionary(nonSubscriptionsArray[i])]; - } - } - nonSubscriptions[key] = array; - }]; - dictionary[@"nonSubscriptions"] = nonSubscriptions; - return dictionary; -} - -static ProductSubscriptionPeriodModel *dictionaryToSubscriptionPeriod(NSDictionary *dictionary) { - ProductSubscriptionPeriodModel *subscriptionPeriod = [ProductSubscriptionPeriodModel alloc]; - if (dictionary[@"unit"]) { - subscriptionPeriod.unit = stringToPeriodUnit(dictionary[@"unit"]); - } - if (dictionary[@"numberOfUnits"]) { - subscriptionPeriod.numberOfUnits = ((NSNumber *)dictionary[@"numberOfUnits"]).intValue; - } - return subscriptionPeriod; -} - -static ProductDiscountModel *dictionaryToDiscount(NSDictionary *dictionary) { - ProductDiscountModel *discount = [ProductDiscountModel alloc]; - if (dictionary[@"identifier"]) { - discount.identifier = dictionary[@"identifier"]; - } - if (dictionary[@"price"]) { - discount.price = [NSDecimalNumber decimalNumberWithString:dictionary[@"price"]].decimalValue; - } - if (dictionary[@"numberOfPeriods"]) { - discount.numberOfPeriods = ((NSNumber *)dictionary[@"numberOfPeriods"]).intValue; - } - if (dictionary[@"paymentMode"]) { - discount.paymentMode = stringToPaymentMode(dictionary[@"paymentMode"]); - } - if (dictionary[@"localizedPrice"]) { - discount.localizedPrice = dictionary[@"localizedPrice"]; - } - if (dictionary[@"localizedSubscriptionPeriod"]) { - discount.localizedSubscriptionPeriod = dictionary[@"localizedSubscriptionPeriod"]; - } - if (dictionary[@"localizedNumberOfPeriods"]) { - discount.localizedNumberOfPeriods = dictionary[@"localizedNumberOfPeriods"]; - } - if (dictionary[@"subscriptionPeriod"]) { - discount.subscriptionPeriod = dictionaryToSubscriptionPeriod((NSDictionary *)dictionary[@"subscriptionPeriod"]); - } - return discount; -} - -static ProductModel *dictionaryToProduct(NSDictionary *dictionary) { - ProductModel *product = [ProductModel alloc]; - if (dictionary[@"vendorProductId"]) { - product.vendorProductId = dictionary[@"vendorProductId"]; - } - if (dictionary[@"localizedTitle"]) { - product.localizedTitle = dictionary[@"localizedTitle"]; - } - if (dictionary[@"localizedDescription"]) { - product.localizedDescription = dictionary[@"localizedDescription"]; - } - if (dictionary[@"localizedPrice"]) { - product.localizedPrice = dictionary[@"localizedPrice"]; - } - if (dictionary[@"localizedSubscriptionPeriod"]) { - product.localizedSubscriptionPeriod = dictionary[@"localizedSubscriptionPeriod"]; - } - if (dictionary[@"price"]) { - product.price = [NSDecimalNumber decimalNumberWithString:dictionary[@"price"]].decimalValue; - } - if (dictionary[@"currencyCode"]) { - product.currencyCode = dictionary[@"currencyCode"]; - } - if (dictionary[@"currencySymbol"]) { - product.currencySymbol = dictionary[@"currencySymbol"]; - } - if (dictionary[@"regionCode"]) { - product.regionCode = dictionary[@"regionCode"]; - } - if (dictionary[@"subscriptionPeriod"]) { - product.subscriptionPeriod = dictionaryToSubscriptionPeriod((NSDictionary *)dictionary[@"subscriptionPeriod"]); - } - if (dictionary[@"subscriptionGroupIdentifier"]) { - product.subscriptionGroupIdentifier = dictionary[@"subscriptionGroupIdentifier"]; - } - if (dictionary[@"introductoryOfferEligibility"]) { - product.introductoryOfferEligibility = ((NSNumber*)dictionary[@"introductoryOfferEligibility"]).boolValue; - } - if (dictionary[@"promotionalOfferEligibility"]) { - product.promotionalOfferEligibility = ((NSNumber*)dictionary[@"promotionalOfferEligibility"]).boolValue; - } - if (dictionary[@"promotionalOfferId"]) { - product.promotionalOfferId = dictionary[@"promotionalOfferId"]; - } - if (dictionary[@"introductoryDiscount"]) { - product.introductoryDiscount = dictionaryToDiscount((NSDictionary *)dictionary[@"introductoryDiscount"]); - } - - if (dictionary[@"discounts"]) { - NSArray *discounts = dictionary[@"discounts"]; - NSMutableArray *discountsArray = [[NSMutableArray alloc] init]; - for (int i = 0; i < discounts.count; ++i) { - if (discounts[i]) { - [discountsArray addObject:dictionaryToDiscount(discounts[i])]; - } - } - product.discounts = discountsArray; - } - if (dictionary[@"skuId"] && skProductCache[dictionary[@"skuId"]]) { - product.skProduct = skProductCache[dictionary[@"skuId"]]; - } - return product; -} - -static ProfileParameterBuilder *dictionaryToProfileParameterBuilder(NSDictionary *dictionary) { - ProfileParameterBuilder *params = [[ProfileParameterBuilder alloc] init]; - if (dictionary[@"email"]) { - params = [params withEmail:dictionary[@"email"]]; - } - if (dictionary[@"phoneNumber"]) { - params = [params withPhoneNumber:dictionary[@"phoneNumber"]]; - } - if (dictionary[@"facebookUserId"]) { - params = [params withFacebookUserId:dictionary[@"facebookUserId"]]; - } - if (dictionary[@"amplitudeUserId"]) { - params = [params withAmplitudeUserId:dictionary[@"amplitudeUserId"]]; - } - if (dictionary[@"amplitudeDeviceId"]) { - params = [params withAmplitudeDeviceId:dictionary[@"amplitudeDeviceId"]]; - } - if (dictionary[@"mixpanelUserId"]) { - params = [params withMixpanelUserId:dictionary[@"mixpanelUserId"]]; - } - if (dictionary[@"appmetricaProfileId"]) { - params = [params withAppmetricaProfileId:dictionary[@"appmetricaProfileId"]]; - } - if (dictionary[@"appmetricaDeviceId"]) { - params = [params withAppmetricaDeviceId:dictionary[@"appmetricaDeviceId"]]; - } - if (dictionary[@"firstName"]) { - params = [params withFirstName:dictionary[@"firstName"]]; - } - if (dictionary[@"lastName"]) { - params = [params withLastName:dictionary[@"lastName"]]; - } - if (dictionary[@"gender"]) { - params = [params withGender:stringToGender(dictionary[@"gender"])]; - } - if (dictionary[@"birthday"]) { - NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; - [dateFormat setDateFormat:@"yyyy-MM-dd"]; - NSDate *date = [dateFormat dateFromString:dictionary[@"birthday"]]; - params = [params withBirthday:date]; - } - if (dictionary[@"appTrackingTransparencyStatus"]) { - params = [params withAppTrackingTransparencyStatus:[dictionary[@"appTrackingTransparencyStatus"] unsignedIntegerValue]]; - } - if (dictionary[@"customAttributes"]) { - params = [params withCustomAttributes:dictionary[@"customAttributes"]]; - } - return params; -} diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm b/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm deleted file mode 100644 index aafb1fc..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm +++ /dev/null @@ -1,27 +0,0 @@ -#import "Foundation/Foundation.h" - -#import "AdaptyModels.mm" - -static NSString *cstringToString(const char *str) { - return str ? [NSString stringWithUTF8String:str] : nil; -} - -static NSDictionary *jsonToDictionary(const char *jsonString) { - if (jsonString) { - NSData *jsonData = [[NSData alloc] initWithBytes:jsonString length:strlen(jsonString)]; - NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil]; - return dictionary; - } - - return nil; -} - -static NSString *dictionaryToJson(NSDictionary* dictionary) { - if (dictionary) { - NSError *err; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&err]; - return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - } - - return nil; -} diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm b/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm deleted file mode 100644 index d99a670..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm +++ /dev/null @@ -1,358 +0,0 @@ -#import "AdaptyUnityUtils.mm" - -static const NSString *tag = @"AdaptyiOSWrapper"; - -static NSString *Callback_identify = @"OnIdentify"; -static NSString *Callback_logout = @"OnLogout"; -static NSString *Callback_getPaywalls = @"OnGetPaywalls"; -static NSString *Callback_makePurchase = @"OnMakePurchase"; -static NSString *Callback_restorePurchases = @"OnRestorePurchases"; -static NSString *Callback_validateReceipt = @"OnValidateAppleReceipt"; -static NSString *Callback_getPurchaserInfo = @"OnGetPurchaserInfo"; -static NSString *Callback_setOnPurchaserInfoUpdatedListener = @"OnPurchaserInfoUpdated"; -static NSString *Callback_updateAttribution = @"OnUpdateAttribution"; -static NSString *Callback_updateProfile = @"OnUpdateProfile"; -static NSString *Callback_getPromo = @"OnGetPromo"; -static NSString *Callback_setOnPromoReceivedListener = @"OnPromoReceived"; -static NSString *Callback_makeDeferredPurchaseListener = @"OnMakeDeferredPurchase"; - -@interface Callback : NSObject -@property(retain, nonatomic) NSString *objectName, *method, *message; -@end - -@implementation Callback -@end - -static NSMutableArray *callbacks = [NSMutableArray array]; - -static void sendMessage(NSString *objectName, NSString *method, NSString *message) { - if (objectName) { - Callback *callback = [Callback alloc]; - callback.objectName = objectName; - callback.method = method; - callback.message = message; - [callbacks addObject:callback]; - } -} - -@interface AdaptyDelegateWrapper : NSObject -@property(copy, nonatomic) NSString *promoReceivedListener, *purchaserInfoUpdatedListener, *makeDeferredPurchaseListener; -@end - -@implementation AdaptyDelegateWrapper --(void)didReceivePromo:(PromoModel *)promo { - if (self.promoReceivedListener) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (promo) { - message[@"promo"] = promoToDictionary(promo); - } - sendMessage(self.promoReceivedListener, Callback_setOnPromoReceivedListener, dictionaryToJson(message)); - } -} --(void)didReceiveUpdatedPurchaserInfo:(PurchaserInfoModel *)purchaserInfo { - if (self.purchaserInfoUpdatedListener){ - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - sendMessage(self.purchaserInfoUpdatedListener, Callback_setOnPurchaserInfoUpdatedListener, dictionaryToJson(message)); - } -} --(void)paymentQueueWithShouldAddStorePaymentFor:(ProductModel *)product defermentCompletion:(void (^)(void (^ _Nullable)(PurchaserInfoModel * _Nullable, NSString * _Nullable, NSDictionary * _Nullable, ProductModel * _Nullable, AdaptyError * _Nullable)))makeDeferredPurchase { - makeDeferredPurchase(^(PurchaserInfoModel * _Nullable purchaserInfo, NSString * _Nullable receipt, NSDictionary * _Nullable appleValidationResult, ProductModel * _Nullable _product, AdaptyError * _Nullable error) { - if (self.makeDeferredPurchaseListener){ - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (receipt) { - message[@"receipt"] = receipt; - } - if (appleValidationResult) { - message[@"validationResult"] = appleValidationResult; - } - if (_product) { - message[@"product"] = productToDictionary(_product); - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(self.makeDeferredPurchaseListener, Callback_makeDeferredPurchaseListener, dictionaryToJson(message)); - } - }); -} -@end - -static AdaptyDelegateWrapper *adaptyDelegateWrapper; - -extern "C" bool AdaptyUnity_hasCallback() { - return callbacks.count > 0; -} - -extern "C" const char *AdaptyUnity_getCallbackObjectName() { - Callback *callback = (Callback *)callbacks.firstObject; - if (callback) { - return strdup(callback.objectName.UTF8String); - } - return nil; -} - -extern "C" const char *AdaptyUnity_getCallbackMethod() { - Callback *callback = (Callback *)callbacks.firstObject; - if (callback) { - return strdup(callback.method.UTF8String); - } - return nil; -} - -extern "C" const char *AdaptyUnity_getCallbackMessageAndPop() { - Callback *callback = (Callback *)callbacks.firstObject; - if (callback) { - [callbacks removeObjectAtIndex:0]; - return strdup(callback.message.UTF8String); - } - return nil; -} - -extern "C" void AdaptyUnity_setLogLevel(int logLevel) { - NSLog(@"%@ setLogLevel()", tag); - switch (logLevel) { - case 0: - [Adapty setLogLevel:AdaptyLogLevelNone]; - break; - - case 1: - [Adapty setLogLevel:AdaptyLogLevelErrors]; - break; - - case 2: - [Adapty setLogLevel:AdaptyLogLevelVerbose]; - break; - } -} - -extern "C" void AdaptyUnity_activate(const char *key, bool observeMode) { - NSLog(@"%@ activate()", tag); - [Adapty activate:cstringToString(key) observerMode:observeMode]; - if (adaptyDelegateWrapper == nil) { - adaptyDelegateWrapper = [[AdaptyDelegateWrapper alloc] init]; - [Adapty setDelegate:adaptyDelegateWrapper]; - } -} - -extern "C" void AdaptyUnity_identify(const char *customerUserId, const char *objectName) { - NSLog(@"%@ identify()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty identify:cstringToString(customerUserId) completion:^(AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_identify, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_logout(const char *objectName) { - NSLog(@"%@ logout()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty logout:^(AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_logout, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_getPaywalls(const char *objectName) { - NSLog(@"%@ getPaywalls()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty getPaywalls:^(NSArray * _Nullable paywalls, NSArray * _Nullable products, enum DataState state, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (paywalls) { - NSMutableArray *array = [[NSMutableArray alloc] init]; - for (int i = 0; i < paywalls.count; ++i) { - if (paywalls[i]) { - [array addObject:paywallToDictionary(paywalls[i])]; - } - } - message[@"paywalls"] = array; - } - if (products) { - NSMutableArray *array = [[NSMutableArray alloc] init]; - for (int i = 0; i < products.count; ++i) { - if (products[i]) { - [array addObject:productToDictionary(products[i])]; - } - } - message[@"products"] = array; - } - if (state == DataStateCached) { - message[@"state"] = @"cached"; - } else if (state == DataStateSynced) { - message[@"state"] = @"synced"; - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_getPaywalls, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_makePurchase(const char *productJson, const char *offerId, const char *objectName) { - NSLog(@"%@ makePurchase()", tag); - NSString *objectNameString = cstringToString(objectName); - ProductModel *product = dictionaryToProduct(jsonToDictionary(productJson)); - [Adapty makePurchaseWithProduct:product offerId:cstringToString(offerId) completion:^(PurchaserInfoModel * _Nullable purchaserInfo, NSString * _Nullable receipt, NSDictionary * _Nullable appleValidationResult, ProductModel * _Nullable _product, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (receipt) { - message[@"receipt"] = receipt; - } - if (appleValidationResult) { - message[@"validationResult"] = appleValidationResult; - } - if (_product) { - message[@"product"] = productToDictionary(_product); - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_makePurchase, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_restorePurchases(const char *objectName) { - NSLog(@"%@ restorePurchases()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty restorePurchasesWithCompletion:^(PurchaserInfoModel * _Nullable purchaserInfo, NSString * _Nullable receipt, NSDictionary * _Nullable appleValidationResult, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (receipt) { - message[@"receipt"] = receipt; - } - if (appleValidationResult) { - message[@"validationResults"] = [NSArray arrayWithObject:appleValidationResult]; - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_restorePurchases, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_validateReceipt(const char *receipt, const char *objectName) { - NSLog(@"%@ validateReceipt()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty validateReceipt:cstringToString(receipt) completion:^(PurchaserInfoModel * _Nullable purchaserInfo, NSDictionary * _Nullable appleValidationResult, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (appleValidationResult) { - message[@"validationResult"] = appleValidationResult; - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_validateReceipt, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_getPurchaserInfo(const char *objectName) { - NSLog(@"%@ getPurchaserInfo()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty getPurchaserInfo:^(PurchaserInfoModel * _Nullable purchaserInfo, DataState state, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (state == DataStateCached) { - message[@"state"] = @"cached"; - } else if (state == DataStateSynced) { - message[@"state"] = @"synced"; - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_getPurchaserInfo, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_setOnPurchaserInfoUpdatedListener(const char *objectName) { - NSLog(@"%@ setOnPurchaserInfoUpdatedListener()", tag); - if (adaptyDelegateWrapper) { - adaptyDelegateWrapper.purchaserInfoUpdatedListener = cstringToString(objectName); - } -} - -extern "C" void AdaptyUnity_updateAttribution(const char *attributionJson, int sourceInt, const char *networkUserId, const char *objectName) { - NSLog(@"%@ updateAttribution()", tag); - NSString *objectNameString = cstringToString(objectName); - NSDictionary *attribution = jsonToDictionary(attributionJson); - AttributionNetwork attributionNetwork; - switch (sourceInt) { - default: - case 0: - attributionNetwork = AttributionNetworkAppsflyer; - break; - - case 1: - attributionNetwork = AttributionNetworkAdjust; - break; - - case 2: - attributionNetwork = AttributionNetworkBranch; - break; - - case 3: - attributionNetwork = AttributionNetworkCustom; - break; - } - [Adapty updateAttribution:attribution source:attributionNetwork networkUserId:cstringToString(networkUserId) completion:^(AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_updateAttribution, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_updateProfile(const char *paramsJson, const char *objectName) { - NSLog(@"%@ updateProfile()", tag); - NSString *objectNameString = cstringToString(objectName); - ProfileParameterBuilder *params = dictionaryToProfileParameterBuilder(jsonToDictionary(paramsJson)); - [Adapty updateProfileWithParams:params completion:^(AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_updateProfile, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_getPromo(const char *objectName) { - NSLog(@"%@ getPromo()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty getPromo:^(PromoModel * _Nullable promo, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (promo) { - message[@"promo"] = promoToDictionary(promo); - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_getPromo, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_setOnPromoReceivedListener(const char *objectName) { - NSLog(@"%@ setOnPromoReceivedListener()", tag); - if (adaptyDelegateWrapper) { - adaptyDelegateWrapper.promoReceivedListener = cstringToString(objectName); - } -} diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/EnableSwift.swift b/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/EnableSwift.swift deleted file mode 100644 index fecc4ab..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/EnableSwift.swift +++ /dev/null @@ -1 +0,0 @@ -import Foundation diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/EnableSwift.swift.meta b/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/EnableSwift.swift.meta deleted file mode 100644 index 4cde74a..0000000 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/EnableSwift.swift.meta +++ /dev/null @@ -1,37 +0,0 @@ -fileFormatVersion: 2 -guid: 646692c705ee54721beaf07c044efcb3 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - iPhone: iOS - second: - enabled: 1 - settings: {} - - first: - tvOS: tvOS - second: - enabled: 1 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/AdaptyListener.cs b/AdaptyUnityProject/Assets/AdaptyListener.cs deleted file mode 100644 index 24dddba..0000000 --- a/AdaptyUnityProject/Assets/AdaptyListener.cs +++ /dev/null @@ -1,229 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AdaptySDK; - -public class AdaptyListener : MonoBehaviour { - // Start is called before the first frame update - void Start() { - Adapty.setOnPromoReceivedListener(this); - Adapty.setOnPurchaserInfoUpdatedListener(this); - } - - // Button Clicks - - public void GetPaywallsButtonClick() { - Adapty.getPaywalls(this); - } - - public void RestorePurchasesButtonClick() { - Adapty.restorePurchases(this); - } - - public void GetPurchaserInfoButtonClick() { - Adapty.getPurchaserInfo(this); - } - - public void GetPromoButtonClick() { - Adapty.getPromo(this); - } - - public void IdentifyButtonClick() { - Adapty.identify("my_unity_user_id", this); - } - - public void LogoutButtonClick() { - Adapty.logout(this); - } - - List retrievedProducts = new List(); - public void MakePurchaseButtonClick() { - if (retrievedProducts.Count > 0) { - Adapty.makePurchase(retrievedProducts[0], null, this); - retrievedProducts.RemoveAt(0); - } - } - - public void SyncPurchasesButtonClick() { - Adapty.syncPurchases(this); - } - - string retrievedReceipt = null; - public void ValidateReceiptButtonClick() { - if (retrievedReceipt != null) { - Adapty.validateAppleReceipt(retrievedReceipt, this); - } - } - - public void UpdateAttributionButtonClick() { - Dictionary attribution = new Dictionary(); - attribution.Add("some_key", "some_value"); - Adapty.updateAttribution(attribution, AttributionNetwork.Adjust, "user_id", this); - } - - public void UpdateProfileButtonClick() { - ProfileParameterBuilder profile = new ProfileParameterBuilder() - .withBirthday("1970-01-01") - .withEmail("some@gmail.com") - .withFirstName("Somename") - .withLastName("Somelast") - .withGender(Gender.Male) - .withPhoneNumber("+11234567890"); - Adapty.updateProfile(profile, this); - } - - // Adapty Callbacks - - public void OnIdentify(AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } - } - - public void OnLogout(AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } - } - - public void OnGetPaywalls(PaywallModel[] paywalls, ProductModel[] products, DataState state, AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } else { - Debug.Log("State: " + state); - foreach (PaywallModel paywall in paywalls) { - Debug.Log("Paywall developerId: " + paywall.developerId + ", products: " + paywall.products.Length); - } - foreach (ProductModel product in products) { - retrievedProducts.Add(product); - Debug.Log("Product price: " + product.localizedPrice + ", vendorProductId: " + product.vendorProductId + ", skuId: " + product.skuId); - } - } - } - - public void OnMakePurchase(PurchaserInfoModel purchaserInfo, string receipt, Dictionary validationResult, ProductModel product, AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } else { - if (purchaserInfo != null) { - Debug.Log("Purchaser customerUserId: " + purchaserInfo.customerUserId + ", accessLevels: " + purchaserInfo.accessLevels.Count + ", subscriptions: " + purchaserInfo.subscriptions.Count + ", nonSubscriptions: " + purchaserInfo.nonSubscriptions.Count); - } - Debug.Log("Receipt/PurchaseToken: " + receipt); - if (product != null) { - Debug.Log("Product price: " + product.localizedPrice + ", vendorProductId: " + product.vendorProductId + ", skuId: " + product.skuId); - } - if (retrievedReceipt == null) { - retrievedReceipt = receipt; - } - if (validationResult != null) { - foreach (KeyValuePair item in validationResult) { - Debug.Log("ValidationResult " + item.Key + ": " + item.Value); - } - } - } - } - - public void OnRestorePurchases(PurchaserInfoModel purchaserInfo, string receipt, Dictionary[] validationResults, AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } else { - if (purchaserInfo != null) { - Debug.Log("Purchaser customerUserId: " + purchaserInfo.customerUserId + ", accessLevels: " + purchaserInfo.accessLevels.Count + ", subscriptions: " + purchaserInfo.subscriptions.Count + ", nonSubscriptions: " + purchaserInfo.nonSubscriptions.Count); - } - Debug.Log("Receipt/PurchaseToken: " + receipt); - if (retrievedReceipt == null) { - retrievedReceipt = receipt; - } - if (validationResults != null && validationResults.Length > 0) { - foreach (KeyValuePair item in validationResults[0]) { - Debug.Log("ValidationResult " + item.Key + ": " + item.Value); - } - } - } - } - - public void OnSyncPurchases(AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } - } - - public void OnValidateAppleReceipt(PurchaserInfoModel purchaserInfo, Dictionary validationResult, AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } else { - if (purchaserInfo != null) { - Debug.Log("Purchaser customerUserId: " + purchaserInfo.customerUserId + ", accessLevels: " + purchaserInfo.accessLevels.Count + ", subscriptions: " + purchaserInfo.subscriptions.Count + ", nonSubscriptions: " + purchaserInfo.nonSubscriptions.Count); - } - if (validationResult != null) { - foreach (KeyValuePair item in validationResult) { - Debug.Log("ValidationResult " + item.Key + ": " + item.Value); - } - } - } - } - - public void OnValidateGooglePurchase(PurchaserInfoModel purchaserInfo, Dictionary validationResult, AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } else { - if (purchaserInfo != null) { - Debug.Log("Purchaser customerUserId: " + purchaserInfo.customerUserId + ", accessLevels: " + purchaserInfo.accessLevels.Count + ", subscriptions: " + purchaserInfo.subscriptions.Count + ", nonSubscriptions: " + purchaserInfo.nonSubscriptions.Count); - } - foreach (KeyValuePair item in validationResult) { - Debug.Log("ValidationResult " + item.Key + ": " + item.Value); - } - } - } - - public void OnGetPurchaserInfo(PurchaserInfoModel purchaserInfo, DataState state, AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } else { - if (purchaserInfo != null) { - Debug.Log("Purchaser customerUserId: " + purchaserInfo.customerUserId + ", accessLevels: " + purchaserInfo.accessLevels.Count + ", subscriptions: " + purchaserInfo.subscriptions.Count + ", nonSubscriptions: " + purchaserInfo.nonSubscriptions.Count); - } - Debug.Log("State: " + state); - } - } - - public void OnPurchaserInfoUpdated(PurchaserInfoModel purchaserInfo) { - Debug.Log("Purchaser customerUserId: " + purchaserInfo.customerUserId + ", accessLevels: " + purchaserInfo.accessLevels.Count + ", subscriptions: " + purchaserInfo.subscriptions.Count + ", nonSubscriptions: " + purchaserInfo.nonSubscriptions.Count); - } - - public void OnUpdateAttribution(AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } - } - - public void OnUpdateProfile(AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } - } - - public void OnGetPromo(PromoModel promo, AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } else { - if (promo != null) { - Debug.Log("Promo promoType:" + promo.promoType + ", expiresAt:" + promo.expiresAt); - } else { - Debug.Log("No promo"); - } - } - } - - public void OnPromoReceived(PromoModel promo) { - Debug.Log("Promo promoType:" + promo.promoType + ", expiresAt:" + promo.expiresAt); - } - - public void OnMakeDeferredPurchase(PurchaserInfoModel purchaserInfo, string receipt, Dictionary validationResult, ProductModel product, AdaptyError error) { - if (error != null) { - Debug.Log("Error message: " + error.message + ", code: " + error.code); - } else { - Debug.Log("Purchaser customerUserId: " + purchaserInfo.customerUserId + ", accessLevels: " + purchaserInfo.accessLevels.Count + ", subscriptions: " + purchaserInfo.subscriptions.Count + ", nonSubscriptions: " + purchaserInfo.nonSubscriptions.Count); - } - } -} diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/CHANGELOG.md b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/CHANGELOG.md deleted file mode 100755 index fafaf22..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/CHANGELOG.md +++ /dev/null @@ -1,1270 +0,0 @@ -# Version 1.2.162 - Nov 19, 2020 -* Version Handler - Improved #413 by preventing Version Handler from running - from static constructor when it is disabled. -* Package Manager Resolver - Remove GPR - -# Version 1.2.161 - Oct 12, 2020 -* Android Resolver - Fixed the issue that Android Resolver does not resolve - again before build in Unity 2020 if it failed to resolve previously. - -# Version 1.2.160 - Sep 30, 2020 -* Android Resolver - Fixed a regression that gradleResolver can be null until - Initialize() is called. -* Android Resolver - Fixed a regression that Android Resolver failed in Unity - 2019.3+ due to `gradleTemplate.properties` not enabled when - `mainTemplate.gradle` is not enabled at all. - -# Version 1.2.159 - Sep 11, 2020 -* Android Resolver - Fixed #322 where the Unity editor will lose its target SDK - setting between Unity restarts if `>28` is selected in 2019. This is due to - Unity AndroidSdkVersions enum does not contain values above 28. -* Android Resolver - Fixed #360 where building Android app with Untiy 2019.3+ - may fail due to Jetifier and AndroidX not enabled properly in generated - Gradle project. This fix requires the user to enable - `Custom Gradle Properties Template` found under - `Player Settings > Settings for Android > Publishing Settings`. - -# Version 1.2.158 - Sep 3, 2020 -* Version Handler: Fixed editor freeze when `-executeMethod` is used in - non-batch mode. -* Android Resolver: Normalized file paths when generating local Maven repo - since the path may contains a mix of forward and backward slash on Windows. -* Export Unity Package: Fixed generation of .unitypackage with tarfile on - Windows. - -# Version 1.2.157 - Aug 6, 2020 -* Android Resolver: Delay initialization until active build target is Android - and the editor is not in play mode. -* iOS Resolver: Delay initialization until active build target is iOS - and the editor is not in play mode. -* Export Unity Package: Workaround directory creation racy if multiple export - operations are spawned at the same time. - -# Version 1.2.156 - June 10, 2020 -* All: Described EDM4U analytics data usage in readme. -* Android Resolver: Fixed that the generated local repo assets contains - redundent labels which are causing Version Handler to failed while - uninstalling packages. -* Android Resolver: Fixed that the repo url injected into mainTemplate.gradle - is incorrect when Unity is configured to export gradle project. -* Android Resolver: Limited to only create local Maven repo when the source - repo contains ".srcaar" file. - -# Version 1.2.155 - May 14, 2020 -* All: Fixed compiler error when build with Unity 5.4 or below due to the - usage of Rect.zero. -* All: Ignore cases when checking command line arguments. - -# Version 1.2.154 - May 14, 2020 -* All: Make each MultiSelectWindow for different purposes to have its own - unique window. -* All: Replace all dialog with DialogWindow which is implemented from - EditorWindow. -* Package Manager Resolver: Clarify how manifest.json will be changed in Package - Manager Resolver window. - -# Version 1.2.153 - Apr 24, 2020 -* Android Resolver: Fixed an exception when repainting the Android resolution - window in Unity 2019.3.x. - -# Version 1.2.152 - Apr 17, 2020 -* Version Handler: Fixed exception when waiting for enabled editor DLLs to - load. -* Android Resolver: Fixed regression when using a Custom Gradle Template - on Windows. - -# Version 1.2.151 - Apr 16, 2020 -## Bug Fixes -* Version Handler: When waiting for newly enabled editor DLLs to load, ignore - all DLLs that do not have a file-system location. -* Android Resolver: Fixed resolution when using a Custom Gradle Template with - libraries stored in a local maven repository distributed with a plugin - installed with the Unity Package Manager. - -# Version 1.2.150 - Apr 9, 2020 -## Bug Fixes -* All: The new packaging script when run on MacOS was generating a - .unitypackage archive that could not be read by Unity on Windows. - This release simply repackages the plugin with tar/gzip to fix the problem. - -# Version 1.2.149 - Apr 8, 2020 -## Bug Fixes -* Package Manager Resolver: Fixed spurious error message when resuming - migration after installing a UPM package. - -# Version 1.2.148 - Apr 8, 2020 -## Bug Fixes -* Package Manager Resolver: Fixed an exception when resuming migration - after installing a UPM package. - -# Version 1.2.147 - Apr 8, 2020 -## Bug Fixes -* Version Handler: Fixed alias traversal bug which caused problems when - migrating from installed .unitypackage files to UPM packages. - -# Version 1.2.146 - Apr 8, 2020 -## Bug Fixes -* Version Handler: Fixed exception in manifest parsing when a manifest is - detected with no aliases. - -# Version 1.2.145 - Apr 2, 2020 -## New Features -* Package Manager Resolver: Added a method to migrate Version Handler - managed packages installed via `.unitypackage` to Unity Package Manager - packages. This is initially used to migrate the External Dependency Manager - to UPM. - -## Changes -* All: Verbose logging is now no longer automatically enabled in batch mode - across all components. Instead logging can be configured using each - component's verbose logging setting or by using the `-gvh_log_debug` command - line flag when starting Unity. -* Version Handler: Sped up version handler updates when the app domain isn't - reloaded. - -## Bug Fixes -* Version Handler: Fixed the display of the obsolete files clean up dialog - when the asset database refreshes. -* Version Handler: Improved reliability of callback from - the VersionHandler.UpdateCompleteMethods event when an asset database - refresh occurs. -* Version Handler: Fixed duplicate exportPath labels when 'Assets/' is the - root of paths assigned to files. -* Version Handler: Handle empty lines in manifest files. - -# Version 1.2.144 - Mar 23, 2020 -## Changed -* iOS Resolver: Removed the ability to configure the Xcode target a Cocoapod - is added to. - -## Bug Fixes -* iOS Resolver: Reverted support for adding Cocoapods to multiple targets as - it caused a regression (exception thrown during post-build step) in some - versions of Unity. - -# Version 1.2.143 - Mar 20, 2020 -## Bug Fixes -* Android Resolver: Fixed caching of resolution state which was causing - the resolver to always run when no dependencies had changed. - -# Version 1.2.142 - Mar 19, 2020 -## Changes -* Package Manager Resolver: Enabled auto-add by default. - -# Version 1.2.141 - Mar 19, 2020 -## Bug Fixes -* Fixed a bug when retrieving project settings. If a plugin was configured - to fetch project settings, if a setting was fetched (e.g "foo") and this - setting existed in the system settings but not the project settings the - system value would override the default value leading to unexpected - behavior. -* Fixed a warning when caching web request classes in Unity 5.6. - -# Version 1.2.140 - Mar 19, 2020 -## Bug Fixes -* Fixed measurement reporting in Unity 5.x. -* Version Handler: Fixed NullReferenceException when an asset doesn't have - an AssetImporter. - -# Version 1.2.139 - Mar 18, 2020 -## Changed -* Added documentation to the built plugin. - -# Version 1.2.138 - Mar 17, 2020 -## New Features -* Package Manager Resolver: Added the Package Manager Resolver - component that allows developers to easily boostrap Unity Package Manager - (UPM) registry addition using unitypackage plugins. -* Version Handler: Added a window that allows plugins to managed by the - Version Handler to be uninstalled. -* Version Handler: Added support for displaying installed plugins. -* Version Handler: Added support for moving files in plugins to their install - locations (if the plugin has been configured to support this). -* iOS Resolver: Added the ability to configure the Xcode target a Cocoapod is - added to. - -## Bug Fixes -* Fixed upgrade from version 1.2.137 and below after the plugin rename to - EDM4U broke the upgrade process. -* Android Resolver: Worked around PlayerSettings.Android.targetSdkVersion - returning empty names for some values in 2019.x. -* Version Handler: Fixed the display of the obsolete files clean up window. -* Version Handler: Fixed managed file check when assets are modified in the - project after plugin import. - -# Version 1.2.137 - Mar 6, 2020 -## Changed -* Renamed package to External Package Manager for Unity (EDM4U). - We changed this to reflect what this plugin is doing today which is far more - than the original scope which just consisted of importing jar files from the - Android SDK maven repository. - Scripts that used to pull `play-services-resolver*.unitypackage` will now have - to request `external-dependency-manager*.unitypackage` instead. - We'll still be shipping a `play-services-resolver*_manifest.txt` file to - handle upgrading from older versions of the plugin. - -## New Features -* All Components: Added reporting of usage so that we can remotely detect - errors and target improvements. -* Android Resolver: Added support for *Dependencies.xml files in Unity Package - Manager packages. -* iOS Resolver: Added support for *Dependencies.xml files in Unity Package - Manager packages. - -## Bug Fixes -* Version Handler: Disabled attempts to disable asset metadata modification - when assets are in a Unity Package Manager managed package. - -# Version 1.2.136 - Feb 19, 2019 -## Bug Fixes -* Android Resolver: Fixed OpenJDK path discovery in Unity 2019.3.1. - -# Version 1.2.135 - Dec 5, 2019 -## Bug Fixes -* All Components: Fixed stack overflow when loading project settings. - -# Version 1.2.134 - Dec 4, 2019 -## Bug Fixes -* All Components: Fixed an issue which caused project settings to be cleared - when running in batch mode. - -# Version 1.2.133 - Nov 18, 2019 -## Bug Fixes -* All Components: Failure to save project settings will now report an error - to the log rather than throwing an exception. - -# Version 1.2.132 - Nov 11, 2019 -## Bug Fixes -* Android Resolver: Worked around expansion of DIR_UNITYPROJECT on Windows - breaking Gradle builds when used as part of a file URI. -* Android Resolver: mainTemplate.gradle is only written if it needs to be - modified. - -# Version 1.2.131 - Oct 29, 2019 -## Bug Fixes -* Version Handler: Improved execution of events on the main thread in batch - mode. -* Version Handler: Improved log level configuration at startup. -* Version Handler: Improved performance of class lookup in deferred method - calls. -* Version Handler: Fixed rename to enable / disable for editor assets. -* iOS Resolver: Improved log level configuration at startup. -* Android Resolver: Improved local maven repo path reference in - mainTemplate.gradle using DIR_UNITYPROJECT. DIR_UNITYPROJECT by Unity - to point to the local filesystem path of the Unity project when Unity - generates the Gradle project. - -# Version 1.2.130 - Oct 23, 2019 -## New Features -* iOS Resolver: Added support for modifying the Podfile before `pod install` - is executed. - -## Bug Fixes -* Version Handler: Fixed invalid classname error when calling - `VersionHandler.UpdateVersionedAssets()`. - -# Version 1.2.129 - Oct 2, 2019 -## Bug Fixes -* iOS Resolver: Changed Cocoapod integration in Unity 2019.3+ to - only add Pods to the UnityFramework target. - -# Version 1.2.128 - Oct 1, 2019 -## Bug Fixes -* iOS Resolver: Fixed Cocoapod project integration mode with Unity - 2019.3+. - -# Version 1.2.127 - Sep 30, 2019 -## Changes -* Android Resolver: All Android Resolver settings File paths are now - serialized with POSIX directory separators. - -# Version 1.2.126 - Sep 27, 2019 -## Changes -* Android Resolver: File paths are now serialized with POSIX directory - separators. -## Bug Fixes -* Android Resolver: Fixed resolution when the parent directory of a Unity - project contains a Gradle project (i.e `settings.gradle` file). - -# Version 1.2.125 - Sep 23, 2019 -## Bug Fixes -* All components: Silenced a warning about not being able to set the console - encoding to UTF8. -* Android Resolver: Worked around broken AndroidSDKTools class in some - versions of Unity. -* iOS Resolver: Fixed iOS target SDK version check -* Version Handler: Changed clean up obsolete files window so that it doesn't - exceed the screen size. - -# Version 1.2.124 - Jul 28, 2019 -## Bug Fixes -* All components: Fixed regression with source control integration when using - Unity 2019.1+. - -# Version 1.2.123 - Jul 23, 2019 -## New Features -* All components: Source control integration for project settings. -## Changes -* Android Resolver: Removed AAR cache as it now makes little difference to - incremental resolution performance. -* Android Resolver: Improved embedded resource management so that embedded - resources should upgrade when the plugin is updated without restarting - the Unity editor. -## Bug Fixes -* Version Handler: Fixed InvokeMethod() and InvokeStaticMethod() when calling - methods that have interface typed arguments. - -# Version 1.2.122 - Jul 2, 2019 -## Bug Fixes -* iOS Resolver: Worked around Unity not loading the iOS Resolver DLL as it - referenced the Xcode extension in a public interface. The iOS Resolver - DLL still references the Xcode extension internally and just handles - missing type exceptions dynamically. - -# Version 1.2.121 - Jun 27, 2019 -## Bug Fixes -* Android Resolver: Fixed warning about missing Packages folder when loading - XML dependencies files in versions of Unity without the package manager. -* Android Resolver: Fixed resolution window progress bar exceeding 100%. -* Android Resolver: If AndroidX is detected in the set of resolved libraries, - the user will be prompted to enable the Jetifier. -* Android Resolver: Improved text splitting in text area windows. -* iOS Resolver: Added support for Unity's breaking changes to the Xcode API - in 2019.3.+. Cocoapods are now added to build targets, Unity-iPhone and - UnityFramework in Unity 2019.3+. - -# Version 1.2.120 - Jun 26, 2019 -## New Features -* Android Resolver: Added support for loading *Dependencies.xml files from - Unity Package Manager packages. -* Android Resolver: Resolution window is now closed if resolution runs as - a pre-build step. -* iOS Resolver: Added support for loading *Dependencies.xml files from - Unity Package Manager packages. -## Bug Fixes -* Android Resolver: Fixed generation of relative repo paths when using - mainTemplate.gradle resolver. -* Android Resolver: Fixed copy of .srcaar to .aar files in repos embedded in a - project when a project path has characters (e.g whitespace) that are escaped - during conversion to URIs. -* Android Resolver: Fixed auto-resolution always running if the Android SDK - is managed by Unity Hub. - -# Version 1.2.119 - Jun 19, 2019 -## Bug Fixes -* Android Resolver: Fixed error reported when using Jetifier integration - in Unity 2018+ if the target SDK is set to "highest installed". - -# Version 1.2.118 - Jun 18, 2019 -## New Features -* Android Resolver: Added initial - [Jetifier](https://developer.android.com/studio/command-line/jetifier) - integration which simplifies - [migration](ttps://developer.android.com/jetpack/androidx/migrate) - to Jetpack ([AndroidX](https://developer.android.com/jetpack/androidx)) - libraries in cases where all dependencies are managed by the Android - Resolver. - This can be enabled via the `Use Jetifier` option in the - `Assets > Play Services Resolver > Android Resolver > Settings` menu. - Caveats: - - If your project contains legacy Android Support Library .jar and .aar - files, these files will need to be removed and replaced with references to - artifacts on Maven via `*Dependencies.xml` files so that the Jetifier - can map them to Jetpack (AndroidX) libraries. - For example, remove the file `support-v4-27.0.2.jar` and replace it with - `` in a - `*Dependencies.xml` file. - - If your project contains .jar or .aar files that use the legacy Android - Support Libraries, these will need to be moved into a local Maven repo - [See this guide](https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html) - and then these files should be removed from your Unity project and instead - referenced via `*Dependencies.xml` files so that the Jetifier can - patch them to reference the Jetpack lirbaries. - -## Bug Fixes -* Android Resolver: Disabled version locking of com.android.support:multidex - does not use the same versioning scheme as other legacy Android support - libraries. -* Version Handler: Made Google.VersionHandler.dll's asset GUID stable across - releases. This faciliates error-free import into projects where - Google.VersionHandler.dll is moved from the default install location. - -# Version 1.2.117 - Jun 12, 2019 -## Bug Fixes -* Android Resolver: Fix copying of .srcaar to .aar files for - mainTemplate.gradle resolution. PluginImporter configuration was previously - not being applied to .aar files unless the Unity project was saved. - -# Version 1.2.116 - Jun 7, 2019 -## Bug Fixes -* Android Resolver: Fixed resolution of Android dependencies without version - specifiers. -* Android Resolver: Fixed Maven repo not found warning in Android Resolver. -* Android Resolver: Fixed Android Player directory not found exception in - Unity 2019.x when the Android Player isn't installed. - -# Version 1.2.115 - May 28, 2019 -## Bug Fixes -* Android Resolver: Fixed exception due to Unity 2019.3.0a4 removing - x86 from the set of supported ABIs. - -# Version 1.2.114 - May 27, 2019 -## New Features -* Android Resolver: Added support for ABI stripping when using - mainTemplate.gradle. This only works with AARs stored in repos - on the local filesystem. - -# Version 1.2.113 - May 24, 2019 -## New Features -* Android Resolver: If local repos are moved, the plugin will search the - project for matching directories in an attempt to correct the error. -* Version Handler: Files can be now targeted to multiple build targets - using multiple "gvh_" asset labels. -## Bug Fixes -* Android Resolver: "implementation" or "compile" are now added correctly - to mainTemplate.gradle in Unity versions prior to 2019. - -# Version 1.2.112 - May 22, 2019 -## New Features -* Android Resolver: Added option to disable addition of dependencies to - mainTemplate.gradle. - See `Assets > Play Services Resolver > Android Resolver > Settings`. -* Android Resolver: Made paths to local maven repositories in - mainTemplate.gradle relative to the Unity project when a project is not - being exported. -## Bug Fixes -* Android Resolver: Fixed builds with mainTemplate.gradle integration in - Unity 2019. -* Android Resolver: Changed dependency inclusion in mainTemplate.gradle to - use "implementation" or "compile" depending upon the version of Gradle - included with Unity. -* Android Resolver: Gracefully handled exceptions if the console encoding - can't be modified. -* Android Resolver: Now gracefully fails if the AndroidPlayer directory - can't be found. - -# Version 1.2.111 - May 9, 2019 -## Bug Fixes -* Version Handler: Fixed invocation of methods with named arguments. -* Version Handler: Fixed occasional hang when the editor is compiling - while activating plugins. - -# Version 1.2.110 - May 7, 2019 -## Bug Fixes -* Android Resolver: Fixed inclusion of some srcaar artifacts in builds with - Gradle builds when using mainTemplate.gradle. - -# Version 1.2.109 - May 6, 2019 -## New Features: -* Added links to documentation from menu. -* Android Resolver: Added option to auto-resolve Android libraries on build. -* Android Resolver: Added support for packaging specs of Android libraries. -* Android Resolver: Pop up a window when displaying Android dependencies. - -## Bug Fixes -* Android Resolver: Support for Unity 2019 Android SDK and JDK install locations -* Android Resolver: e-enable AAR explosion if internal builds are enabled. -* Android Resolver: Gracefully handle exceptions on file deletion. -* Android Resolver: Fixed Android Resolver log spam on load. -* Android Resolver: Fixed save of Android Resolver PromptBeforeAutoResolution - setting. -* Android Resolver: Fixed AAR processing failure when an AAR without - classes.jar is found. -* Android Resolver: Removed use of EditorUtility.DisplayProgressBar which - was occasionally left displayed when resolution had completed. -* Version Handler: Fixed asset rename to disable when a disabled file exists. - -# Version 1.2.108 - May 3, 2019 -## Bug Fixes: -* Version Handler: Fixed occasional hang on startup. - -# Version 1.2.107 - May 3, 2019 -## New Features: -* Version Handler: Added support for enabling / disabling assets that do not - support the PluginImporter, based upon build target selection. -* Android Resolver: Added support for the global specification of maven repos. -* iOS Resolver: Added support for the global specification of Cocoapod sources. - -# Version 1.2.106 - May 1, 2019 -## New Features -* iOS Resolver: Added support for development pods in Xcode project integration - mode. -* iOS Resolver: Added support for source pods with resources in Xcode project - integration mode. - -# Version 1.2.105 - Apr 30, 2019 -## Bug fixes -* Android Resolver: Fixed reference to Java tool path in logs. -* Android and iOS Resolvers: Changed command line execution to emit a warning - rather than throwing an exception and failing, when it is not possible to - change the console input and output encoding to UTF-8. -* Android Resolver: Added menu option and API to delete resolved libraries. -* Android Resolver: Added menu option and API to log the repos and libraries - currently included in the project. -* Android Resolver: If Plugins/Android/mainTemplate.gradle file is present and - Gradle is selected as the build type, resolution will simply patch the file - with Android dependencies specified by plugins in the project. - -# Version 1.2.104 - Apr 10, 2019 -## Bug Fixes -* Android Resolver: Changed Android ABI selection method from using whitelisted - Unity versions to type availability. This fixes an exception on resolution - in some versions of Unity 2017.4. - -# Version 1.2.103 - Apr 2, 2019 -## Bug Fixes -* Android Resolver: Whitelisted Unity 2017.4 and above with ARM64 support. -* Android Resolver: Fixed Java version check to work with Java SE 12 and above. - -# Version 1.2.102 - Feb 13, 2019 -## Bug Fixes -* Android Resolver: Fixed the text overflow on the Android Resolver - prompt before initial run to fit inside the buttons for - smaller screens. - -# Version 1.2.101 - Feb 12, 2019 -## New Features -* Android Resolver: Prompt the user before the resolver runs for the - first time and allow the user to elect to disable from the prompt. -* Android Resolver: Change popup warning when resolver is disabled - to be a console warning. - -# Version 1.2.100 - Jan 25, 2019 -## Bug Fixes -* Android Resolver: Fixed AAR processing sometimes failing on Windows - due to file permissions. - -# Version 1.2.99 - Jan 23, 2019 -## Bug Fixes -* Android Resolver: Improved performance of project property polling. -* Version Handler: Fixed callback of VersionHandler.UpdateCompleteMethods - when the update process is complete. - -# Version 1.2.98 - Jan 9, 2019 -## New Features -* iOS Resolver: Pod declaration properties can now be set via XML pod - references. For example, this can enable pods for a subset of build - configurations. -## Bug Fixes -* iOS Resolver: Fixed incremental builds after local pods support caused - regression in 1.2.96. - -# Version 1.2.97 - Dec 17, 2018 -## Bug Fixes -* Android Resolver: Reduced memory allocation for logic that monitors build - settings when auto-resolution is enabled. If auto-resolution is disabled, - almost all build settings are no longer polled for changes. - -# Version 1.2.96 - Dec 17, 2018 -## Bug Fixes -* Android Resolver: Fixed repacking of AARs to exclude .meta files. -* Android Resolver: Only perform auto-resolution on the first scene while - building. -* Android Resolver: Fixed parsing of version ranges that include whitespace. -* iOS Resolver: Added support for local development pods. -* Version Handler: Fixed Version Handler failing to rename some files. - -# Version 1.2.95 - Oct 23, 2018 -## Bug Fixes: -* Android Resolver: Fixed auto-resolution running in a loop in some scenarios. - -# Version 1.2.94 - Oct 22, 2018 -## Bug Fixes -* iOS Resolver: Added support for PODS_TARGET_SRCROOT in source Cocoapods. - -# Version 1.2.93 - Oct 22, 2018 -## Bug Fixes -* Android Resolver: Fixed removal of Android libraries on auto-resolution when - `*Dependencies.xml` files are deleted. - -# Version 1.2.92 - Oct 2, 2018 -## Bug Fixes -* Android Resolver: Worked around auto-resolution hang on Windows if - resolution starts before compilation is finished. - -# Version 1.2.91 - Sep 27, 2018 -## Bug Fixes -* Android Resolver: Fixed Android Resolution when the selected build target - isn't Android. -* Added C# assembly symbols the plugin to simplify debugging bug reports. - -# Version 1.2.90 - Sep 21, 2018 -## Bug Fixes -* Android Resolver: Fixed transitive dependency selection of version locked - packages. - -# Version 1.2.89 - Aug 31, 2018 -## Bug Fixes -* Fixed FileLoadException in ResolveUnityEditoriOSXcodeExtension an assembly - can't be loaded. - -# Version 1.2.88 - Aug 29, 2018 -## Changed -* Improved reporting of resolution attempts and conflicts found in the Android - Resolver. -## Bug Fixes -* iOS Resolver now correctly handles sample code in CocoaPods. Previously it - would add all sample code to the project when using project level - integration. -* Android Resolver now correctly handles Gradle conflict resolution when the - resolution results in a package that is compatible with all requested - dependencies. - -# Version 1.2.87 - Aug 23, 2018 -## Bug Fixes -* Fixed Android Resolver "Processing AARs" dialog getting stuck in Unity 5.6. - -# Version 1.2.86 - Aug 22, 2018 -## Bug Fixes -* Fixed Android Resolver exception in OnPostProcessScene() when the Android - platform isn't selected. - -# Version 1.2.85 - Aug 17, 2018 -## Changes -* Added support for synchronous resolution in the Android Resolver. - PlayServicesResolver.ResolveSync() now performs resolution synchronously. -* Auto-resolution in the Android Resolver now results in synchronous resolution - of Android dependencies before the Android application build starts via - UnityEditor.Callbacks.PostProcessSceneAttribute. - -# Version 1.2.84 - Aug 16, 2018 -## Bug Fixes -* Fixed Android Resolver crash when the AndroidResolverDependencies.xml - file can't be written. -* Reduced log spam when a conflicting Android library is pinned to a - specific version. - -# Version 1.2.83 - Aug 15, 2018 -## Bug Fixes -* Fixed Android Resolver failures due to an in-accessible AAR / JAR explode - cache file. If the cache can't be read / written the resolver now continues - with reduced performance following recompilation / DLL reloads. -* Fixed incorrect version number in plugin manifest on install. - This was a minor issue since the version handler rewrote the metadata - after installation. - -# Version 1.2.82 - Aug 14, 2018 -## Changed -* Added support for alphanumeric versions in the Android Resolver. - -## Bug Fixes -* Fixed Android Resolver selection of latest duplicated library. -* Fixed Android Resolver conflict resolution when version locked and non-version - locked dependencies are specified. -* Fixed Android Resolver conflict resolution when non-existent artifacts are - referenced. - -# Version 1.2.81 - Aug 9, 2018 -## Bug Fixes -* Fixed editor error that would occur when when - `PlayerSettings.Android.targetArchitectures` was set to - `AndroidArchitecture.All`. - -# Version 1.2.80 - Jul 24, 2018 -## Bug Fixes -* Fixed project level settings incorrectly falling back to system wide settings - when default property values were set. - -# Version 1.2.79 - Jul 23, 2018 -## Bug Fixes -* Fixed AndroidManifest.xml patching on Android Resolver load in Unity 2018.x. - -# Version 1.2.78 - Jul 19, 2018 -## Changed -* Added support for overriding conflicting dependencies. - -# Version 1.2.77 - Jul 19, 2018 -## Changed -* Android Resolver now supports Unity's 2018 ABI filter (i.e arm64-v8a). -* Reduced Android Resolver build option polling frequency. -* Disabled Android Resolver auto-resolution in batch mode. Users now need - to explicitly kick off resolution through the API. -* All Android Resolver and Version Handler dialogs are now disabled in batch - mode. -* Verbose logging for all plugins is now enabled by default in batch mode. -* Version Handler bootstrapper has been improved to no longer call - UpdateComplete multiple times. However, since Unity can still reload the - app domain after plugins have been enabled, users still need to store their - plugin state to persistent storage to handle reloads. - -## Bug Fixes -* Android Resolver no longer incorrectly adds MANIFEST.MF files to AARs. -* Android Resolver auto-resolution jobs are now unscheduled when an explicit - resolve job is started. - -# Version 1.2.76 - Jul 16, 2018 -## Bug Fixes -* Fixed variable replacement in AndroidManifest.xml files in the Android - Resolver. - Version 1.2.75 introduced a regression which caused all variable replacement - to replace the *entire* property value rather than the component of the - property that referenced a variable. For example, - given "applicationId = com.my.app", "${applicationId}.foo" would be - incorrectly expanded as "com.my.app" rather than "com.my.app.foo". This - resulted in numerous issues for Android builds where content provider - initialization would fail and services may not start. - -## Changed -* Gradle prebuild experimental feature has been removed from the Android - Resolver. The feature has been broken for some time and added around 8MB - to the plugin size. -* Added better support for execution of plugin components in batch mode. - In batch mode UnityEditor.update is sometimes never called - like when a - single method is executed - so the new job scheduler will execute all jobs - synchronously from the main thread. - -# Version 1.2.75 - Jun 20, 2018 -## New Features -* Android Resolver now monitors the Android SDK path when - auto-resolution is enabled and triggers resolution when the path is - modified. - -## Changed -* Android auto-resolution is now delayed by 3 seconds when the following build - settings are changed: - - Target ABI. - - Gradle build vs. internal build. - - Project export. -* Added a progress bar display when AARs are being processed during Android - resolution. - -## Bug Fixes -* Fixed incorrect Android package version selection when a mix of - version-locked and non-version-locked packages are specified. -* Fixed non-deterministic Android package version selection to select - the highest version of a specified package rather than the last - package specification passed to the Gradle resolution script. - -# Version 1.2.74 - Jun 19, 2018 -## New Features -* Added workaround for broken AndroidManifest.xml variable replacement in - Unity 2018.x. By default ${applicationId} variables will be replaced by - the bundle ID in the Plugins/Android/AndroidManifest.xml file. The - behavior can be disabled via the Android Resolver settings menu. - -# Version 1.2.73 - May 30, 2018 -## Bug Fixes -* Fixed spurious warning message about missing Android plugins directory on - Windows. - -# Version 1.2.72 - May 23, 2018 -## Bug Fixes -* Fixed spurious warning message about missing Android plugins directory. - -# Version 1.2.71 - May 10, 2018 -## Bug Fixes -* Fixed resolution of Android dependencies when the `Assets/Plugins/Android` - directory is named in a different case e.g `Assets/plugins/Android`. - -# Version 1.2.70 - May 7, 2018 -## Bug Fixes -* Fixed bitcode flag being ignored for iOS pods. - -# Version 1.2.69 - May 7, 2018 -## Bug Fixes -* Fixed escaping of local repository paths in Android Resolver. - -# Version 1.2.68 - May 3, 2018 -## Changes -* Added support for granular builds of Google Play Services. - -# Version 1.2.67 - May 1, 2018 -## Changes -* Improved support for iOS source-only pods in Unity 5.5 and below. - -# Version 1.2.66 - April 27, 2018 -## Bug Fixes -* Fixed Version Handler renaming of Linux libraries with hyphens in filenames. - Previously, libraries named Foo-1.2.3.so were not being renamed to - libFoo-1.2.3.so on Linux which could break native library loading on some - versions of Unity. - -# Version 1.2.65 - April 26, 2018 -## Bug Fixes -* Fix CocoaPods casing in logs and comments. - -# Version 1.2.64 - Mar 16, 2018 -## Bug Fixes -* Fixed bug in download_artifacts.gradle (used by Android Resolver) which - reported a failure if required artifacts already exist. - -# Version 1.2.63 - Mar 15, 2018 -## Bug Fixes -* Fixed iOS Resolver include search paths taking precedence over system headers - when using project level resolution. -* Fixed iOS Resolver includes relative to library root, when using project level - resolution. - -# Version 1.2.62 - Mar 12, 2018 -## Changes -* Improved error reporting when a file can't be moved to trash by the - Version Handler. -## Bug Fixes -* Fixed Android Resolver throwing NullReferenceException when the Android SDK - path isn't set. -* Fixed Version Handler renaming files with underscores if the - "Rename to Canonical Filenames" setting is enabled. - -# Version 1.2.61 - Jan 22, 2018 -## Bug Fixes -* Fixed Android Resolver reporting non-existent conflicting dependencies when - Gradle build system is enabled. - -# Version 1.2.60 - Jan 12, 2018 -## Changes -* Added support for Maven / Ivy version specifications for Android packages. -* Added support for Android SNAPSHOT packages. - -## Bug Fixes -* Fixed Openjdk version check. -* Fixed non-deterministic Android package resolution when two packages contain - an artifact with the same name. - -# Version 1.2.59 - Oct 19, 2017 -## Bug Fixes -* Fixed execution of Android Gradle resolution script when it's located - in a path with whitespace. - -# Version 1.2.58 - Oct 19, 2017 -## Changes -* Removed legacy resolution method from Android Resolver. - It is now only possible to use the Gradle or Gradle prebuild resolution - methods. - -# Version 1.2.57 - Oct 18, 2017 -## Bug Fixes -* Updated Gradle wrapper to 4.2.1 to fix issues using Gradle with the - latest Openjdk. -* Android Gradle resolution now also uses gradle.properties to pass - parameters to Gradle in an attempt to workaround problems with - command line argument parsing on Windows 10. - -# Version 1.2.56 - Oct 12, 2017 -## Bug Fixes -* Fixed Gradle artifact download with non-version locked artifacts. -* Changed iOS resolver to only load dependencies at build time. - -# Version 1.2.55 - Oct 4, 2017 -## Bug Fixes -* Force Android Resolution when the "Install Android Packages" setting changes. - -# Version 1.2.54 - Oct 4, 2017 -## Bug Fixes -* Fixed execution of command line tools on Windows when the path to the tool - contains a single quote (apostrophe). In this case we fallback to executing - the tool via the system shell. - -# Version 1.2.53 - Oct 2, 2017 -## New Features -* Changed Android Resolver "resolution complete" dialog so that it now displays - failures. -* Android Resolver now detects conflicting libraries that it does not manage - warning the user if they're newer than the managed libraries and prompting - the user to clean them up if they're older or at the same version. - -## Bug Fixes -* Improved Android Resolver auto-resolution speed. -* Fixed bug in the Gradle Android Resolver which would result in resolution - succeeding when some dependencies are not found. - -# Version 1.2.52 - Sep 25, 2017 -## New Features -* Changed Android Resolver's Gradle resolution to resolve conflicting - dependencies across Google Play services and Android Support library packages. - -# Version 1.2.51 - Sep 20, 2017 -## Changes -* Changed iOS Resolver to execute the CocoaPods "pod" command via the shell - by default. Some developers customize their shell environment to use - custom ssh certs to access internal git repositories that host pods so - executing "pod" via the shell will work for these scenarios. - The drawback of executing "pod" via the shell could potentially cause - users problems if they break their shell environment. Though users who - customize their shell environments will be able to resolve these issues. - -# Version 1.2.50 - Sep 18, 2017 -## New Features -* Added option to disable the Gradle daemon in the Android Resolver. - This daemon is now disabled by default as some users are getting into a state - where multiple daemon instances are being spawned when changing dependencies - which eventually results in Android resolution failing until all daemon - processes are manually killed. - -## Bug Fixes -* Android resolution is now always executed if the user declines the update - of their Android SDK. This ensure users can continue to use out of date - Android SDK packages if they desire. - -# Version 1.2.49 - Sep 18, 2017 -## Bug Fixes -* Removed modulemap parsing in iOS Resolver. - The framework *.modulemap did not need to be parsed by the iOS Resolver - when injecting Cocoapods into a Xcode project. Simply adding a modular - framework to a Xcode project results in Xcode's Clang parsing the associated - modulemap and injecting any compile and link flags into the build process. - -# Version 1.2.48 - Sep 12, 2017 -## New Features -* Changed settings to be per-project by default. - -## Bug Fixes -* Added Google maven repository to fix GradlePrebuild resolution with Google - components. -* Fixed Android Resolution failure with spaces in paths. - -# Version 1.2.47 - Aug 29, 2017 -## New Features -* Android and iOS dependencies can now be specified using *Dependencies.xml - files. This is now the preferred method for registering dependencies, - we may remove the API for dependency addition in future. -* Added "Reset to Defaults" button to each settings dialog to restore default - settings. -* Android Resolver now validates the configured JDK is new enough to build - recently released Android libraries. -## Bug Fixes -* Fixed a bug that caused dependencies with the "LATEST" version specification - to be ignored when using the Gradle mode of the Android Resolver. -* Fixed a race condition when running Android Resolution. -* Fixed Android Resolver logging if a PlayServicesSupport instance is created - with no logging enabled before the Android Resolver is initialized. -* Fixed iOS resolver dialog in Unity 4. -* Fixed iOS Cocoapod Xcode project integration in Unity 4. - -# Version 1.2.46 - Aug 22, 2017 -## Bug Fixes -* GradlePrebuild Android resolver on Windows now correctly locates dependent - data files. - -# Version 1.2.45 - Aug 22, 2017 -## Bug Fixes -* Improved Android package auto-resolution and fixed clean up of stale - dependencies when using Gradle dependency resolution. - -# Version 1.2.44 - Aug 21, 2017 -## Bug Fixes -* Enabled autoresolution for Gradle Prebuild. -* Made the command line dialog windows have selectable text. -* Fixed incorrect "Android Settings" dialog disabled groups. -* Updated PlayServicesResolver android platform detection to use the package - manager instead of the 'android' tool. -* UnityCompat reflection methods 'GetAndroidPlatform' and - 'GetAndroidBuildToolsVersion' are now Obsolete due to dependence on the - obsolete 'android' build tool. - -# Version 1.2.43 - Aug 18, 2017 -## Bug Fixes -* Fixed Gradle resolution in the Android Resolver when running - PlayServicesResolver.Resolve() in parallel or spawning multiple - resolutions before the previous resolve completed. - -# Version 1.2.42 - Aug 17, 2017 -## Bug Fixes -* Fixed Xcode project level settings not being applied by IOS Resolver when - Xcode project pod integration is enabled. - -# Version 1.2.41 - Aug 15, 2017 -## Bug Fixes -* IOS Resolver's Xcode workspace pod integration is now disabled when Unity - Cloud Build is detected. Unity Cloud Build does not follow the same build - process as the Unity editor and fails to open the generated xcworkspace at - this time. - -# Version 1.2.40 - Aug 15, 2017 -## Bug Fixes -* Moved Android Resolver Gradle Prebuild scripts into Google.JarResolver.dll. - They are now extracted from the DLL when required. -* AARs / JARs are now cleaned up when switching the Android resolution - strategy. - -# Version 1.2.39 - Aug 10, 2017 -## New Features -* Android Resolver now supports resolution with Gradle. This enables support - for non-local artifacts. -## Bug Fixes -* Android Resolver's Gradle Prebuild now uses Android build tools to determine - the Android platform tools version rather than relying upon internal Unity - APIs. -* Android Resolver's Gradle Prebuild now correctly strips binaries that are - not required for the target ABI. - -# Version 1.2.38 - Aug 7, 2017 -## Bug Fixes -* Fixed an issue in VersionHandler where disabled targets are ignored if - the "Any Platform" flag is set on a plugin DLL. - -# Version 1.2.37 - Aug 3, 2017 -## New Features -* Exposed GooglePlayServices.PlayServicesResolver.Resolve() so that it's - possible for a script to be notified when AAR / Jar resolution is complete. - This makes it easier to setup a project to build from the command line. - -# Version 1.2.36 - Aug 3, 2017 -## New Features -* VersionHandler.UpdateCompleteMethods allows a user to provide a list of - methods to be called when VersionHandlerImpl has completed an update. - This makes it easier to import a plugin and wait for VersionHandler to - execute prior executing a build. - -# Version 1.2.35 - Jul 28, 2017 -## New Features -* VersionHandler will now rename Linux libraries so they can target Unity - versions that require different file naming. Libraries need to be labelled - gvh_linuxlibname-${basename} in order to be considered for renaming. - e.g gvh\_linuxlibname-MyLib will be named MyLib.so in Unity 5.5 and below and - libMyLib.so in Unity 5.6 and above. - -# Version 1.2.34 - Jul 28, 2017 -## Bug Fixes -* Made VersionHandler bootstrap module more robust when calling static - methods before the implementation DLL is loaded. - -# Version 1.2.33 - Jul 27, 2017 -## New Features -* Added a bootstrap module for VersionHandler so the implementation - of the VersionHandler module can be versioned without resulting in - a compile error when imported at different versions across multiple - plugins. - -# Version 1.2.32 - Jul 20, 2017 -## New Features -* Added support for build target selection based upon .NET framework - version in the VersionHandler. - When applying either gvh\_dotnet-3.5 or gvh\_dotnet-4.5 labels to - assets, the VersionHandler will only enable the asset for the - specified set of build targets when the matching .NET framework version - is selected in Unity 2017's project settings. This allows assets - to be provided in a plugin that need to differ based upon .NET version. - -# Version 1.2.31 - Jul 5, 2017 -## Bug Fixes -* Force expansion of AARs with native components when using Unity 2017 - with the internal build system. In contrast to Unity 5.x, Unity 2017's - internal build system does not include native libraries included in AARs. - Forcing expansion of AARs with native components generates an - Ant / Eclipse project for each AAR which is correctly included by Unity - 2017's internal build system. - -# Version 1.2.30 - Jul 5, 2017 -## Bug Fixes -* Fixed Cocoapods being installed when the build target isn't iOS. -* Added support for malformed AARs with missing classes.jar. - -# Version 1.2.29 - Jun 16, 2017 -## New Features -* Added support for the Android sdkmanager tool. - -# Version 1.2.28 - Jun 8, 2017 -## Bug Fixes -* Fixed non-shell command line execution (regression from - Cocoapod installation patch). - -# Version 1.2.27 - Jun 7, 2017 -## Bug Fixes -* Added support for stdout / stderr redirection when executing - commands in shell mode. - This fixes CocoaPod tool installation when shell mode is - enabled. -* Fixed incremental builds when additional sources are specified - in the Podfile. - -# Version 1.2.26 - Jun 7, 2017 -## Bug Fixes -* Fixed a crash when importing Version Handler into Unity 4.7.x. - -# Version 1.2.25 - Jun 7, 2017 -## Bug Fixes -* Fixed an issue in the Jar Resolver which incorrectly notified - event handlers of bundle ID changes when the currently selected - (not active) build target changed in Unity 5.6 and above. - -# Version 1.2.24 - Jun 6, 2017 -## New Features -* Added option to control file renaming in Version Handler settings. - Disabling file renaming (default option) significantly increases - the speed of file version management operations with the downside - that any files that are referenced directly by canonical filename - rather than asset ID will no longer be valid. -* Improved logging in the Version Handler. -## Bug Fixes -* Fixed an issue in the Version Handler which caused it to not - re-enable plugins when re-importing a custom package with disabled - version managed files. - -# Version 1.2.23 - May 26, 2017 -## Bug Fixes -* Fixed a bug with gradle prebuild resolver on windows. - -# Version 1.2.22 - May 19, 2017 -## Bug Fixes -* Fixed a bug in the iOS resolver with incremental builds. -* Fixed misdetection of Cocoapods support with Unity beta 5.6. - -# Version 1.2.21 - May 8, 2017 -## Bug Fixes -* Fix for https://github.com/googlesamples/unity-jar-resolver/issues/48 - Android dependency version number parsing when "-alpha" (etc.) are - included in dependency (AAR / JAR) versions. - -# Version 1.2.20 - May 8, 2017 -## Bug Fixes -* Attempted to fix - https://github.com/googlesamples/unity-jar-resolver/issues/48 - where a NullReferenceException could occur if a target file does not - have a valid version string. - -# Version 1.2.19 - May 4, 2017 -## Bug Fixes -* Fixed Jar Resolver exploding and deleting AAR files it isn't managing. - -# Version 1.2.18 - May 4, 2017 -## New Features -* Added support for preserving Unity pods such as when GVR is enabled. - -# Version 1.2.17 - Apr 20, 2017 -## Bug Fixes -* Fixed auto-resolution when an Android application ID is modified. - -# Version 1.2.16 - Apr 17, 2017 -## Bug Fixes -* Fixed Unity version number parsing on machines with a locale that uses - "," for decimal points. -* Fixed null reference exception if JDK path isn't set. - -# Version 1.2.15 - Mar 17, 2017 -## New Features -* Added warning when the Jar Resolver's background resolution is disabled. -## Bug Fixes -* Fixed support of AARs with native libraries when using Gradle. -* Fixed extra repository paths when resolving dependencies. - -# Version 1.2.14 - Mar 7, 2017 -## New Features -* Added experimental Android resolution using Gradle. - This alternative resolver supports proguard stripping with Unity's - internal build system. -* Added Android support for single ABI builds when using AARs include - native libraries. -* Disabled Android resolution on changes to all .cs and .js files. - File patterns that are monitored for auto-resolution can be added - using PlayServicesResolver.AddAutoResolutionFilePatterns(). -* Added tracking of resolved AARs and JARs so they can be cleaned up - if they're no longer referenced by a project. -* Added persistence of AAR / JAR version replacement for each Unity - session. -* Added settings dialog to the iOS resolver. -* Integrated Cocoapod tool installation in the iOS resolver. -* Added option to run pod tool via the shell. -## Bug Fixes -* Fixed build of some source Cocoapods (e.g Protobuf). -* VersionHandler no longer prompts to delete obsolete manifests. -* iOS resolver handles Cocoapod installation when using Ruby < 2.2.2. -* Added workaround for package version selection when including - Google Play Services on Android. -* Fixed support for pods that reference static libraries. -* Fixed support for resource-only pods. - -# Version 1.2.12 - Feb 14, 2017 -## Bug Fixes -* Fixed re-explosion of AARs when the bundle ID is modified. - -# Version 1.2.11 - Jan 30, 2017 -## New Features -* Added support for Android Studio builds. -* Added support for native (C/C++) shared libraries in AARs. - -# Version 1.2.10 - Jan 11, 2017 -## Bug Fixes -* Fixed SDK manager path retrieval. -* Also, report stderr when it's not possible to run the "pod" tool. -* Handle exceptions thrown by Unity.Cecil on asset rename -* Fixed IOSResolver to handle PlayerSettings.iOS.targetOSVersionString - -# Version 1.2.9 - Dec 7, 2016 -## Bug Fixes -* Improved error reporting when "pod repo update" fails. -* Added detection of xml format xcode projects generated by old Cocoapods - installations. - -# Version 1.2.8 - Dec 6, 2016 -## Bug Fixes -* Increased speed of JarResolver resolution. -* Fixed JarResolver caches getting out of sync with requested dependencies - by removing the caches. -* Fixed JarResolver explode cache always being rewritten even when no - dependencies change. - -# Version 1.2.7 - Dec 2, 2016 -## Bug Fixes -* Fixed VersionHandler build errors with Unity 5.5, due to the constantly - changing BuildTarget enum. -* Added support for Unity configured JDK Path rather than requiring - JAVA_HOME to be set in the Jar Resolver. - -# Version 1.2.6 - Nov 15, 2016 -## Bug Fixes -* Fixed IOSResolver errors when iOS support is not installed. -* Added fallback to "pod" executable search which queries the Ruby Gems - package manager for the binary install location. - -# Version 1.2.5 - Nov 3, 2016 -## Bug Fixes -* Added crude support for source only Cocoapods to the IOSResolver. - -# Version 1.2.4 - Oct 27, 2016 -## Bug Fixes -* Automated resolution of out of date pod repositories. - -# Version 1.2.3 - Oct 25, 2016 -## Bug Fixes -* Fixed exception when reporting conflicting dependencies. - -# Version 1.2.2 - Oct 17, 2016 -## Bug Fixes -* Fixed issue working with Unity 5.5 -* Fixed issue with PlayServicesResolver corrupting other iOS dependencies. -* Updated build script to use Unity distributed tools for building. - -# Version 1.2.1 - Jul 25, 2016 -## Bug Fixes -* Removed 1.2 Resolver and hardcoded whitelist of AARs to expand. -* Improved error reporting when the "jar" executable can't be found. -* Removed the need to set JAVA_HOME if "jar" is in the user's path. -* Fixed spurious copying of partially matching AARs. -* Changed resolver to only copy / expand when source AARs change. -* Auto-resolution of dependencies is now performed when the Android - build target is selected. - -## New Features -* Expand AARs that contain manifests with variable expansion like - ${applicationId}. -* Added optional logging in the JarResolverLib module. -* Integration with the Android SDK manager for dependencies that - declare required Android SDK packages. - -# Version 1.2.0 - May 11 2016 -## Bug Fixes -* Handles resolving dependencies when the artifacts are split across 2 repos. -* #4 Misdetecting version for versions like 1.2-alpha. These are now string - compared if alphanumeric -* Removed resolver creation via reflection since it did not work all the time. - Now a resolver needs to be loaded externally (which is existing behavior). - -## New Features -* Expose PlayServicesResolver properties to allow for script access. -* Explodes firebase-common and firebase-measurement aar files to support - ${applicationId} substitution. - -# Version 1.1.1 - 25 Feb 2016 -## Bug Fixes -* #1 Spaces in project path not handled when exploding Aar file. -* #2 Script compilation error: TypeLoadException. - -# Version 1.1.0 - 5 Feb 2016 -## New Features -* Adds friendly alert when JAVA_HOME is not set on Windows platforms. -* Adds flag for disabling background resolution. -* Expands play-services-measurement and replaces ${applicationId} with the - bundle Id. - - ## Bug Fixes -* Fixes infinite loop of resolution triggered by resolution. diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta deleted file mode 100644 index 6970237..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d67e36cf70144eeeb62948707545ecfd -labels: -- gvh -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/CHANGELOG.md -timeCreated: 1584567712 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll deleted file mode 100755 index e33bd12..0000000 Binary files a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll and /dev/null differ diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.meta deleted file mode 100644 index 79d4e38..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.meta +++ /dev/null @@ -1,38 +0,0 @@ -fileFormatVersion: 2 -guid: f7ad2228faf74a398ae7d46a32a25174 -labels: -- gvh -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll -- gvhp_targets-editor -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll deleted file mode 100755 index fc672fd..0000000 Binary files a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll and /dev/null differ diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.meta deleted file mode 100644 index 8e66d4e..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.meta +++ /dev/null @@ -1,38 +0,0 @@ -fileFormatVersion: 2 -guid: a8f371f579f2426d93a8c958438275b7 -labels: -- gvh -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll -- gvhp_targets-editor -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.meta deleted file mode 100644 index ee8fe67..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.meta +++ /dev/null @@ -1,38 +0,0 @@ -fileFormatVersion: 2 -guid: 598840535bad45759e537f683a8066f0 -labels: -- gvh -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll -- gvhp_targets-editor -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll deleted file mode 100755 index 532642d..0000000 Binary files a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll and /dev/null differ diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta deleted file mode 100644 index 7859d3a..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: bb6999c8a5ce4ba99688ec579babe5b7 -labels: -- gvh -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.dll -- gvhp_targets-editor -timeCreated: 1480838400 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll deleted file mode 100755 index 8a7173f..0000000 Binary files a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll and /dev/null differ diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.meta deleted file mode 100644 index 9884e3d..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.meta +++ /dev/null @@ -1,38 +0,0 @@ -fileFormatVersion: 2 -guid: c3d0e1849bf7421e9e936bc21220099b -labels: -- gvh -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll -- gvhp_targets-editor -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/LICENSE b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/LICENSE deleted file mode 100755 index 6258cc4..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/LICENSE +++ /dev/null @@ -1,245 +0,0 @@ -Copyright (C) 2014 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -==================================================================================================== -This package uses MiniJSON - -Copyright (c) 2013 Calvin Rien - -Based on the JSON parser by Patrick van Bergen -http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html - -Simplified it so that it doesn't throw exceptions -and can be used in Unity iPhone with maximum code stripping. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/LICENSE.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/LICENSE.meta deleted file mode 100644 index 21ae9fa..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/LICENSE.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 35a6726adf03479eb04b8c082346d551 -labels: -- gvh -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/LICENSE -timeCreated: 1584567712 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/README.md b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/README.md deleted file mode 100755 index 37b64e4..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/README.md +++ /dev/null @@ -1,768 +0,0 @@ -External Dependency Manager for Unity -======== - -# Overview - -The External Dependency Manager for Unity (EDM4U) -(formerly Play Services Resolver / Jar Resolver) is intended to be used by any -Unity plugin that requires: - - * Android specific libraries (e.g - [AARs](https://developer.android.com/studio/projects/android-library.html)). - * iOS [CocoaPods](https://cocoapods.org/). - * Version management of transitive dependencies. - * Management of Package Manager (PM) Registries. - -Updated releases are available on -[GitHub](https://github.com/googlesamples/unity-jar-resolver) - -# Background - -Many Unity plugins have dependencies upon Android specific libraries, iOS -CocoaPods, and sometimes have transitive dependencies upon other Unity plugins. -This causes the following problems: - - * Integrating platform specific (e.g Android and iOS) libraries within a - Unity project can be complex and a burden on a Unity plugin maintainer. - * The process of resolving conflicting dependencies on platform specific - libraries is pushed to the developer attempting to use a Unity plugin. - The developer trying to use you plugin is very likely to give up when - faced with Android or iOS specific build errors. - * The process of resolving conflicting Unity plugins (due to shared Unity - plugin components) is pushed to the developer attempting to use your Unity - plugin. In an effort to resolve conflicts, the developer will very likely - attempt to resolve problems by deleting random files in your plugin, - report bugs when that doesn't work and finally give up. - -EDM provides solutions for each of these problems. - -## Android Dependency Management - -The *Android Resolver* component of this plugin will download and integrate -Android library dependencies and handle any conflicts between plugins that share -the same dependencies. - -Without the Android Resolver, typically Unity plugins bundle their AAR and -JAR dependencies, e.g. a Unity plugin `SomePlugin` that requires the Google -Play Games Android library would redistribute the library and its transitive -dependencies in the folder `SomePlugin/Android/`. When a user imports -`SomeOtherPlugin` that includes the same libraries (potentially at different -versions) in `SomeOtherPlugin/Android/`, the developer using `SomePlugin` and -`SomeOtherPlugin` will see an error when building for Android that can be hard -to interpret. - -Using the Android Resolver to manage Android library dependencies: - - * Solves Android library conflicts between plugins. - * Handles all of the various processing steps required to use Android - libraries (AARs, JARs) in Unity 4.x and above projects. Almost all - versions of Unity have - at best - partial support for AARs. - * (Experimental) Supports minification of included Java components without - exporting a project. - -## iOS Dependency Management - -The *iOS Resolver* component of this plugin integrates with -[CocoaPods](https://cocoapods.org/) to download and integrate iOS libraries -and frameworks into the Xcode project Unity generates when building for iOS. -Using CocoaPods allows multiple plugins to utilize shared components without -forcing developers to fix either duplicate or incompatible versions of -libraries included through multiple Unity plugins in their project. - -## Package Manager Registry Setup - -The [Package Manager](https://docs.unity3d.com/Manual/Packages.html) -(PM) makes use of [NPM](https://www.npmjs.com/) registry servers for package -hosting and provides ways to discover, install, upgrade and uninstall packages. -This makes it easier for developers to manage plugins within their projects. - -However, installing additional package registries requires a few manual steps -that can potentially be error prone. The *Package Manager Resolver* -component of this plugin integrates with -[PM](https://docs.unity3d.com/Manual/Packages.html) to provide a way to -auto-install PM package registries when a `.unitypackage` is installed which -allows plugin maintainers to ship a `.unitypackage` that can provide access -to their own PM registry server to make it easier for developers to -manage their plugins. - -## Unity Plugin Version Management - -Finally, the *Version Handler* component of this plugin simplifies the process -of managing transitive dependencies of Unity plugins and each plugin's upgrade -process. - -For example, without the Version Handler plugin, if: - - * Unity plugin `SomePlugin` includes `EDM4U` plugin at - version 1.1. - * Unity plugin `SomeOtherPlugin` includes `EDM4U` - plugin at version 1.2. - -The version of `EDM4U` included in the developer's project depends upon the -order the developer imports `SomePlugin` or `SomeOtherPlugin`. - -This results in: - - * `EDM4U` at version 1.2, if `SomePlugin` is imported then `SomeOtherPlugin` - is imported. - * `EDM4U` at version 1.1, if `SomeOtherPlugin` is imported then - `SomePlugin` is imported. - -The Version Handler solves the problem of managing transitive dependencies by: - - * Specifying a set of packaging requirements that enable a plugin at - different versions to be imported into a Unity project. - * Providing activation logic that selects the latest version of a plugin - within a project. - -When using the Version Handler to manage `EDM4U` included in `SomePlugin` and -`SomeOtherPlugin`, from the prior example, version 1.2 will always be the -version activated in a developer's Unity project. - -Plugin creators are encouraged to adopt this library to ease integration for -their customers. For more information about integrating EDM4U -into your own plugin, see the [Plugin Redistribution](#plugin-redistribution) -section of this document. - -# Analytics - -The External Dependency Manager for Unity plugin by default logs usage to Google -Analytics. The purpose of the logging is to quantitatively measure the usage of -functionality, to gather reports on integration failures and to inform future -improvements to the developer experience of the External Dependency Manager -plugin. Note that the analytics collected are limited to the scope of the EDM4U -plugin’s usage. - -For details of what is logged, please refer to the usage of -`EditorMeasurement.Report()` in the source code. - -# Requirements - -The *Android Resolver* and *iOS Resolver* components of the plugin only work -with Unity version 4.6.8 or higher. - -The *Version Handler* component only works with Unity 5.x or higher as it -depends upon the `PluginImporter` UnityEditor API. - -The *Package Manager Resolver* component only works with -Unity 2018.4 or above, when -[scoped registry](https://docs.unity3d.com/Manual/upm-scoped.html) -support was added to the Package Manager. - -# Getting Started - -Before you import EDM4U into your plugin project, you first -need to consider whether you intend to *redistribute* `EDM4U` -along with your own plugin. - -## Plugin Redistribution - -If you're a plugin maintainer, redistributing `EDM4U` inside your own plugin -will ease the integration process for your users, by resolving dependency -conflicts between your plugin and other plugins in a user's project. - -If you wish to redistribute `EDM4U` inside your plugin, -you **must** follow these steps when importing the -`external-dependency-manager-*.unitypackage`, and when exporting your own plugin -package: - - 1. Import the `external-dependency-manager-*.unitypackage` into your plugin - project by - [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), ensuring that - you add the `-gvh_disable` option. - 1. Export your plugin by [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), ensuring that - you: - - Include the contents of the `Assets/PlayServicesResolver` and - `Assets/ExternalDependencyManager` directory. - - Add the `-gvh_disable` option. - -You **must** specify the `-gvh_disable` option in order for the Version -Handler to work correctly! - -For example, the following command will import the -`external-dependency-manager-1.2.46.0.unitypackage` into the project -`MyPluginProject` and export the entire Assets folder to -`MyPlugin.unitypackage`: - -``` -Unity -gvh_disable \ - -batchmode \ - -importPackage external-dependency-manager-1.2.46.0.unitypackage \ - -projectPath MyPluginProject \ - -exportPackage Assets MyPlugin.unitypackage \ - -quit -``` - -### Background - -The *Version Handler* component relies upon deferring the load of editor DLLs -so that it can run first and determine the latest version of a plugin component -to activate. The build of `EDM4U` plugin has Unity asset metadata that is -configured so that the editor components are not initially enabled when it's -imported into a Unity project. To maintain this configuration when importing -the `external-dependency-manager.unitypackage` into a Unity plugin project, you -*must* specify the command line option `-gvh_disable` which will prevent the -Version Handler component from running and changing the Unity asset metadata. - -# Android Resolver Usage - -The Android Resolver copies specified dependencies from local or remote Maven -repositories into the Unity project when a user selects Android as the build -target in the Unity editor. - - 1. Add the `external-dependency-manager-*.unitypackage` to your plugin - project (assuming you are developing a plugin). If you are redistributing - EDM4U with your plugin, you **must** follow the - import steps in the [Getting Started](#getting-started) section! - - 2. Copy and rename the - [SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml) - file into your plugin and add the dependencies your plugin requires. - - The XML file just needs to be under an `Editor` directory and match the - name `*Dependencies.xml`. For example, - `MyPlugin/Editor/MyPluginDependencies.xml`. - - 3. Follow the steps in the [Getting Started](#getting-started) - section when you are exporting your plugin package. - -For example, to add the Google Play Games library -(`com.google.android.gms:play-services-games` package) at version `9.8.0` to -the set of a plugin's Android dependencies: - -``` - - - - - extra-google-m2repository - - - - -``` - -The version specification (last component) supports: - - * Specific versions e.g `9.8.0` - * Partial matches e.g `9.8.+` would match 9.8.0, 9.8.1 etc. choosing the most - recent version. - * Latest version using `LATEST` or `+`. We do *not* recommend using this - unless you're 100% sure the library you depend upon will not break your - Unity plugin in future. - -The above example specifies the dependency as a component of the Android SDK -manager such that the Android SDK manager will be executed to install the -package if it's not found. If your Android dependency is located on Maven -central it's possible to specify the package simply using the `androidPackage` -element: - -``` - - - - - -``` - -## Auto-resolution - -By default the Android Resolver automatically monitors the dependencies you have -specified and the `Plugins/Android` folder of your Unity project. The -resolution process runs when the specified dependencies are not present in your -project. - -The *auto-resolution* process can be disabled via the -`Assets > External Dependency Manager > Android Resolver > Settings` menu. - -Manual resolution can be performed using the following menu options: - - * `Assets > External Dependency Manager > Android Resolver > Resolve` - * `Assets > External Dependency Manager > Android Resolver > Force Resolve` - -## Deleting libraries - -Resolved packages are tracked via asset labels by the Android Resolver. -They can easily be deleted using the -`Assets > External Dependency Manager > Android Resolver > Delete Resolved Libraries` -menu item. - -## Android Manifest Variable Processing - -Some AAR files (for example play-services-measurement) contain variables that -are processed by the Android Gradle plugin. Unfortunately, Unity does not -perform the same processing when using Unity's Internal Build System, so the -Android Resolver plugin handles known cases of this variable substitution -by exploding the AAR into a folder and replacing `${applicationId}` with the -`bundleID`. - -Disabling AAR explosion and therefore Android manifest processing can be done -via the `Assets > External Dependency Manager > Android Resolver > Settings` -menu. You may want to disable explosion of AARs if you're exporting a project -to be built with Gradle / Android Studio. - -## ABI Stripping - -Some AAR files contain native libraries (.so files) for each ABI supported -by Android. Unfortunately, when targeting a single ABI (e.g x86), Unity does -not strip native libraries for unused ABIs. To strip unused ABIs, the Android -Resolver plugin explodes an AAR into a folder and removes unused ABIs to -reduce the built APK size. Furthermore, if native libraries are not stripped -from an APK (e.g you have a mix of Unity's x86 library and some armeabi-v7a -libraries) Android may attempt to load the wrong library for the current -runtime ABI completely breaking your plugin when targeting some architectures. - -AAR explosion and therefore ABI stripping can be disabled via the -`Assets > External Dependency Manager > Android Resolver > Settings` menu. -You may want to disable explosion of AARs if you're exporting a project to be -built with Gradle / Android Studio. - -## Resolution Strategies - -By default the Android Resolver will use Gradle to download dependencies prior -to integrating them into a Unity project. This works with Unity's internal -build system and Gradle / Android Studio project export. - -It's possible to change the resolution strategy via the -`Assets > External Dependency Manager > Android Resolver > Settings` menu. - -### Download Artifacts with Gradle - -Using the default resolution strategy, the Android resolver executes the -following operations: - - - Remove the result of previous Android resolutions. - e.g Delete all files and directories labeled with "gpsr" under - `Plugins/Android` from the project. - - Collect the set of Android dependencies (libraries) specified by a - project's `*Dependencies.xml` files. - - Run `download_artifacts.gradle` with Gradle to resolve conflicts and, - if successful, download the set of resolved Android libraries (AARs, JARs). - - Process each AAR / JAR so that it can be used with the currently selected - Unity build system (e.g Internal vs. Gradle, Export vs. No Export). - This involves patching each reference to `applicationId` in the - AndroidManifest.xml with the project's bundle ID. This means resolution - must be run if the bundle ID is changed again. - - Move the processed AARs to `Plugins/Android` so they will be included when - Unity invokes the Android build. - -### Integrate into mainTemplate.gradle - -Unity 5.6 introduced support for customizing the `build.gradle` used to build -Unity projects with Gradle. When the *Patch mainTemplate.gradle* setting is -enabled, rather than downloading artifacts before the build, Android resolution -results in the execution of the following operations: - - - Remove the result of previous Android resolutions. - e.g Delete all files and directories labeled with "gpsr" under - `Plugins/Android` from the project and remove sections delimited with - `// Android Resolver * Start` and `// Android Resolver * End` lines. - - Collect the set of Android dependencies (libraries) specified by a - project's `*Dependencies.xml` files. - - Rename any `.srcaar` files in the build to `.aar` and exclude them from - being included directly by Unity in the Android build as - `mainTemplate.gradle` will be patched to include them instead from their - local maven repositories. - - Inject the required Gradle repositories into `mainTemplate.gradle` at the - line matching the pattern - `.*apply plugin: 'com\.android\.(application|library)'.*` or the section - starting at the line `// Android Resolver Repos Start`. - If you want to control the injection point in the file, the section - delimited by the lines `// Android Resolver Repos Start` and - `// Android Resolver Repos End` should be placed in the global scope - before the `dependencies` section. - - Inject the required Android dependencies (libraries) into - `mainTemplate.gradle` at the line matching the pattern `***DEPS***` or - the section starting at the line `// Android Resolver Dependencies Start`. - If you want to control the injection point in the file, the section - delimited by the lines `// Android Resolver Dependencies Start` and - `// Android Resolver Dependencies End` should be placed in the - `dependencies` section. - - Inject the packaging options logic, which excludes architecture specific - libraries based upon the selected build target, into `mainTemplate.gradle` - at the line matching the pattern `android +{` or the section starting at - the line `// Android Resolver Exclusions Start`. - If you want to control the injection point in the file, the section - delimited by the lines `// Android Resolver Exclusions Start` and - `// Android Resolver Exclusions End` should be placed in the global - scope before the `android` section. - -## Dependency Tracking - -The Android Resolver creates the -`ProjectSettings/AndroidResolverDependencies.xml` to quickly determine the set -of resolved dependencies in a project. This is used by the auto-resolution -process to only run the expensive resolution process when necessary. - -## Displaying Dependencies - -It's possible to display the set of dependencies the Android Resolver -would download and process in your project via the -`Assets > External Dependency Manager > Android Resolver > Display Libraries` -menu item. - -# iOS Resolver Usage - -The iOS resolver component of this plugin manages -[CocoaPods](https://cocoapods.org/). A CocoaPods `Podfile` is generated and -the `pod` tool is executed as a post build process step to add dependencies -to the Xcode project exported by Unity. - -Dependencies for iOS are added by referring to CocoaPods. - - 1. Add the `external-dependency-manager-*.unitypackage` to your plugin - project (assuming you are developing a plugin). If you are redistributing - EDM4U with your plugin, you **must** follow the - import steps in the [Getting Started](#getting-started) section! - - 2. Copy and rename the - [SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml) - file into your plugin and add the dependencies your plugin requires. - - The XML file just needs to be under an `Editor` directory and match the - name `*Dependencies.xml`. For example, - `MyPlugin/Editor/MyPluginDependencies.xml`. - - 3. Follow the steps in the [Getting Started](#getting-started) - section when you are exporting your plugin package. - -For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled: - -``` - - - - - -``` - -## Integration Strategies - -The `CocoaPods` are either: - * Downloaded and injected into the Xcode project file directly, rather than - creating a separate xcworkspace. We call this `Xcode project` integration. - * If the Unity version supports opening a xcworkspace file, the `pod` tool - is used as intended to generate a xcworkspace which references the - CocoaPods. We call this `Xcode workspace` integration. - -The resolution strategy can be changed via the -`Assets > External Dependency Manager > iOS Resolver > Settings` menu. - -### Appending text to generated Podfile -In order to modify the generated Podfile you can create a script like this: -``` -using System.IO; -public class PostProcessIOS : MonoBehaviour { -[PostProcessBuildAttribute(45)]//must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50) -private static void PostProcessBuild_iOS(BuildTarget target, string buildPath) -{ - if (target == BuildTarget.iOS) - { - - using (StreamWriter sw = File.AppendText(buildPath + "/Podfile")) - { - //in this example I'm adding an app extension - sw.WriteLine("\ntarget 'NSExtension' do\n pod 'Firebase/Messaging', '6.6.0'\nend"); - } - } -} -``` - -# Package Manager Resolver Usage - -Adding registries to the -[Package Manager](https://docs.unity3d.com/Manual/Packages.html) -(PM) is a manual process. The Package Manager Resolver (PMR) component -of this plugin makes it easy for plugin maintainers to distribute new PM -registry servers and easy for plugin users to manage PM registry servers. - -## Adding Registries - - 1. Add the `external-dependency-manager-*.unitypackage` to your plugin - project (assuming you are developing a plugin). If you are redistributing - EDM4U with your plugin, you **must** follow the - import steps in the [Getting Started](#getting-started) section! - - 2. Copy and rename the - [SampleRegistries.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/sample/Assets/ExternalDependencyManager/Editor/SampleRegistries.xml) - file into your plugin and add the registries your plugin requires. - - The XML file just needs to be under an `Editor` directory and match the - name `*Registries.xml` or labeled with `gumpr_registries`. For example, - `MyPlugin/Editor/MyPluginRegistries.xml`. - - 3. Follow the steps in the [Getting Started](#getting-started) - section when you are exporting your plugin package. - -For example, to add a registry for plugins in the scope `com.coolstuff`: - -``` - - - - com.coolstuff - - - -``` - -When PMR is loaded it will prompt the developer to add the registry to their -project if it isn't already present in the `Packages/manifest.json` file. - -For more information, see Unity's documentation on -[scoped package registries](https://docs.unity3d.com/Manual/upm-scoped.html). - -## Managing Registries - -It's possible to add and remove registries that are specified via PMR -XML configuration files via the following menu options: - -* `Assets > External Dependency Manager > Package Manager Resolver > - Add Registries` will prompt the user with a window which allows them to - add registries discovered in the project to the Package Manager. -* `Assets > External Dependency Manager > Package Manager Resolver > - Remove Registries` will prompt the user with a window which allows them to - remove registries discovered in the project from the Package Manager. -* `Assets > External Dependency Manager > Package Manager Resolver > - Modify Registries` will prompt the user with a window which allows them to - add or remove registries discovered in the project. - -## Migration - -PMR can migrate Version Handler packages installed in the `Assets` folder -to PM packages. This requires the plugins to implement the following: - -* `.unitypackage` must include a Version Handler manifests that describes - the components of the plugin. If the plugin has no dependencies - the manifest would just include the files in the plugin. -* The PM package JSON provided by the registry must include a keyword - (in the `versions.VERSION.keyword` list) that maps the PM package - to a Version Handler package using the format - `vh-name:VERSION_HANDLER_MANIFEST_NAME` where `VERSION_HANDLER_MANIFEST_NAME` - is the name of the manifest defined in the `.unitypackage`. For - more information see the description of the `gvhp_manifestname` asset label - in the *Version Handler Usage* section. - -When using the `Assets > External Dependency Manager > -Package Manager Resolver > Migrate Packages` menu option, PMR then -will: - -* List all Version Handler manager packages in the project. -* Search all available packages in the PM registries and fetch keywords - associated with each package parsing the Version Handler manifest names - for each package. -* Map each installed Version Handler package to a PM package. -* Prompt the user to migrate the discovered packages. -* Perform package migration for all selected packages if the user clicks - the `Apply` button. - -## Configuration - -PMR can be configured via the `Assets > External Dependency Manager > -Package Manager Resolver > Settings` menu option: - -* `Add package registries` when enabled, when the plugin loads or registry - configuration files change, this will prompt the user to add registries - that are not present in the Package Manager. -* `Prompt to add package registries` will cause a developer to be prompted - with a window that will ask for confirmation before adding registries. - When this is disabled registries are added silently to the project. -* `Prompt to migrate packages` will cause a developer to be prompted - with a window that will ask for confirmation before migrating packages - installed in the `Assets` directory to PM packages. -* `Enable Analytics Reporting` when enabled, reports the use of the plugin - to the developers so they can make imrpovements. -* `Verbose logging` when enabled prints debug information to the console - which can be useful when filing bug reports. - -# Version Handler Usage - -The Version Handler component of this plugin manages: - -* Shared Unity plugin dependencies. -* Upgrading Unity plugins by cleaning up old files from previous versions. -* Uninstallation of plugins that are distributed with manifest files. -* Restoration of plugin assets to their original install locations if assets - are tagged with the `exportpath` label. - -Since the Version Handler needs to modify Unity asset metadata (`.meta` files), -to enable / disable components, rename and delete asset files it does not -work with Package Manager installed packages. It's still possible to -include EDM4U in Package Manager packages, the Version Handler component -simply won't do anything to PM plugins in this case. - -## Using Version Handler Managed Plugins - -If a plugin is imported at multiple different versions into a project, if -the Version Handler is enabled, it will automatically check all managed -assets to determine the set of assets that are out of date and assets that -should be removed. To disable automatic checking managed assets disable -the `Enable version management` option in the -`Assets > External Dependency Manager > Version Handler > Settings` menu. - -If version management is disabled, it's possible to check managed assets -manually using the -`Assets > External Dependency Manager > Version Handler > Update` menu option. - -### Listing Managed Plugins - -Plugins managed by the Version Handler, those that ship with manifest files, -can displayed using the `Assets > External Dependency Manager > -Version Handler > Display Managed Packages` menu option. The list of plugins -are written to the console window along with the set of files used by each -plugin. - -### Uninstalling Managed Plugins - -Plugins managed by the Version Handler, those that ship with manifest files, -can be removed using the `Assets > External Dependency Manager > -Version Handler > Uninstall Managed Packages` menu option. This operation -will display a window that allows a developer to select a set of plugins to -remove which will remove all files owned by each plugin excluding those that -are in use by other installed plugins. - -Files managed by the Version Handler, those labeled with the `gvh` asset label, -can be checked to see whether anything needs to be upgraded, disabled or -removed using the `Assets > External Dependency Manager > -Version Handler > Update` menu option. - -### Restore Install Paths - -Some developers move assets around in their project which can make it -harder for plugin maintainers to debug issues if this breaks Unity's -[special folders](https://docs.unity3d.com/Manual/SpecialFolders.html) rules. -If assets are labeled with their original install / export path -(see `gvhp_exportpath` below), Version Handler can restore assets to their -original locations when using the `Assets > External Dependency Manager > -Version Handler > Move Files To Install Locations` menu option. - -### Settings - -Some behavior of the Version Handler can be configured via the -`Assets > External Dependency Manager > Version Handler > Settings` menu -option. - -* `Enable version management` controls whether the plugin should automatically - check asset versions and apply changes. If this is disabled the process - should be run manually when installing or upgrading managed plugins using - `Assets > External Dependency Manager > Version Handler > Update`. -* `Rename to canonical filenames` is a legacy option that will rename files to - remove version numbers and other labels from filenames. -* `Prompt for obsolete file deletion` enables the display of a window when - obsolete files are deleted allowing the developer to select which files to - delete and those to keep. -* `Allow disabling files via renaming` controls whether obsolete or disabled - files should be disabled by renaming them to `myfilename_DISABLED`. - Renaming to disable files is required in some scenarios where Unity doesn't - support removing files from the build via the PluginImporter. -* `Enable Analytics Reporting` enables / disables usage reporting to plugin - developers to improve the product. -* `Verbose logging` enables _very_ noisy log output that is useful for - debugging while filing a bug report or building a new managed plugin. -* `Use project settings` saves settings for the plugin in the project rather - than system-wide. - -## Redistributing a Managed Plugin - -The Version Handler employs a couple of methods for managing version -selection, upgrade and removal of plugins. - -* Each plugin can ship with a manifest file that lists the files it includes. - This makes it possible for Version Handler to calculate the difference - in assets between the most recent release of a plugin and the previous - release installed in a project. If a files are removed the Version Handler - will prompt the user to clean up obsolete files. -* Plugins can ship using assets with unique names, unique GUIDs and version - number labels. Version numbers can be attached to assets using labels or - added to the filename (e.g `myfile.txt` would be `myfile_version-x.y.z.txt). - This allows the Version Handler to determine which set of files are the - same file at different versions, select the most recent version and prompt - the developer to clean up old versions. - -Unity plugins can be managed by the Version Handler using the following steps: - - 1. Add the `gvh` asset label to each asset (file) you want Version Handler - to manage. - 1. Add the `gvh_version-VERSION` label to each asset where `VERSION` is the - version of the plugin you're releasing (e.g 1.2.3). - 1. Add the `gvhp_exportpath-PATH` label to each asset where `PATH` is the - export path of the file when the `.unitypackage` is created. This is - used to track files if they're moved around in a project by developers. - 1. Optional: Add `gvh_targets-editor` label to each editor DLL in your - plugin and disable `editor` as a target platform for the DLL. - The Version Handler will enable the most recent version of this DLL when - the plugin is imported. - 1. Optional: If your plugin is included in other Unity plugins, you should - add the version number to each filename and change the GUID of each asset. - This allows multiple versions of your plugin to be imported into a Unity - project, with the Version Handler component activating only the most - recent version. - 1. Create a manifest text file named `MY_UNIQUE_PLUGIN_NAME_VERSION.txt` - that lists all the files in your plugin relative to the project root. - Then add the `gvh_manifest` label to the asset to indicate this file is - a plugin manifest. - 1. Optional: Add a `gvhp_manifestname-NAME` label to your manifest file - to provide a human readable name for your package. If this isn't provided - the name of the manifest file will be used as the package name. - NAME can match the pattern `[0-9]+[a-zA-Z -]' where a leading integer - will set the priority of the name where `0` is the highest priority - and preferably used as the display name. The lowest value (i.e highest - priority name) will be used as the display name and all other specified - names will be aliases of the display name. Aliases can refer to previous - names of the package allowing renaming across published versions. - 1. Redistribute EDM4U Unity plugin with your plugin. - See the [Plugin Redistribution](#plugin-redistribution) for the details. - -If you follow these steps: - - * When users import a newer version of your plugin, files referenced by the - older version's manifest are cleaned up. - * The latest version of the plugin will be selected when users import - multiple packages that include your plugin, assuming the steps in - [Plugin Redistribution](#plugin-redistribution) are followed. - -# Building from Source - -To build this plugin from source you need the following tools installed: - * Unity (with iOS and Android modules installed) - -You can build the plugin by running the following from your shell -(Linux / OSX): - -``` -./gradlew build -``` - -or Windows: - -``` -./gradlew.bat build -``` - -# Releasing - -Each time a new build of this plugin is checked into the source tree you -need to do the following: - - * Bump the plugin version variable `pluginVersion` in `build.gradle` - * Update `CHANGELOG.md` with the new version number and changes included in - the release. - * Build the release using `./gradlew release` which performs the following: - * Updates `external-dependency-manager-*.unitypackage` - * Copies the unpacked plugin to the `exploded` directory. - * Updates template metadata files in the `plugin` directory. - The GUIDs of all asset metadata is modified due to the version number - change. Each file within the plugin is versioned to allow multiple - versions of the plugin to be imported into a Unity project which allows - the most recent version to be activated by the Version Handler - component. - * Create release commit using `./gradlew gitCreateReleaseCommit` which - performs `git commit -a -m "description from CHANGELOG.md"` - * Once the release commit is merge, tag the release using - `./gradlew gitTagRelease` which performs the following: - * `git tag -a pluginVersion -m "version RELEASE"` to tag the release. - * Update tags on remote branch using `git push --tag REMOTE HEAD:master` diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/README.md.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/README.md.meta deleted file mode 100644 index 6cc9c6f..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/README.md.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 11eb52f780284fd69194951ac46cb538 -labels: -- gvh -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/README.md -timeCreated: 1584567712 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt deleted file mode 100755 index 17cb8ec..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt +++ /dev/null @@ -1,13 +0,0 @@ -Assets/ExternalDependencyManager/Editor/CHANGELOG.md -Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll -Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.mdb -Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll -Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.mdb -Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll -Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.mdb -Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll -Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb -Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll -Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.mdb -Assets/ExternalDependencyManager/Editor/LICENSE -Assets/ExternalDependencyManager/Editor/README.md diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt.meta b/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt.meta deleted file mode 100644 index c658d4e..0000000 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt.meta +++ /dev/null @@ -1,15 +0,0 @@ -fileFormatVersion: 2 -guid: d889935f54d444ba9d3e36f651eeeff9 -labels: -- gvh -- gvh_manifest -- gvh_version-1.2.162 -- gvhp_exportpath-ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt -- gvhp_manifestname-0External Dependency Manager -- gvhp_manifestname-play-services-resolver -timeCreated: 1474401009 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.0.0.aar deleted file mode 100644 index f876595..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.asynclayoutinflater.asynclayoutinflater-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.asynclayoutinflater.asynclayoutinflater-1.0.0.aar deleted file mode 100644 index 337f4c4..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.asynclayoutinflater.asynclayoutinflater-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.collection.collection-1.0.0.jar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.collection.collection-1.0.0.jar deleted file mode 100644 index 78ac06c..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.collection.collection-1.0.0.jar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.collection.collection-1.0.0.jar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.collection.collection-1.0.0.jar.meta deleted file mode 100644 index f2fedbf..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.collection.collection-1.0.0.jar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: eec53a26321534893aaa2ba7d1576533 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.coordinatorlayout.coordinatorlayout-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.coordinatorlayout.coordinatorlayout-1.0.0.aar deleted file mode 100644 index de447ec..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.coordinatorlayout.coordinatorlayout-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.coordinatorlayout.coordinatorlayout-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.coordinatorlayout.coordinatorlayout-1.0.0.aar.meta deleted file mode 100644 index a0c46f5..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.coordinatorlayout.coordinatorlayout-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 95a41fab31b4f4e5690685938b6fef39 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.core.core-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.core.core-1.0.0.aar deleted file mode 100644 index fea6bd3..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.core.core-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.core.core-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.core.core-1.0.0.aar.meta deleted file mode 100644 index 35916b8..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.core.core-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 1afde17fcc30b453bb42a7f68afb0220 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.documentfile.documentfile-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.documentfile.documentfile-1.0.0.aar deleted file mode 100644 index 79fd550..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.documentfile.documentfile-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.documentfile.documentfile-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.documentfile.documentfile-1.0.0.aar.meta deleted file mode 100644 index 5ea946a..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.documentfile.documentfile-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 6d6bbeaaacbf7409e94087ca2e56d7c4 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.fragment.fragment-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.fragment.fragment-1.0.0.aar deleted file mode 100644 index 7a5c360..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.fragment.fragment-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.fragment.fragment-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.fragment.fragment-1.0.0.aar.meta deleted file mode 100644 index ddcbe56..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.fragment.fragment-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 812627797be8d4ee2bb6f84f64a177f3 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-ui-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-ui-1.0.0.aar deleted file mode 100644 index 01275eb..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-ui-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-ui-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-ui-1.0.0.aar.meta deleted file mode 100644 index 6d6631d..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-ui-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: dd21e13023ec44ee7a7835ea50339229 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-utils-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-utils-1.0.0.aar deleted file mode 100644 index 2980f60..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-utils-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-utils-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-utils-1.0.0.aar.meta deleted file mode 100644 index 0ec9feb..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.legacy.legacy-support-core-utils-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: b5832127130894696bbbd6ea1979a951 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.0.0.jar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.0.0.jar deleted file mode 100644 index 6c3f095..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.0.0.jar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.0.0.jar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.0.0.jar.meta deleted file mode 100644 index 573f9a5..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.0.0.jar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 1daaa934bf9ff4e368c1927c3c8b82d4 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.0.0.aar deleted file mode 100644 index 27b091c..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.0.0.aar.meta deleted file mode 100644 index 51a360d..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: b7da77ed0732f4b5287cadd541122567 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.0.0.aar deleted file mode 100644 index 5583b9f..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.0.0.aar.meta deleted file mode 100644 index cf2a423..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 04116819339bc4236b8288b02d2bdc80 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.0.0.aar deleted file mode 100644 index 0809d72..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.0.0.aar.meta deleted file mode 100644 index 7605b2c..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 18f6da7c81c074fc2a7538e4c6cdd9ea -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.0.0.aar deleted file mode 100644 index b142a70..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.0.0.aar.meta deleted file mode 100644 index e112a17..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 2c9988f67684149b293e1dfa364c7b21 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.localbroadcastmanager.localbroadcastmanager-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.localbroadcastmanager.localbroadcastmanager-1.0.0.aar deleted file mode 100644 index e9074ee..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.localbroadcastmanager.localbroadcastmanager-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.localbroadcastmanager.localbroadcastmanager-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.localbroadcastmanager.localbroadcastmanager-1.0.0.aar.meta deleted file mode 100644 index f7b58f5..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.localbroadcastmanager.localbroadcastmanager-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 134c20d57895c47cf8f9d432d771a795 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.print.print-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.print.print-1.0.0.aar deleted file mode 100644 index 7bb51fd..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.print.print-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.print.print-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.print.print-1.0.0.aar.meta deleted file mode 100644 index 7e46687..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.print.print-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: e0d73dc5bbf2c4314889bf7bdb7d638c -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.slidingpanelayout.slidingpanelayout-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.slidingpanelayout.slidingpanelayout-1.0.0.aar deleted file mode 100644 index ebee0ee..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.slidingpanelayout.slidingpanelayout-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.slidingpanelayout.slidingpanelayout-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.slidingpanelayout.slidingpanelayout-1.0.0.aar.meta deleted file mode 100644 index aba9099..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.slidingpanelayout.slidingpanelayout-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: af8a75e70f1aa40f6b92b2e36b1ac763 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.swiperefreshlayout.swiperefreshlayout-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.swiperefreshlayout.swiperefreshlayout-1.0.0.aar deleted file mode 100644 index 71d4748..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.swiperefreshlayout.swiperefreshlayout-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.swiperefreshlayout.swiperefreshlayout-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.swiperefreshlayout.swiperefreshlayout-1.0.0.aar.meta deleted file mode 100644 index 974ebe3..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.swiperefreshlayout.swiperefreshlayout-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 7023ef935a16047c982e7e5d26e0af6d -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.0.0.aar deleted file mode 100644 index 5cf661c..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.0.0.aar.meta deleted file mode 100644 index 6f554fc..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 5d5711b5d2a68410b8aab4f885a73a70 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.android.billingclient.billing-3.0.1.aar b/AdaptyUnityProject/Assets/Plugins/Android/com.android.billingclient.billing-3.0.1.aar deleted file mode 100644 index 0ec153a..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/com.android.billingclient.billing-3.0.1.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.android.billingclient.billing-3.0.1.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/com.android.billingclient.billing-3.0.1.aar.meta deleted file mode 100644 index dd03936..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/com.android.billingclient.billing-3.0.1.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 3b190512861b34cecb23ec600560e58d -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-0.7.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-0.7.0.aar deleted file mode 100644 index 5b70a51..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-0.7.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-0.7.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-0.7.0.aar.meta deleted file mode 100644 index 66e61e0..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-0.7.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: c5fc263f2e5d8428d83c44db6e833f00 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-17.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-17.0.0.aar deleted file mode 100644 index e79b126..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-17.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-17.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-17.0.0.aar.meta deleted file mode 100644 index ca9a3cd..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-17.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 362586a9586be424aba42cb13fa733b3 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-basement-17.0.0.aar b/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-basement-17.0.0.aar deleted file mode 100644 index 9c4ec2a..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-basement-17.0.0.aar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-basement-17.0.0.aar.meta b/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-basement-17.0.0.aar.meta deleted file mode 100644 index 0ae1230..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/com.google.android.gms.play-services-basement-17.0.0.aar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 3a55ebe0d47cd41bf869df9222eabfda -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.google.code.gson.gson-2.8.6.jar b/AdaptyUnityProject/Assets/Plugins/Android/com.google.code.gson.gson-2.8.6.jar deleted file mode 100644 index 4765c4a..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/com.google.code.gson.gson-2.8.6.jar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/com.google.code.gson.gson-2.8.6.jar.meta b/AdaptyUnityProject/Assets/Plugins/Android/com.google.code.gson.gson-2.8.6.jar.meta deleted file mode 100644 index 70adcec..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/com.google.code.gson.gson-2.8.6.jar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: f145ad1c6b9604a7894ceb3737814df4 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-android-extensions-runtime-1.3.72.jar b/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-android-extensions-runtime-1.3.72.jar deleted file mode 100644 index b997c49..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-android-extensions-runtime-1.3.72.jar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-android-extensions-runtime-1.3.72.jar.meta b/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-android-extensions-runtime-1.3.72.jar.meta deleted file mode 100644 index 067915a..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-android-extensions-runtime-1.3.72.jar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 4a0be151b0dee46f69b46eb4c16ac7ad -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.3.72.jar b/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.3.72.jar deleted file mode 100644 index 7007da0..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.3.72.jar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.3.72.jar.meta b/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.3.72.jar.meta deleted file mode 100644 index 6dba521..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.3.72.jar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: 6f3355cf9970d44989bebeb7b6fd1ced -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.3.72.jar b/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.3.72.jar deleted file mode 100644 index c7e2fe8..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.3.72.jar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.3.72.jar.meta b/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.3.72.jar.meta deleted file mode 100644 index 4e4b976..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.3.72.jar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: bdaea9a661a4b4646beffb37bb1468a8 -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.3.72.jar b/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.3.72.jar deleted file mode 100644 index 9a5ca5a..0000000 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.3.72.jar and /dev/null differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.3.72.jar.meta b/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.3.72.jar.meta deleted file mode 100644 index 7ab2644..0000000 --- a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.3.72.jar.meta +++ /dev/null @@ -1,34 +0,0 @@ -fileFormatVersion: 2 -guid: ae640267403c4473ea69448f69ea9aba -labels: -- gpsr -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Scenes/SampleScene.unity b/AdaptyUnityProject/Assets/Scenes/SampleScene.unity deleted file mode 100644 index 203f73d..0000000 --- a/AdaptyUnityProject/Assets/Scenes/SampleScene.unity +++ /dev/null @@ -1,2895 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 0 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 0} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &45796915 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 45796916} - - component: {fileID: 45796919} - - component: {fileID: 45796918} - - component: {fileID: 45796917} - m_Layer: 5 - m_Name: GetPaywallsButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &45796916 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 45796915} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1537428262} - m_Father: {fileID: 1340054225} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 555} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &45796917 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 45796915} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 45796918} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: GetPaywallsButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &45796918 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 45796915} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &45796919 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 45796915} - m_CullTransparentMesh: 0 ---- !u!1 &62639051 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 62639052} - - component: {fileID: 62639055} - - component: {fileID: 62639054} - - component: {fileID: 62639053} - m_Layer: 5 - m_Name: MakePurchaseButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &62639052 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 62639051} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 587210753} - m_Father: {fileID: 1340054225} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 76} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &62639053 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 62639051} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 62639054} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: MakePurchaseButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &62639054 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 62639051} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &62639055 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 62639051} - m_CullTransparentMesh: 0 ---- !u!1 &294828382 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 294828383} - - component: {fileID: 294828385} - - component: {fileID: 294828384} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &294828383 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 294828382} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 363936090} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &294828384 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 294828382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Restore Purchases ---- !u!222 &294828385 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 294828382} - m_CullTransparentMesh: 0 ---- !u!1 &295393449 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 295393450} - - component: {fileID: 295393453} - - component: {fileID: 295393452} - - component: {fileID: 295393451} - m_Layer: 5 - m_Name: IdentifyButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &295393450 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 295393449} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1040790396} - m_Father: {fileID: 1340054225} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 228} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &295393451 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 295393449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 295393452} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: IdentifyButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &295393452 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 295393449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &295393453 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 295393449} - m_CullTransparentMesh: 0 ---- !u!1 &316286176 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 316286177} - - component: {fileID: 316286179} - - component: {fileID: 316286178} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &316286177 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 316286176} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1721793305} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &316286178 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 316286176} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Logout ---- !u!222 &316286179 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 316286176} - m_CullTransparentMesh: 0 ---- !u!1 &363936089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 363936090} - - component: {fileID: 363936093} - - component: {fileID: 363936092} - - component: {fileID: 363936091} - m_Layer: 5 - m_Name: RestorePurchasesButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &363936090 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363936089} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 294828383} - m_Father: {fileID: 1340054225} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 468} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &363936091 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363936089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 363936092} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: RestorePurchasesButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &363936092 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363936089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &363936093 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 363936089} - m_CullTransparentMesh: 0 ---- !u!1 &365209546 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 365209547} - - component: {fileID: 365209550} - - component: {fileID: 365209549} - - component: {fileID: 365209548} - m_Layer: 5 - m_Name: GetPurchaserInfoButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &365209547 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 365209546} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1764124753} - m_Father: {fileID: 1340054225} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 387} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &365209548 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 365209546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 365209549} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: GetPurchaserInfoButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &365209549 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 365209546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &365209550 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 365209546} - m_CullTransparentMesh: 0 ---- !u!1 &422334547 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 422334548} - - component: {fileID: 422334550} - - component: {fileID: 422334549} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &422334548 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 422334547} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1144797329} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &422334549 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 422334547} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Update Profile ---- !u!222 &422334550 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 422334547} - m_CullTransparentMesh: 0 ---- !u!1 &519420028 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 519420032} - - component: {fileID: 519420031} - - component: {fileID: 519420029} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &519420029 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} - m_Enabled: 1 ---- !u!20 &519420031 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.6462264, g: 0.783805, b: 1, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 0 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 0 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &519420032 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &587210752 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 587210753} - - component: {fileID: 587210755} - - component: {fileID: 587210754} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &587210753 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 587210752} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 62639052} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &587210754 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 587210752} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Make Purchase ---- !u!222 &587210755 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 587210752} - m_CullTransparentMesh: 0 ---- !u!1 &642432144 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 642432145} - - component: {fileID: 642432148} - - component: {fileID: 642432147} - - component: {fileID: 642432146} - m_Layer: 5 - m_Name: SyncPurchasesButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &642432145 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 642432144} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1490411663} - m_Father: {fileID: 1340054225} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &642432146 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 642432144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 642432147} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: SyncPurchasesButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &642432147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 642432144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &642432148 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 642432144} - m_CullTransparentMesh: 0 ---- !u!1 &693481429 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 693481430} - - component: {fileID: 693481433} - - component: {fileID: 693481432} - - component: {fileID: 693481431} - m_Layer: 5 - m_Name: GetPromoButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &693481430 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 693481429} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2062981942} - m_Father: {fileID: 1340054225} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 306} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &693481431 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 693481429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 693481432} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: GetPromoButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &693481432 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 693481429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &693481433 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 693481429} - m_CullTransparentMesh: 0 ---- !u!1 &736334587 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 736334588} - - component: {fileID: 736334590} - - component: {fileID: 736334589} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &736334588 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 736334587} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1680781921} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &736334589 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 736334587} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Validate Receipt ---- !u!222 &736334590 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 736334587} - m_CullTransparentMesh: 0 ---- !u!1 &765529409 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 765529411} - - component: {fileID: 765529410} - m_Layer: 0 - m_Name: AdaptyListener - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &765529410 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765529409} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 26df785a6db174a7e8da152bc5157e7c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &765529411 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765529409} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1340054225} - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1040790395 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1040790396} - - component: {fileID: 1040790398} - - component: {fileID: 1040790397} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1040790396 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040790395} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 295393450} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1040790397 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040790395} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Identify ---- !u!222 &1040790398 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040790395} - m_CullTransparentMesh: 0 ---- !u!1 &1144797328 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1144797329} - - component: {fileID: 1144797332} - - component: {fileID: 1144797331} - - component: {fileID: 1144797330} - m_Layer: 5 - m_Name: UpdateProfileButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1144797329 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1144797328} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 422334548} - m_Father: {fileID: 1340054225} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -215} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1144797330 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1144797328} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1144797331} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: UpdateProfileButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &1144797331 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1144797328} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1144797332 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1144797328} - m_CullTransparentMesh: 0 ---- !u!1 &1340054224 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1340054225} - - component: {fileID: 1340054228} - - component: {fileID: 1340054227} - - component: {fileID: 1340054226} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1340054225 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1340054224} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 45796916} - - {fileID: 363936090} - - {fileID: 365209547} - - {fileID: 693481430} - - {fileID: 295393450} - - {fileID: 1721793305} - - {fileID: 62639052} - - {fileID: 642432145} - - {fileID: 1680781921} - - {fileID: 2079803940} - - {fileID: 1144797329} - m_Father: {fileID: 765529411} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!114 &1340054226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1340054224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &1340054227 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1340054224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &1340054228 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1340054224} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!1 &1490411662 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1490411663} - - component: {fileID: 1490411665} - - component: {fileID: 1490411664} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1490411663 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1490411662} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 642432145} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1490411664 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1490411662} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Sync Purchases ---- !u!222 &1490411665 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1490411662} - m_CullTransparentMesh: 0 ---- !u!1 &1537428261 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1537428262} - - component: {fileID: 1537428264} - - component: {fileID: 1537428263} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1537428262 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1537428261} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 45796916} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1537428263 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1537428261} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Get Paywalls ---- !u!222 &1537428264 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1537428261} - m_CullTransparentMesh: 0 ---- !u!1 &1584381432 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1584381433} - - component: {fileID: 1584381435} - - component: {fileID: 1584381434} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1584381433 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1584381432} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 2079803940} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1584381434 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1584381432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Update Attribution ---- !u!222 &1584381435 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1584381432} - m_CullTransparentMesh: 0 ---- !u!1 &1631735564 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1631735566} - - component: {fileID: 1631735565} - m_Layer: 0 - m_Name: AdaptyLogo - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!212 &1631735565 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1631735564} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 0 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 21300000, guid: fe4bb56840113499b86b2f7fb46e3d91, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 10.24, y: 2.71} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!4 &1631735566 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1631735564} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.5, y: 0.5, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1680781920 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1680781921} - - component: {fileID: 1680781924} - - component: {fileID: 1680781923} - - component: {fileID: 1680781922} - m_Layer: 5 - m_Name: ValidateReceiptButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1680781921 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1680781920} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 736334588} - m_Father: {fileID: 1340054225} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -72} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1680781922 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1680781920} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1680781923} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: ValidateReceiptButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &1680781923 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1680781920} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1680781924 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1680781920} - m_CullTransparentMesh: 0 ---- !u!1 &1721793304 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1721793305} - - component: {fileID: 1721793308} - - component: {fileID: 1721793307} - - component: {fileID: 1721793306} - m_Layer: 5 - m_Name: LogoutButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1721793305 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1721793304} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 316286177} - m_Father: {fileID: 1340054225} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 152} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1721793306 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1721793304} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1721793307} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: LogoutButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &1721793307 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1721793304} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1721793308 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1721793304} - m_CullTransparentMesh: 0 ---- !u!1 &1764124752 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1764124753} - - component: {fileID: 1764124755} - - component: {fileID: 1764124754} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1764124753 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1764124752} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 365209547} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1764124754 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1764124752} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Get Purchaser Info ---- !u!222 &1764124755 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1764124752} - m_CullTransparentMesh: 0 ---- !u!1 &1822099793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1822099796} - - component: {fileID: 1822099795} - - component: {fileID: 1822099794} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1822099794 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1822099793} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!114 &1822099795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1822099793} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1822099796 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1822099793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2062981941 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2062981942} - - component: {fileID: 2062981944} - - component: {fileID: 2062981943} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2062981942 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062981941} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 693481430} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2062981943 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062981941} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 32 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 3 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Get Promo ---- !u!222 &2062981944 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062981941} - m_CullTransparentMesh: 0 ---- !u!1 &2079803939 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2079803940} - - component: {fileID: 2079803943} - - component: {fileID: 2079803942} - - component: {fileID: 2079803941} - m_Layer: 5 - m_Name: UpdateAttributionButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2079803940 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2079803939} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1584381433} - m_Father: {fileID: 1340054225} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -146} - m_SizeDelta: {x: 293.67703, y: 49.10591} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2079803941 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2079803939} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 2079803942} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 765529410} - m_TargetAssemblyTypeName: AdaptyListener, Assembly-CSharp - m_MethodName: UpdateAttributionButtonClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &2079803942 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2079803939} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &2079803943 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2079803939} - m_CullTransparentMesh: 0 ---- !u!1001 &246365361336033382 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261414, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 246365361262261464, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: m_Name - value: AdaptyObject - objectReference: {fileID: 0} - - target: {fileID: 246365361262261465, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: key - value: - objectReference: {fileID: 0} - - target: {fileID: 246365361262261465, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} - propertyPath: logLevel - value: 1 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 34ae3a8e91b764680a786e55274b9d3e, type: 3} diff --git a/Assets/Adapty-Info.plist b/Assets/Adapty-Info.plist new file mode 100644 index 0000000..6188b7c --- /dev/null +++ b/Assets/Adapty-Info.plist @@ -0,0 +1,12 @@ + + + + + AdaptyPublicSdkKey + PUBLIC_SDK_KEY + AdaptyObserverMode + + AdaptyIDFACollectionDisabled + + + diff --git a/AdaptyUnityProject/Assets/Adapty/Docs/Guides.pdf.meta b/Assets/Adapty-Info.plist.meta similarity index 74% rename from AdaptyUnityProject/Assets/Adapty/Docs/Guides.pdf.meta rename to Assets/Adapty-Info.plist.meta index 09066c4..aa9dd42 100644 --- a/AdaptyUnityProject/Assets/Adapty/Docs/Guides.pdf.meta +++ b/Assets/Adapty-Info.plist.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: acb5e1cb00183458c8a8bd5c8fdbd46f +guid: 02e7e29dc1d934bd3928471771784087 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/Adapty/Adapty.cs b/Assets/Adapty/Adapty.cs deleted file mode 100755 index 10358e6..0000000 --- a/Assets/Adapty/Adapty.cs +++ /dev/null @@ -1,834 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace AdaptySDK { - public class Adapty { - public static readonly string pluginVersion = "1.0.0"; - - static DataState stringToDataState(string state) { - switch (state) { - case "cached": - return DataState.Cached; - case "synced": - return DataState.Synced; - default: - return DataState.Unknown; - } - } - - static PeriodUnit stringToPeriodUnit(string unit) { - switch (unit) { - case "day": - return PeriodUnit.Day; - case "week": - return PeriodUnit.Week; - case "month": - return PeriodUnit.Month; - case "year": - return PeriodUnit.Year; - default: - return PeriodUnit.Unknown; - } - } - - static string periodUnitToString(PeriodUnit unit){ - switch (unit) { - case PeriodUnit.Day: - return "day"; - case PeriodUnit.Week: - return "week"; - case PeriodUnit.Month: - return "month"; - case PeriodUnit.Year: - return "year"; - default: - return "unknown"; - } - } - - static PaymentMode stringToPaymentMode(string mode) { - switch (mode) { - case "free_trial": - return PaymentMode.FreeTrial; - case "pay_as_you_go": - return PaymentMode.PayAsYouGo; - case "pay_up_front": - return PaymentMode.PayUpFront; - default: - return PaymentMode.Unknown; - } - } - - static System.DateTime stringToDateTime(string date) { - return System.DateTime.Parse(date, System.Globalization.CultureInfo.InvariantCulture); - } - - static AdaptyError dictionaryToAdaptyError(Dictionary dictionary) { - AdaptyError obj = new AdaptyError(); - if (dictionary.ContainsKey("message")) { - obj.message = (string)dictionary["message"]; - } - if (dictionary.ContainsKey("code")) { - obj.code = (long)dictionary["code"]; - } - return obj; - } - - static PaywallModel dictionaryToPaywallModel(Dictionary dictionary) { - PaywallModel obj = new PaywallModel(); - if (dictionary.ContainsKey("developerId")) { - obj.developerId = (string)dictionary["developerId"]; - } - if (dictionary.ContainsKey("variationId")) { - obj.variationId = (string)dictionary["variationId"]; - } - if (dictionary.ContainsKey("revision")) { - obj.revision = (long)dictionary["revision"]; - } - if (dictionary.ContainsKey("isPromo")) { - obj.isPromo = (bool)dictionary["isPromo"]; - } - if (dictionary.ContainsKey("products")) { - List products = (List)dictionary["products"]; - List array = new List(); - foreach (object product in products) { - array.Add(dictionaryToProductModel((Dictionary)product)); - } - obj.products = array.ToArray(); - } - if (dictionary.ContainsKey("visualPaywall")) { - obj.visualPaywall = (string)dictionary["visualPaywall"]; - } - if (dictionary.ContainsKey("customPayload")) { - obj.customPayload = (Dictionary)dictionary["customPayload"]; - } - return obj; - } - - static ProductSubscriptionPeriodModel dictionaryToProductSubscriptionPeriodModel(Dictionary dictionary) { - ProductSubscriptionPeriodModel obj = new ProductSubscriptionPeriodModel(); - if (dictionary.ContainsKey("unit")) { - obj.unit = stringToPeriodUnit((string)dictionary["unit"]); - } - if (dictionary.ContainsKey("numberOfUnits")) { - obj.numberOfUnits = (long)dictionary["numberOfUnits"]; - } - return obj; - } - - static ProductDiscountModel dictionaryToProductDiscountModel(Dictionary dictionary) { - ProductDiscountModel obj = new ProductDiscountModel(); - if (dictionary.ContainsKey("price")) { - obj.price = decimal.Parse((string)dictionary["price"]); - } - if (dictionary.ContainsKey("identifier")) { - obj.identifier = (string)dictionary["identifier"]; - } - if (dictionary.ContainsKey("subscriptionPeriod")) { - obj.subscriptionPeriod = dictionaryToProductSubscriptionPeriodModel((Dictionary)dictionary["subscriptionPeriod"]); - } - if (dictionary.ContainsKey("numberOfPeriods")) { - obj.numberOfPeriods = (long)dictionary["numberOfPeriods"]; - } - if (dictionary.ContainsKey("paymentMode")) { - obj.paymentMode = stringToPaymentMode((string)dictionary["paymentMode"]); - } - if (dictionary.ContainsKey("localizedPrice")) { - obj.localizedPrice = (string)dictionary["localizedPrice"]; - } - if (dictionary.ContainsKey("localizedSubscriptionPeriod")) { - obj.localizedSubscriptionPeriod = (string)dictionary["localizedSubscriptionPeriod"]; - } - if (dictionary.ContainsKey("localizedNumberOfPeriods")) { - obj.localizedNumberOfPeriods = (string)dictionary["localizedNumberOfPeriods"]; - } - return obj; - } - - static AccessLevelInfoModel dictionaryToAccessLevelInfoModel(Dictionary dictionary) { - AccessLevelInfoModel obj = new AccessLevelInfoModel(); - if (dictionary.ContainsKey("id")) { - obj.id = (string)dictionary["id"]; - } - if (dictionary.ContainsKey("isActive")) { - obj.isActive = (bool)dictionary["isActive"]; - } - if (dictionary.ContainsKey("vendorProductId")) { - obj.vendorProductId = (string)dictionary["vendorProductId"]; - } - if (dictionary.ContainsKey("store")) { - obj.store = (string)dictionary["store"]; - } - if (dictionary.ContainsKey("activatedAt")) { - obj.activatedAt = stringToDateTime((string)dictionary["activatedAt"]); - } - if (dictionary.ContainsKey("renewedAt")) { - obj.renewedAt = stringToDateTime((string)dictionary["renewedAt"]); - } - if (dictionary.ContainsKey("expiresAt")) { - obj.expiresAt = stringToDateTime((string)dictionary["expiresAt"]); - } - if (dictionary.ContainsKey("isLifetime")) { - obj.isLifetime = (bool)dictionary["isLifetime"]; - } - if (dictionary.ContainsKey("activeIntroductoryOfferType")) { - obj.activeIntroductoryOfferType = (string)dictionary["activeIntroductoryOfferType"]; - } - if (dictionary.ContainsKey("activePromotionalOfferType")) { - obj.activePromotionalOfferType = (string)dictionary["activePromotionalOfferType"]; - } - if (dictionary.ContainsKey("willRenew")) { - obj.willRenew = (bool)dictionary["willRenew"]; - } - if (dictionary.ContainsKey("isInGracePeriod")) { - obj.isInGracePeriod = (bool)dictionary["isInGracePeriod"]; - } - if (dictionary.ContainsKey("unsubscribedAt")) { - obj.unsubscribedAt = stringToDateTime((string)dictionary["unsubscribedAt"]); - } - if (dictionary.ContainsKey("billingIssueDetectedAt")) { - obj.billingIssueDetectedAt = stringToDateTime((string)dictionary["billingIssueDetectedAt"]); - } - if (dictionary.ContainsKey("vendorTransactionId")) { - obj.vendorTransactionId = (string)dictionary["vendorTransactionId"]; - } - if (dictionary.ContainsKey("vendorOriginalTransactionId")) { - obj.vendorOriginalTransactionId = (string)dictionary["vendorOriginalTransactionId"]; - } - if (dictionary.ContainsKey("startsAt")) { - obj.startsAt = stringToDateTime((string)dictionary["startsAt"]); - } - if (dictionary.ContainsKey("cancellationReason")) { - obj.cancellationReason = (string)dictionary["cancellationReason"]; - } - if (dictionary.ContainsKey("isRefund")) { - obj.isRefund = (bool)dictionary["isRefund"]; - } - return obj; - } - - static SubscriptionInfoModel dictionaryToSubscriptionInfoModel(Dictionary dictionary) { - SubscriptionInfoModel obj = new SubscriptionInfoModel(); - if (dictionary.ContainsKey("isActive")) { - obj.isActive = (bool)dictionary["isActive"]; - } - if (dictionary.ContainsKey("vendorProductId")) { - obj.vendorProductId = (string)dictionary["vendorProductId"]; - } - if (dictionary.ContainsKey("store")) { - obj.store = (string)dictionary["store"]; - } - if (dictionary.ContainsKey("activatedAt")) { - obj.activatedAt = stringToDateTime((string)dictionary["activatedAt"]); - } - if (dictionary.ContainsKey("renewedAt")) { - obj.renewedAt = stringToDateTime((string)dictionary["renewedAt"]); - } - if (dictionary.ContainsKey("expiresAt")) { - obj.expiresAt = stringToDateTime((string)dictionary["expiresAt"]); - } - if (dictionary.ContainsKey("startsAt")) { - obj.startsAt = stringToDateTime((string)dictionary["startsAt"]); - } - if (dictionary.ContainsKey("isLifetime")) { - obj.isLifetime = (bool)dictionary["isLifetime"]; - } - if (dictionary.ContainsKey("activeIntroductoryOfferType")) { - obj.activeIntroductoryOfferType = (string)dictionary["activeIntroductoryOfferType"]; - } - if (dictionary.ContainsKey("activePromotionalOfferType")) { - obj.activePromotionalOfferType = (string)dictionary["activePromotionalOfferType"]; - } - if (dictionary.ContainsKey("willRenew")) { - obj.willRenew = (bool)dictionary["willRenew"]; - } - if (dictionary.ContainsKey("isInGracePeriod")) { - obj.isInGracePeriod = (bool)dictionary["isInGracePeriod"]; - } - if (dictionary.ContainsKey("unsubscribedAt")) { - obj.unsubscribedAt = stringToDateTime((string)dictionary["unsubscribedAt"]); - } - if (dictionary.ContainsKey("billingIssueDetectedAt")) { - obj.billingIssueDetectedAt = stringToDateTime((string)dictionary["billingIssueDetectedAt"]); - } - if (dictionary.ContainsKey("isSandbox")) { - obj.isSandbox = (bool)dictionary["isSandbox"]; - } - if (dictionary.ContainsKey("vendorTransactionId")) { - obj.vendorTransactionId = (string)dictionary["vendorTransactionId"]; - } - if (dictionary.ContainsKey("vendorOriginalTransactionId")) { - obj.vendorOriginalTransactionId = (string)dictionary["vendorOriginalTransactionId"]; - } - if (dictionary.ContainsKey("cancellationReason")) { - obj.cancellationReason = (string)dictionary["cancellationReason"]; - } - if (dictionary.ContainsKey("isRefund")) { - obj.isRefund = (bool)dictionary["isRefund"]; - } - return obj; - } - - static NonSubscriptionInfoModel dictionaryToNonSubscriptionInfoModel(Dictionary dictionary) { - NonSubscriptionInfoModel obj = new NonSubscriptionInfoModel(); - if (dictionary.ContainsKey("purchaseId")) { - obj.purchaseId = (string)dictionary["purchaseId"]; - } - if (dictionary.ContainsKey("vendorProductId")) { - obj.vendorProductId = (string)dictionary["vendorProductId"]; - } - if (dictionary.ContainsKey("store")) { - obj.store = (string)dictionary["store"]; - } - if (dictionary.ContainsKey("purchasedAt")) { - obj.purchasedAt = stringToDateTime((string)dictionary["purchasedAt"]); - } - if (dictionary.ContainsKey("isOneTime")) { - obj.isOneTime = (bool)dictionary["isOneTime"]; - } - if (dictionary.ContainsKey("isSandbox")) { - obj.isSandbox = (bool)dictionary["isSandbox"]; - } - if (dictionary.ContainsKey("vendorTransactionId")) { - obj.vendorTransactionId = (string)dictionary["vendorTransactionId"]; - } - if (dictionary.ContainsKey("vendorOriginalTransactionId")) { - obj.vendorOriginalTransactionId = (string)dictionary["vendorOriginalTransactionId"]; - } - if (dictionary.ContainsKey("isRefund")) { - obj.isRefund = (bool)dictionary["isRefund"]; - } - return obj; - } - - static ProductModel dictionaryToProductModel(Dictionary dictionary) { - ProductModel obj = new ProductModel(); - if (dictionary.ContainsKey("vendorProductId")) { - obj.vendorProductId = (string)dictionary["vendorProductId"]; - } - if (dictionary.ContainsKey("introductoryOfferEligibility")) { - obj.introductoryOfferEligibility = (bool)dictionary["introductoryOfferEligibility"]; - } - if (dictionary.ContainsKey("promotionalOfferEligibility")) { - obj.promotionalOfferEligibility = (bool)dictionary["promotionalOfferEligibility"]; - } - if (dictionary.ContainsKey("promotionalOfferId")) { - obj.promotionalOfferId = (string)dictionary["promotionalOfferId"]; - } - if (dictionary.ContainsKey("localizedDescription")) { - obj.localizedDescription = (string)dictionary["localizedDescription"]; - } - if (dictionary.ContainsKey("localizedTitle")) { - obj.localizedTitle = (string)dictionary["localizedTitle"]; - } - if (dictionary.ContainsKey("price")) { - obj.price = decimal.Parse((string)dictionary["price"]); - } - if (dictionary.ContainsKey("currencyCode")) { - obj.currencyCode = (string)dictionary["currencyCode"]; - } - if (dictionary.ContainsKey("currencySymbol")) { - obj.currencySymbol = (string)dictionary["currencySymbol"]; - } - if (dictionary.ContainsKey("regionCode")) { - obj.regionCode = (string)dictionary["regionCode"]; - } - if (dictionary.ContainsKey("subscriptionPeriod")) { - obj.subscriptionPeriod = dictionaryToProductSubscriptionPeriodModel((Dictionary)dictionary["subscriptionPeriod"]); - } - if (dictionary.ContainsKey("introductoryDiscount")) { - obj.introductoryDiscount = dictionaryToProductDiscountModel((Dictionary)dictionary["introductoryDiscount"]); - } - if (dictionary.ContainsKey("subscriptionGroupIdentifier")) { - obj.subscriptionGroupIdentifier = (string)dictionary["subscriptionGroupIdentifier"]; - } - if (dictionary.ContainsKey("discounts")) { - List discounts = (List)dictionary["discounts"]; - List array = new List(); - foreach (object discount in discounts) { - array.Add(dictionaryToProductDiscountModel((Dictionary)discount)); - } - obj.discounts = array.ToArray(); - } - if (dictionary.ContainsKey("localizedPrice")) { - obj.localizedPrice = (string)dictionary["localizedPrice"]; - } - if (dictionary.ContainsKey("localizedSubscriptionPeriod")) { - obj.localizedSubscriptionPeriod = (string)dictionary["localizedSubscriptionPeriod"]; - } - if (dictionary.ContainsKey("skuId")) { - obj.skuId = (string)dictionary["skuId"]; - } - return obj; - } - - static PurchaserInfoModel dictionaryToPurchaserInfoModel(Dictionary dictionary) { - PurchaserInfoModel obj = new PurchaserInfoModel(); - if (dictionary.ContainsKey("customerUserId")) { - obj.customerUserId = (string)dictionary["customerUserId"]; - } - if (dictionary.ContainsKey("accessLevels")) { - Dictionary accessLevels = (Dictionary)dictionary["accessLevels"]; - Dictionary converted_dictionary = new Dictionary(); - foreach (KeyValuePair item in accessLevels) { - converted_dictionary.Add(item.Key, dictionaryToAccessLevelInfoModel((Dictionary)item.Value)); - } - obj.accessLevels = converted_dictionary; - } - if (dictionary.ContainsKey("subscriptions")) { - Dictionary subscriptions = (Dictionary)dictionary["subscriptions"]; - Dictionary converted_dictionary = new Dictionary(); - foreach (KeyValuePair item in subscriptions) { - converted_dictionary.Add(item.Key, dictionaryToSubscriptionInfoModel((Dictionary)item.Value)); - } - obj.subscriptions = converted_dictionary; - } - if (dictionary.ContainsKey("nonSubscriptions")) { - Dictionary nonSubscriptions = (Dictionary)dictionary["nonSubscriptions"]; - Dictionary converted_dictionary = new Dictionary(); - foreach (KeyValuePair item in nonSubscriptions) { - converted_dictionary.Add(item.Key, dictionaryToNonSubscriptionInfoModel((Dictionary)item.Value)); - } - obj.nonSubscriptions = converted_dictionary; - } - return obj; - } - - static PromoModel dictionaryToPromoModel(Dictionary dictionary) { - PromoModel obj = new PromoModel(); - if (dictionary.ContainsKey("promoType")) { - obj.promoType = (string)dictionary["promoType"]; - } - if (dictionary.ContainsKey("variationId")) { - obj.variationId = (string)dictionary["variationId"]; - } - if (dictionary.ContainsKey("expiresAt")) { - obj.expiresAt = stringToDateTime((string)dictionary["expiresAt"]); - } - if (dictionary.ContainsKey("paywall")) { - obj.paywall = dictionaryToPaywallModel((Dictionary)dictionary["paywall"]); - } - return obj; - } - - static Dictionary subscriptionPeriodToDictionary(ProductSubscriptionPeriodModel subscriptionPeriod) { - Dictionary dictionary = new Dictionary(); - dictionary.Add("unit", periodUnitToString(subscriptionPeriod.unit)); - dictionary.Add("numberOfUnits", subscriptionPeriod.numberOfUnits); - return dictionary; - } - - static Dictionary discountToDictionary(ProductDiscountModel discount) { - Dictionary dictionary = new Dictionary(); - dictionary.Add("price", discount.price.ToString()); - dictionary.Add("numberOfPeriods", discount.numberOfPeriods); - if (discount.localizedPrice != null) { - dictionary.Add("localizedPrice", discount.localizedPrice); - } - if (discount.subscriptionPeriod != null) { - dictionary.Add("subscriptionPeriod", subscriptionPeriodToDictionary(discount.subscriptionPeriod)); - } - return dictionary; - } - - static Dictionary productToDictionary(ProductModel product) { - Dictionary dictionary = new Dictionary(); - if (product.vendorProductId != null) { - dictionary.Add("vendorProductId", product.vendorProductId); - } - if (product.localizedTitle != null) { - dictionary.Add("localizedTitle", product.localizedTitle); - } - if (product.localizedDescription != null) { - dictionary.Add("localizedDescription", product.localizedDescription); - } - if (product.localizedPrice != null) { - dictionary.Add("localizedPrice", product.localizedPrice); - } - dictionary.Add("price", product.price.ToString()); - if (product.currencyCode != null) { - dictionary.Add("currencyCode", product.currencyCode); - } - if (product.currencySymbol != null) { - dictionary.Add("currencySymbol", product.currencySymbol); - } - if (product.regionCode != null) { - dictionary.Add("regionCode", product.regionCode); - } - if (product.subscriptionPeriod != null) { - dictionary.Add("subscriptionPeriod", subscriptionPeriodToDictionary(product.subscriptionPeriod)); - } - if (product.subscriptionGroupIdentifier != null) { - dictionary.Add("subscriptionGroupIdentifier", product.subscriptionGroupIdentifier); - } - dictionary.Add("introductoryOfferEligibility", product.introductoryOfferEligibility); - dictionary.Add("promotionalOfferEligibility", product.promotionalOfferEligibility); - if (product.promotionalOfferId != null) { - dictionary.Add("promotionalOfferId", product.promotionalOfferId); - } - if (product.introductoryDiscount != null) { - dictionary.Add("introductoryDiscount", discountToDictionary(product.introductoryDiscount)); - } - if (product.discounts != null) { - List> discounts = new List>(); - foreach (ProductDiscountModel discount in product.discounts) { - discounts.Add(discountToDictionary(discount)); - } - dictionary.Add("discounts", discounts); - } - if (product.skuId != null) { - dictionary.Add("skuId", product.skuId); - } - return dictionary; - } - - static void addAdaptyErrorParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("error")) { - parameters.Add(dictionaryToAdaptyError((Dictionary)dictionary["error"])); - } else { - parameters.Add(null); - } - } - - static void addPaywallsParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("paywalls")) { - List paywalls = (List)dictionary["paywalls"]; - List array = new List(); - foreach (object paywall in paywalls) { - array.Add(dictionaryToPaywallModel((Dictionary)paywall)); - } - parameters.Add(array.ToArray()); - } else { - parameters.Add(null); - } - } - - static void addProductsParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("products")) { - List products = (List)dictionary["products"]; - List array = new List(); - foreach (object product in products) { - array.Add(dictionaryToProductModel((Dictionary)product)); - } - parameters.Add(array.ToArray()); - } else { - parameters.Add(null); - } - } - - static void addProductParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("product")) { - parameters.Add(dictionaryToProductModel((Dictionary)dictionary["product"])); - } else { - parameters.Add(null); - } - } - - static void addPurchaserInfoParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("purchaserInfo")) { - parameters.Add(dictionaryToPurchaserInfoModel((Dictionary)dictionary["purchaserInfo"])); - } else { - parameters.Add(null); - } - } - - static void addDataStateParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("state")) { - parameters.Add(stringToDataState((string)dictionary["state"])); - } else { - parameters.Add(null); - } - } - - static void addReceiptOrPurchaseTokenParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("receipt")) { - parameters.Add((string)dictionary["receipt"]); - } else if (dictionary.ContainsKey("purchaseToken")) { - parameters.Add((string)dictionary["purchaseToken"]); - } else { - parameters.Add(null); - } - } - - static void addValidationResultParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("validationResult")) { - parameters.Add((Dictionary)dictionary["validationResult"]); - } else { - parameters.Add(null); - } - } - - static void addValidationResultsParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("validationResults")) { - List validationResults = (List)dictionary["validationResults"]; - List> array = new List>(); - foreach (object validationResult in validationResults) { - array.Add((Dictionary)validationResult); - } - parameters.Add(validationResults.ToArray()); - } else { - parameters.Add(null); - } - } - - static void addPromoParameter(List parameters, Dictionary dictionary) { - if (dictionary.ContainsKey("promo")) { - parameters.Add(dictionaryToPromoModel((Dictionary)dictionary["promo"])); - } else { - parameters.Add(null); - } - } - - static object[] messageToParameters(string method, string message) { - List parameters = new List(); - Dictionary dictionary = Json.Deserialize(message) as Dictionary; - switch (method) { - case "OnIdentify": - case "OnLogout": - case "OnSyncPurchases": - case "OnUpdateAttribution": - case "OnUpdateProfile": - // AdaptyError error - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnGetPaywalls": - // PaywallModel[] paywalls, ProductModel[] products, DataState state, AdaptyError error - addPaywallsParameter(parameters, dictionary); - addProductsParameter(parameters, dictionary); - addDataStateParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnMakePurchase": - case "OnMakeDeferredPurchase": - // PurchaserInfoModel purchaserInfo, string receipt, Dictionary validationResult, ProductModel product, AdaptyError error - addPurchaserInfoParameter(parameters, dictionary); - addReceiptOrPurchaseTokenParameter(parameters, dictionary); - addValidationResultParameter(parameters, dictionary); - addProductParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnRestorePurchases": - // PurchaserInfoModel purchaserInfo, string receipt, Dictionary[] validationResults, AdaptyError error - addPurchaserInfoParameter(parameters, dictionary); - addReceiptOrPurchaseTokenParameter(parameters, dictionary); - addValidationResultsParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnValidateAppleReceipt": - case "OnValidateGooglePurchase": - // PurchaserInfoModel purchaserInfo, Dictionary validationResult, AdaptyError error - addPurchaserInfoParameter(parameters, dictionary); - addValidationResultParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnGetPurchaserInfo": - // PurchaserInfoModel purchaserInfo, DataState state, AdaptyError error - addPurchaserInfoParameter(parameters, dictionary); - addDataStateParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnPurchaserInfoUpdated": - // PurchaserInfoModel purchaserInfo - addPurchaserInfoParameter(parameters, dictionary); - break; - case "OnGetPromo": - // PromoModel promo, AdaptyError error - addPromoParameter(parameters, dictionary); - addAdaptyErrorParameter(parameters, dictionary); - break; - case "OnPromoReceived": - // PromoModel promo - addPromoParameter(parameters, dictionary); - break; - - } - return parameters.ToArray(); - } - - public static void executeCallback() { - Callback callback = null; - #if UNITY_IOS - callback = AdaptyiOS.getCallback(); - #elif UNITY_ANDROID - callback = AdaptyAndroid.getCallback(); - #endif - if (callback != null && callback.objectName != null && callback.method != null && callback.message != null) { - GameObject gameObject = UnityEngine.GameObject.Find(callback.objectName); - if (gameObject != null) { - MonoBehaviour script = gameObject.GetComponent(); - if (script != null) { - System.Reflection.MethodInfo method = script.GetType().GetMethod(callback.method); - if (method != null) { - method.Invoke(script, messageToParameters(callback.method, callback.message)); - } - } - } - } - } - - public static void setLogLevel(LogLevel logLevel) { - #if !UNITY_EDITOR - int log_level_int = -1; - switch (logLevel) { - case LogLevel.None: - log_level_int = 0; - break; - case LogLevel.Error: - log_level_int = 1; - break; - case LogLevel.Verbose: - log_level_int = 2; - break; - } - #if UNITY_IOS - AdaptyiOS.setLogLevel(log_level_int); - #elif UNITY_ANDROID - AdaptyAndroid.setLogLevel(log_level_int); - #endif - #endif - } - - public static void activate(string key, bool observeMode) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.activate(key, observeMode); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.activate(key); - #endif - } - - public static void identify(string customerUserId, MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.identify(customerUserId, gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.identify(customerUserId, gameObject ? gameObject.name : null); - #endif - } - - public static void logout(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.logout(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.logout(gameObject ? gameObject.name : null); - #endif - } - - public static void getPaywalls(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.getPaywalls(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.getPaywalls(gameObject ? gameObject.name : null); - #endif - } - - public static void makePurchase(ProductModel product, string offerId, MonoBehaviour gameObject) { - #if !UNITY_EDITOR - string productJson = Json.Serialize(productToDictionary(product)); - #if UNITY_IOS - AdaptyiOS.makePurchase(productJson, offerId, gameObject ? gameObject.name : null); - #elif UNITY_ANDROID - AdaptyAndroid.makePurchase(productJson, gameObject ? gameObject.name : null); - #endif - #endif - } - - public static void restorePurchases(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.restorePurchases(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.restorePurchases(gameObject ? gameObject.name : null); - #endif - } - - public static void syncPurchases(MonoBehaviour gameObject) { - #if UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.syncPurchases(gameObject ? gameObject.name : null); - #endif - } - - public static void validateAppleReceipt(string receipt, MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.validateReceipt(receipt, gameObject ? gameObject.name : null); - #endif - } - - public static void validateGooglePurchase(PurchaseType purchaseType, string productId, string purchaseToken, string purchaseOrderId, ProductModel product, MonoBehaviour gameObject) { - #if UNITY_ANDROID && !UNITY_EDITOR - int purchaseTypeInt = 0; - if (purchaseType == PurchaseType.Subscription) { - purchaseTypeInt = 1; - } - string productJson = Json.Serialize(productToDictionary(product)); - AdaptyAndroid.validatePurchase(purchaseTypeInt, productId, purchaseToken, purchaseOrderId, productJson, gameObject ? gameObject.name : null); - #endif - } - - public static void getPurchaserInfo(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.getPurchaserInfo(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.getPurchaserInfo(gameObject ? gameObject.name : null); - #endif - } - - public static void setOnPurchaserInfoUpdatedListener(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.setOnPurchaserInfoUpdatedListener(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.setOnPurchaserInfoUpdatedListener(gameObject ? gameObject.name : null); - #endif - } - - public static void updateAttribution(Dictionary attribution, AttributionNetwork source, string networkUserId, MonoBehaviour gameObject) { - #if !UNITY_EDITOR - int sourceInt = -1; - switch (source) { - case AttributionNetwork.Appsflyer: - sourceInt = 0; - break; - case AttributionNetwork.Adjust: - sourceInt = 1; - break; - case AttributionNetwork.Branch: - sourceInt = 2; - break; - case AttributionNetwork.Custom: - sourceInt = 3; - break; - } - string attributionJson = Json.Serialize(attribution); - #if UNITY_IOS - AdaptyiOS.updateAttribution(attributionJson, sourceInt, networkUserId, gameObject ? gameObject.name : null); - #elif UNITY_ANDROID - AdaptyAndroid.updateAttribution(attributionJson, sourceInt, networkUserId, gameObject ? gameObject.name : null); - #endif - #endif - } - - public static void updateProfile(ProfileParameterBuilder profileParams, MonoBehaviour gameObject) { - #if !UNITY_EDITOR - string paramsJson = Json.Serialize(profileParams.getDictionary()); - #if UNITY_IOS - AdaptyiOS.updateProfile(paramsJson, gameObject ? gameObject.name : null); - #elif UNITY_ANDROID - AdaptyAndroid.updateProfile(paramsJson, gameObject ? gameObject.name : null); - #endif - #endif - } - - public static void getPromo(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.getPromo(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.getPromo(gameObject ? gameObject.name : null); - #endif - } - - public static void setOnPromoReceivedListener(MonoBehaviour gameObject) { - #if UNITY_IOS && !UNITY_EDITOR - AdaptyiOS.setOnPromoReceivedListener(gameObject ? gameObject.name : null); - #elif UNITY_ANDROID && !UNITY_EDITOR - AdaptyAndroid.setOnPromoReceivedListener(gameObject ? gameObject.name : null); - #endif - } - } -} \ No newline at end of file diff --git a/Assets/Adapty/AdaptyAndroid.cs b/Assets/Adapty/AdaptyAndroid.cs deleted file mode 100644 index b1a2b6a..0000000 --- a/Assets/Adapty/AdaptyAndroid.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace AdaptySDK { - #if UNITY_ANDROID - class AdaptyAndroid { - private static readonly string tag = "AdaptyAndroid"; - private static AndroidJavaClass AdaptyAndroidClass = new AndroidJavaClass("com.adapty.unity.AdaptyAndroidWrapper"); - - private static AndroidJavaObject getActivity() { - AndroidJavaClass unity_player = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); - return unity_player.GetStatic("currentActivity"); - } - - private static AndroidJavaObject getContext() { - AndroidJavaObject activity = getActivity(); - return activity.Call("getApplicationContext"); - } - - public static Callback getCallback() { - AndroidJavaObject javaCallback = AdaptyAndroidClass.CallStatic("getCallback"); - if (javaCallback != null) { - Debug.Log(tag + " executeCallback()"); - Callback callback = new Callback(); - callback.objectName = javaCallback.Get("objectName"); - callback.method = javaCallback.Get("method"); - callback.message = javaCallback.Get("message"); - return callback; - } - return null; - } - - public static void setLogLevel(int logLevel) { - Debug.Log(tag + " setLogLevel()"); - AdaptyAndroidClass.CallStatic("setLogLevel", logLevel); - } - - public static void activate(string key) { - Debug.Log(tag + " activate()"); - AdaptyAndroidClass.CallStatic("activate", getContext(), key); - } - - public static void identify(string customerUserId, string objectName) { - Debug.Log(tag + " identify()"); - AdaptyAndroidClass.CallStatic("identify", customerUserId, objectName); - } - - public static void logout(string objectName) { - Debug.Log(tag + " logout()"); - AdaptyAndroidClass.CallStatic("logout", objectName); - } - - public static void getPaywalls(string objectName) { - Debug.Log(tag + " getPaywalls()"); - AdaptyAndroidClass.CallStatic("getPaywalls", objectName); - } - - public static void makePurchase(string productJson, string objectName) { - Debug.Log(tag + " makePurchase()"); - AdaptyAndroidClass.CallStatic("makePurchase", getActivity(), productJson, objectName); - } - - public static void restorePurchases(string objectName) { - Debug.Log(tag + " restorePurchases()"); - AdaptyAndroidClass.CallStatic("restorePurchases", objectName); - } - - public static void syncPurchases(string objectName) { - Debug.Log(tag + " syncPurchases()"); - AdaptyAndroidClass.CallStatic("syncPurchases", objectName); - } - - public static void validatePurchase(int purchaseTypeInt, string productId, string purchaseToken, string purchaseOrderId, string productJson, string objectName) { - Debug.Log(tag + " validatePurchase()"); - AdaptyAndroidClass.CallStatic("validatePurchase", purchaseTypeInt, productId, purchaseToken, purchaseOrderId, productJson, objectName); - } - - public static void getPurchaserInfo(string objectName) { - Debug.Log(tag + " getPurchaserInfo()"); - AdaptyAndroidClass.CallStatic("getPurchaserInfo", objectName); - } - - public static void setOnPurchaserInfoUpdatedListener(string objectName) { - Debug.Log(tag + " setOnPurchaserInfoUpdatedListener()"); - AdaptyAndroidClass.CallStatic("setOnPurchaserInfoUpdatedListener", objectName); - } - - public static void updateAttribution(string attributionJson, int sourceInt, string networkUserId, string objectName) { - Debug.Log(tag + " updateAttribution()"); - AdaptyAndroidClass.CallStatic("updateAttribution", attributionJson, sourceInt, networkUserId, objectName); - } - - public static void updateProfile(string paramsJson, string objectName) { - Debug.Log(tag + " updateProfile()"); - AdaptyAndroidClass.CallStatic("updateProfile", paramsJson, objectName); - } - - public static void getPromo(string objectName) { - Debug.Log(tag + " getPromo()"); - AdaptyAndroidClass.CallStatic("getPromo", objectName); - } - - public static void setOnPromoReceivedListener(string objectName) { - Debug.Log(tag + " setOnPromoReceivedListener()"); - AdaptyAndroidClass.CallStatic("setOnPromoReceivedListener", objectName); - } - } - #endif -} \ No newline at end of file diff --git a/Assets/Adapty/AdaptyModels.cs b/Assets/Adapty/AdaptyModels.cs deleted file mode 100644 index bef1e22..0000000 --- a/Assets/Adapty/AdaptyModels.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System.Collections.Generic; -using System; - -namespace AdaptySDK { - public enum LogLevel { - None, - Error, - Verbose - } - - public enum DataState { - Cached, - Synced, - Unknown - } - - public enum PurchaseType { - Inapp, - Subscription, - Unknown - } - - public enum AttributionNetwork { - Appsflyer, - Adjust, - Branch, - Custom, - Unknown - } - - public enum PeriodUnit { - Day, - Week, - Month, - Year, - Unknown - } - - public enum PaymentMode { - FreeTrial, - PayAsYouGo, - PayUpFront, - Unknown - } - - public enum Gender { - Female, - Male, - Other, - Unknown - } - - public class AdaptyError { - public string message; - public long code; - } - - public class ProductSubscriptionPeriodModel { - public PeriodUnit unit; - public long numberOfUnits; - } - - public class ProductDiscountModel { - public decimal price; - public string identifier; - public ProductSubscriptionPeriodModel subscriptionPeriod; - public long numberOfPeriods; - public PaymentMode paymentMode; - public string localizedPrice; - public string localizedSubscriptionPeriod; - public string localizedNumberOfPeriods; - } - - public class ProductModel { - public string vendorProductId; - public bool introductoryOfferEligibility = false; - public bool promotionalOfferEligibility = false; - public string promotionalOfferId; - public string localizedDescription = ""; - public string localizedTitle = ""; - public decimal price = 0; - public string currencyCode; - public string currencySymbol; - public string regionCode; - public ProductSubscriptionPeriodModel subscriptionPeriod; - public ProductDiscountModel introductoryDiscount; - public string subscriptionGroupIdentifier; - public ProductDiscountModel[] discounts; - public string localizedPrice; - public string localizedSubscriptionPeriod; - public string skuId; - } - - public class PaywallModel { - public string developerId; - public string variationId; - public long revision = 0; - public bool isPromo = false; - public ProductModel[] products; - public string visualPaywall = ""; - public Dictionary customPayload; - } - - public class PromoModel { - public string promoType; - public string variationId; - public DateTime expiresAt; - public PaywallModel paywall; - } - - public class AccessLevelInfoModel { - public string id; - public bool isActive; - public string vendorProductId; - public string store; - public DateTime activatedAt; - public DateTime renewedAt; - public DateTime expiresAt; - public bool isLifetime; - public string activeIntroductoryOfferType; - public string activePromotionalOfferType; - public bool willRenew; - public bool isInGracePeriod; - public DateTime unsubscribedAt; - public DateTime billingIssueDetectedAt; - public string vendorTransactionId; - public string vendorOriginalTransactionId; - public DateTime startsAt; - public string cancellationReason; - public bool isRefund; - } - - public class SubscriptionInfoModel { - public bool isActive; - public string vendorProductId; - public string store; - public DateTime activatedAt; - public DateTime renewedAt; - public DateTime expiresAt; - public DateTime startsAt; - public bool isLifetime; - public string activeIntroductoryOfferType; - public string activePromotionalOfferType; - public bool willRenew; - public bool isInGracePeriod; - public DateTime unsubscribedAt; - public DateTime billingIssueDetectedAt; - public bool isSandbox; - public string vendorTransactionId; - public string vendorOriginalTransactionId; - public string cancellationReason; - public bool isRefund; - } - - public class NonSubscriptionInfoModel { - public string purchaseId; - public string vendorProductId; - public string store; - public DateTime purchasedAt; - public bool isOneTime; - public bool isSandbox; - public string vendorTransactionId; - public string vendorOriginalTransactionId; - public bool isRefund; - } - - public class PurchaserInfoModel { - public string customerUserId; - public Dictionary accessLevels; - public Dictionary subscriptions; - public Dictionary nonSubscriptions; - } - - public class ProfileParameterBuilder { - private Dictionary values = new Dictionary(); - public Dictionary getDictionary() { - return values; - } - public ProfileParameterBuilder withEmail(string email) { - values.Add("email", email); - return this; - } - public ProfileParameterBuilder withPhoneNumber(string phoneNumber) { - values.Add("phoneNumber", phoneNumber); - return this; - } - public ProfileParameterBuilder withFacebookUserId(string facebookUserId) { - values.Add("facebookUserId", facebookUserId); - return this; - } - public ProfileParameterBuilder withAmplitudeUserId(string amplitudeUserId) { - values.Add("amplitudeUserId", amplitudeUserId); - return this; - } - public ProfileParameterBuilder withAmplitudeDeviceId(string amplitudeDeviceId) { - values.Add("amplitudeDeviceId", amplitudeDeviceId); - return this; - } - public ProfileParameterBuilder withMixpanelUserId(string mixpanelUserId) { - values.Add("mixpanelUserId", mixpanelUserId); - return this; - } - public ProfileParameterBuilder withAppmetricaProfileId(string appmetricaProfileId) { - values.Add("appmetricaProfileId", appmetricaProfileId); - return this; - } - public ProfileParameterBuilder withAppmetricaDeviceId(string appmetricaDeviceId) { - values.Add("appmetricaDeviceId", appmetricaDeviceId); - return this; - } - public ProfileParameterBuilder withFirstName(string firstName) { - values.Add("firstName", firstName); - return this; - } - public ProfileParameterBuilder withLastName(string lastName) { - values.Add("lastName", lastName); - return this; - } - public ProfileParameterBuilder withGender(Gender gender) { - values.Add("gender", gender.ToString("g").ToLower()); - return this; - } - // YYYY-MM-DD - public ProfileParameterBuilder withBirthday(string birthday) { - values.Add("birthday", birthday); - return this; - } - public ProfileParameterBuilder withAppTrackingTransparencyStatus(uint appTrackingTransparencyStatus) { - values.Add("appTrackingTransparencyStatus", appTrackingTransparencyStatus); - return this; - } - public ProfileParameterBuilder withCustomAttributes(Dictionary customAttributes) { - values.Add("customAttributes", customAttributes); - return this; - } - } - - class Callback { - public string objectName; - public string method; - public string message; - } -} \ No newline at end of file diff --git a/Assets/Adapty/AdaptyObject.prefab b/Assets/Adapty/AdaptyObject.prefab deleted file mode 100644 index 7ccc404..0000000 --- a/Assets/Adapty/AdaptyObject.prefab +++ /dev/null @@ -1,46 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &246365361262261464 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 246365361262261414} - - component: {fileID: 246365361262261465} - m_Layer: 0 - m_Name: AdaptyObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &246365361262261414 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 246365361262261464} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &246365361262261465 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 246365361262261464} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 86bd11ca2822145bbabca3e820f6308f, type: 3} - m_Name: - m_EditorClassIdentifier: - key: diff --git a/Assets/Adapty/AdaptyObjectScript.cs b/Assets/Adapty/AdaptyObjectScript.cs deleted file mode 100644 index bb0fe77..0000000 --- a/Assets/Adapty/AdaptyObjectScript.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AdaptySDK; - -public class AdaptyObjectScript : MonoBehaviour { - public string key; - public bool observeMode = false; - public LogLevel logLevel = LogLevel.Error; - - void Start() { - Adapty.setLogLevel(logLevel); - Adapty.activate(key, observeMode); - } - - void Update() { - #if !UNITY_EDITOR - Adapty.executeCallback(); - #endif - } -} diff --git a/Assets/Adapty/AdaptyiOS.cs b/Assets/Adapty/AdaptyiOS.cs deleted file mode 100644 index 5b46de9..0000000 --- a/Assets/Adapty/AdaptyiOS.cs +++ /dev/null @@ -1,146 +0,0 @@ -using System.Runtime.InteropServices; -using UnityEngine; - -namespace AdaptySDK { -#if UNITY_IOS - class AdaptyiOS { - private static readonly string tag = "AdaptyiOS"; - - public static Callback getCallback() { - if (AdaptyUnity_hasCallback()) { - Debug.Log(tag + " executeCallback()"); - Callback callback = new Callback(); - callback.objectName = AdaptyUnity_getCallbackObjectName(); - callback.method = AdaptyUnity_getCallbackMethod(); - callback.message = AdaptyUnity_getCallbackMessageAndPop(); - return callback; - } - return null; - } - - public static void setLogLevel(int logLevel) { - Debug.Log(tag + " setLogLevel()"); - AdaptyUnity_setLogLevel(logLevel); - } - - public static void activate(string key, bool observeMode) { - Debug.Log(tag + " activate()"); - AdaptyUnity_activate(key, observeMode); - } - - public static void identify(string customerUserId, string objectName) { - Debug.Log(tag + " identify()"); - AdaptyUnity_identify(customerUserId, objectName); - } - - public static void logout(string objectName) { - Debug.Log(tag + " logout()"); - AdaptyUnity_logout(objectName); - } - - public static void getPaywalls(string objectName) { - Debug.Log(tag + " getPaywalls()"); - AdaptyUnity_getPaywalls(objectName); - } - - public static void makePurchase(string productJson, string offerId, string objectName) { - Debug.Log(tag + " makePurchase()"); - AdaptyUnity_makePurchase(productJson, offerId, objectName); - } - - public static void restorePurchases(string objectName) { - Debug.Log(tag + " restorePurchases()"); - AdaptyUnity_restorePurchases(objectName); - } - - public static void validateReceipt(string receipt, string objectName) { - Debug.Log(tag + " validateReceipt()"); - AdaptyUnity_validateReceipt(receipt, objectName); - } - - public static void getPurchaserInfo(string objectName) { - Debug.Log(tag + " getPurchaserInfo()"); - AdaptyUnity_getPurchaserInfo(objectName); - } - - public static void setOnPurchaserInfoUpdatedListener(string objectName) { - Debug.Log(tag + " setOnPurchaserInfoUpdatedListener()"); - AdaptyUnity_setOnPurchaserInfoUpdatedListener(objectName); - } - - public static void updateAttribution(string attributionJson, int sourceInt, string networkUserId, string objectName) { - Debug.Log(tag + " updateAttribution()"); - AdaptyUnity_updateAttribution(attributionJson, sourceInt, networkUserId, objectName); - } - - public static void updateProfile(string paramsJson, string objectName) { - Debug.Log(tag + " updateProfile()"); - AdaptyUnity_updateProfile(paramsJson, objectName); - } - - public static void getPromo(string objectName) { - Debug.Log(tag + " getPromo()"); - AdaptyUnity_getPromo(objectName); - } - - public static void setOnPromoReceivedListener(string objectName) { - Debug.Log(tag + " setOnPromoReceivedListener()"); - AdaptyUnity_setOnPromoReceivedListener(objectName); - } - - [DllImport("__Internal")] - private static extern bool AdaptyUnity_hasCallback(); - - [DllImport("__Internal")] - private static extern string AdaptyUnity_getCallbackObjectName(); - - [DllImport("__Internal")] - private static extern string AdaptyUnity_getCallbackMethod(); - - [DllImport("__Internal")] - private static extern string AdaptyUnity_getCallbackMessageAndPop(); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_setLogLevel(int logLevel); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_activate(string key, bool observeMode); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_identify(string key, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_logout(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_getPaywalls(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_makePurchase(string productJson, string offerId, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_restorePurchases(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_validateReceipt(string receipt, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_getPurchaserInfo(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_setOnPurchaserInfoUpdatedListener(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_updateAttribution(string attributionJson, int sourceInt, string networkUserId, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_updateProfile(string paramsJson, string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_getPromo(string objectName); - - [DllImport("__Internal")] - private static extern void AdaptyUnity_setOnPromoReceivedListener(string objectName); - } -#endif -} \ No newline at end of file diff --git a/Assets/Adapty/Editor/AdaptyObjectEditor.cs b/Assets/Adapty/Editor/AdaptyObjectEditor.cs deleted file mode 100644 index a84702d..0000000 --- a/Assets/Adapty/Editor/AdaptyObjectEditor.cs +++ /dev/null @@ -1,55 +0,0 @@ -using UnityEditor; -using UnityEngine; - -[CustomEditor(typeof(AdaptyObjectScript))] -[CanEditMultipleObjects] -public class AdaptyObjectEditor : Editor { - SerializedProperty key, observeMode, logLevel; - - void OnEnable() { - key = serializedObject.FindProperty("key"); - observeMode = serializedObject.FindProperty("observeMode"); - logLevel = serializedObject.FindProperty("logLevel"); - } - - public override void OnInspectorGUI() { - serializedObject.Update(); - - int width = 236; - GUILayout.Box((Texture)AssetDatabase.LoadAssetAtPath("Assets/Adapty/Editor/logo.png", typeof(Texture)), new GUILayoutOption[] {GUILayout.Width(width), GUILayout.Height(63)}); - - EditorGUILayout.Separator(); - - EditorGUILayout.HelpBox("Set your key to init the Adapty SDK.", MessageType.Info); - EditorGUILayout.PropertyField(key); - - EditorGUILayout.Separator(); - - EditorGUILayout.HelpBox("If you have a functioning subscription system and want to give Adapty SDK a quick try, you can use Observer mode. On Android you have to call Adapty.syncPurchases() after each purchase or restoring purchases.", MessageType.Info); - EditorGUILayout.PropertyField(observeMode); - - EditorGUILayout.Separator(); - - EditorGUILayout.HelpBox("Set log level for errors and other important information to help you understand what is going on.", MessageType.Info); - EditorGUILayout.PropertyField(logLevel); - - EditorGUILayout.Separator(); - - EditorGUILayout.HelpBox("For more information on setting up Adapty check out our relevant docs.", MessageType.None); - - - if (GUILayout.Button("Adapty Unity Docs", new GUILayoutOption[] {GUILayout.Width(width)})) { - Application.OpenURL("https://docs.adapty.io/sdk/integrating-adapty-sdk/unity-sdk-intro"); - } - - if (GUILayout.Button("Adapty iOS Docs", new GUILayoutOption[] {GUILayout.Width(width)})) { - Application.OpenURL("https://docs.adapty.io/sdk/integrating-adapty-sdk/ios-sdk-intro"); - } - - if (GUILayout.Button("Adapty Android Docs", new GUILayoutOption[] {GUILayout.Width(width)})) { - Application.OpenURL("https://docs.adapty.io/sdk/integrating-adapty-sdk/android-sdk-intro"); - } - - serializedObject.ApplyModifiedProperties(); - } -} \ No newline at end of file diff --git a/Assets/Adapty/Editor/PostBuildProcessor.cs b/Assets/Adapty/Editor/PostBuildProcessor.cs deleted file mode 100644 index 4e07315..0000000 --- a/Assets/Adapty/Editor/PostBuildProcessor.cs +++ /dev/null @@ -1,24 +0,0 @@ -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEditor.iOS.Xcode; -using System.IO; - -public class AdaptyPostBuildProcessor { - - [PostProcessBuild] - public static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath) { - if (buildTarget == BuildTarget.iOS) { - UpdateXcodeProject(buildTarget, buildPath + "/Unity-iPhone.xcodeproj/project.pbxproj"); - } - } - - private static void UpdateXcodeProject(BuildTarget buildTarget, string projectPath) { - PBXProject project = new PBXProject(); - project.ReadFromString(File.ReadAllText(projectPath)); - - string target = project.GetUnityFrameworkTargetGuid(); - project.AddBuildProperty(target, "OTHER_CPLUSPLUSFLAGS", "$(OTHER_CFLAGS) -fcxx-modules"); - - File.WriteAllText(projectPath, project.WriteToString()); - } -} diff --git a/Assets/Adapty/Editor/logo.png b/Assets/Adapty/Editor/logo.png deleted file mode 100644 index da33e81..0000000 Binary files a/Assets/Adapty/Editor/logo.png and /dev/null differ diff --git a/Assets/Adapty/MiniJSON.cs b/Assets/Adapty/MiniJSON.cs deleted file mode 100644 index c22127d..0000000 --- a/Assets/Adapty/MiniJSON.cs +++ /dev/null @@ -1,669 +0,0 @@ -/* - * Copyright (c) 2013 Calvin Rien - * - * Based on the JSON parser by Patrick van Bergen - * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html - * - * Simplified it so that it doesn't throw exceptions - * and can be used in Unity iPhone with maximum code stripping. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Text; -#pragma warning disable SA1649 // File name should match first type name. -#pragma warning disable CA1720 // Identifier '' contains type name - -namespace AdaptySDK -{ - // Example usage: - // - // using UnityEngine; - // using System.Collections; - // using System.Collections.Generic; - // using MiniJSON; - // - // public class MiniJSONTest : MonoBehaviour { - // void Start () { - // var jsonString = "{ \"array\": [1.44,2,3], " + - // "\"object\": {\"key1\":\"value1\", \"key2\":256}, " + - // "\"string\": \"The quick brown fox \\\"jumps\\\" over the lazy dog \", " + - // "\"unicode\": \"\\u3041 Men\u00fa sesi\u00f3n\", " + - // "\"int\": 65536, " + - // "\"float\": 3.1415926, " + - // "\"bool\": true, " + - // "\"null\": null }"; - // - // var dict = Json.Deserialize(jsonString) as Dictionary; - // - // Debug.Log("deserialized: " + dict.GetType()); - // Debug.Log("dict['array'][0]: " + ((List) dict["array"])[0]); - // Debug.Log("dict['string']: " + (string) dict["string"]); - // Debug.Log("dict['float']: " + (double) dict["float"]); // floats come out as doubles - // Debug.Log("dict['int']: " + (long) dict["int"]); // ints come out as longs - // Debug.Log("dict['unicode']: " + (string) dict["unicode"]); - // - // var str = Json.Serialize(dict); - // - // Debug.Log("serialized: " + str); - // } - // } - - /// - /// This class encodes and decodes JSON strings. - /// Spec. details, see http://www.json.org/ - /// - /// JSON uses Arrays and Objects. These correspond here to the datatypes IList and IDictionary. - /// All numbers are parsed to doubles. - /// - public static class Json - { - /// - /// Parses the string json into a value - /// - /// A JSON string. - /// An List<object>, a Dictionary<string, object>, a double, an integer,a string, null, true, or false - public static object Deserialize(string json) - { - if (json == null) - { - return null; - } - - return Parser.Parse(json); - } - - /// - /// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string - /// - /// A Dictionary<string, object> / List<object> - /// number of white space into the output JSON string for readability - /// A JSON encoded string, or null if object 'json' is not serializable - public static string Serialize(object obj, int space = 0) - { - var instance = new Serializer(space); - instance.SerializeValue(obj); - return instance.ToString(); - } - - sealed class Parser : IDisposable - { - const string WordBreak = "{}[],:\""; - - StringReader json; - - Parser(string jsonString) - { - json = new StringReader(jsonString); - } - - enum TOKEN - { - NONE, - CURLY_OPEN, - CURLY_CLOSE, - SQUARED_OPEN, - SQUARED_CLOSE, - COLON, - COMMA, - STRING, - NUMBER, - TRUE, - FALSE, - NULL, - } - - char PeekChar - { - get - { - return Convert.ToChar(json.Peek()); - } - } - - char NextChar - { - get - { - return Convert.ToChar(json.Read()); - } - } - - string NextWord - { - get - { - var word = new StringBuilder(); - - while (!IsWordBreak(PeekChar)) - { - word.Append(NextChar); - - if (json.Peek() == -1) - { - break; - } - } - - return word.ToString(); - } - } - - TOKEN NextToken - { - get - { - EatWhitespace(); - - if (json.Peek() == -1) - { - return TOKEN.NONE; - } - - switch (PeekChar) - { - case '{': - return TOKEN.CURLY_OPEN; - case '}': - json.Read(); - return TOKEN.CURLY_CLOSE; - case '[': - return TOKEN.SQUARED_OPEN; - case ']': - json.Read(); - return TOKEN.SQUARED_CLOSE; - case ',': - json.Read(); - return TOKEN.COMMA; - case '"': - return TOKEN.STRING; - case ':': - return TOKEN.COLON; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '-': - return TOKEN.NUMBER; - default: - break; - } - - switch (NextWord) - { - case "false": - return TOKEN.FALSE; - case "true": - return TOKEN.TRUE; - case "null": - return TOKEN.NULL; - default: - break; - } - - return TOKEN.NONE; - } - } - - public static bool IsWordBreak(char c) - { - return char.IsWhiteSpace(c) || WordBreak.IndexOf(c) != -1; - } - - public static object Parse(string jsonString) - { - using (var instance = new Parser(jsonString)) - { - return instance.ParseValue(); - } - } - - public void Dispose() - { - json.Dispose(); - json = null; - } - - Dictionary ParseObject() - { - var table = new Dictionary(); - - // ditch opening brace - json.Read(); - - // { - while (true) - { - switch (NextToken) - { - case TOKEN.NONE: - return null; - case TOKEN.COMMA: - continue; - case TOKEN.CURLY_CLOSE: - return table; - default: - // name - var name = ParseString(); - if (name == null) - { - return null; - } - - // : - if (NextToken != TOKEN.COLON) - { - return null; - } - // ditch the colon - json.Read(); - - // value - table[name] = ParseValue(); - break; - } - } - } - - List ParseArray() - { - var array = new List(); - - // ditch opening bracket - json.Read(); - - // [ - var parsing = true; - while (parsing) - { - var nextToken = NextToken; - - switch (nextToken) - { - case TOKEN.NONE: - return null; - case TOKEN.COMMA: - continue; - case TOKEN.SQUARED_CLOSE: - parsing = false; - break; - default: - var value = ParseByToken(nextToken); - - array.Add(value); - break; - } - } - - return array; - } - - object ParseValue() - { - var nextToken = NextToken; - return ParseByToken(nextToken); - } - - object ParseByToken(TOKEN token) - { - switch (token) - { - case TOKEN.STRING: - return ParseString(); - case TOKEN.NUMBER: - return ParseNumber(); - case TOKEN.CURLY_OPEN: - return ParseObject(); - case TOKEN.SQUARED_OPEN: - return ParseArray(); - case TOKEN.TRUE: - return true; - case TOKEN.FALSE: - return false; - case TOKEN.NULL: - return null; - default: - return null; - } - } - - string ParseString() - { - var s = new StringBuilder(); - char c; - - // ditch opening quote - json.Read(); - - var parsing = true; - while (parsing) - { - if (json.Peek() == -1) - { - break; - } - - c = NextChar; - switch (c) - { - case '"': - parsing = false; - break; - case '\\': - if (json.Peek() == -1) - { - parsing = false; - break; - } - - c = NextChar; - switch (c) - { - case '"': - case '\\': - case '/': - s.Append(c); - break; - case 'b': - s.Append('\b'); - break; - case 'f': - s.Append('\f'); - break; - case 'n': - s.Append('\n'); - break; - case 'r': - s.Append('\r'); - break; - case 't': - s.Append('\t'); - break; - case 'u': - var hex = new char[4]; - - for (int i = 0; i < 4; i++) - { - hex[i] = NextChar; - } - - s.Append((char)Convert.ToInt32(new string(hex), 16)); - break; - default: - s.Append(c); - break; - } - break; - default: - s.Append(c); - break; - } - } - - return s.ToString(); - } - - object ParseNumber() - { - var number = NextWord; - - if (number.IndexOf('.') == -1) - { - long parsedInt; - if (long.TryParse(number, out parsedInt)) - { - return parsedInt; - } - return 0; - } - - double parsedDouble; - if (double.TryParse(number, out parsedDouble)) - { - return parsedDouble; - } - return 0.0; - } - - void EatWhitespace() - { - while (char.IsWhiteSpace(PeekChar)) - { - json.Read(); - - if (json.Peek() == -1) - { - break; - } - } - } - } - - sealed class Serializer - { - readonly StringBuilder builder; - readonly int space; - - internal Serializer(int space) - { - this.space = space; - builder = new StringBuilder(); - } - - public override string ToString() - { - return builder.ToString(); - } - - public void SerializeValue(object value, int indent = 0) - { - IList asList; - IDictionary asDict; - string asStr; - - if (value == null) - { - builder.Append("null"); - } - else if ((asStr = value as string) != null) - { - SerializeString(asStr); - } - else if (value is bool) - { - builder.Append((bool)value ? "true" : "false"); - } - else if ((asList = value as IList) != null) - { - SerializeArray(asList, indent); - } - else if ((asDict = value as IDictionary) != null) - { - SerializeObject(asDict, indent); - } - else if (value is char) - { - SerializeString(new string((char)value, 1)); - } - else - { - SerializeOther(value); - } - } - - void SerializeObject(IDictionary obj, int indent) - { - builder.Append('{'); - - var first = true; - var nextIndent = indent + space; - - foreach (object e in obj.Keys) - { - if (!first) - { - builder.Append(','); - } - if (space > 0) - { - builder.Append('\n'); - builder.Append(' ', nextIndent); - } - - SerializeString(e.ToString()); - builder.Append(':'); - if (space > 0) builder.Append(' '); - - SerializeValue(obj[e], nextIndent); - - first = false; - } - - if (!first && space > 0) - { - builder.Append('\n'); - builder.Append(' ', indent); - } - builder.Append('}'); - } - - void SerializeArray(IList anArray, int indent) - { - builder.Append('['); - - var first = true; - var nextIndent = indent + space; - var count = anArray.Count; - for (var i = 0; i < count; ++i) - { - var obj = anArray[i]; - if (!first) - { - builder.Append(','); - } - if (space > 0) - { - builder.Append('\n'); - builder.Append(' ', nextIndent); - } - - SerializeValue(obj, nextIndent); - - first = false; - } - - if (!first && space > 0) - { - builder.Append('\n'); - builder.Append(' ', indent); - } - builder.Append(']'); - } - - void SerializeString(string str) - { - builder.Append('\"'); - - for (var i = 0; i < str.Length; ++i) - { - var c = str[i]; - switch (c) - { - case '"': - builder.Append("\\\""); - break; - case '\\': - builder.Append("\\\\"); - break; - case '\b': - builder.Append("\\b"); - break; - case '\f': - builder.Append("\\f"); - break; - case '\n': - builder.Append("\\n"); - break; - case '\r': - builder.Append("\\r"); - break; - case '\t': - builder.Append("\\t"); - break; - default: - var codepoint = Convert.ToInt32(c); - if ((codepoint >= 32) && (codepoint <= 126)) - { - builder.Append(c); - } - else - { - builder.Append("\\u"); - builder.Append(codepoint.ToString("x4")); - } - break; - } - } - - builder.Append('\"'); - } - - void SerializeOther(object value) - { - // NOTE: decimals lose precision during serialization. - // They always have, I'm just letting you know. - // Previously floats and doubles lost precision too. - if (value is float) - { - builder.Append(((float)value).ToString("R")); - } - else if (value is int - || value is uint - || value is long - || value is sbyte - || value is byte - || value is short - || value is ushort - || value is ulong) - { - builder.Append(value); - } - else if (value is double - || value is decimal) - { - builder.Append(Convert.ToDouble(value).ToString("R")); - } - else - { - SerializeString(value.ToString()); - } - } - } - } -} diff --git a/Assets/Adapty/Plugins/Android/unitywrapper-release.aar b/Assets/Adapty/Plugins/Android/unitywrapper-release.aar deleted file mode 100644 index caa7650..0000000 Binary files a/Assets/Adapty/Plugins/Android/unitywrapper-release.aar and /dev/null differ diff --git a/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm b/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm deleted file mode 100644 index 06ec8f9..0000000 --- a/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm +++ /dev/null @@ -1,20 +0,0 @@ -#import -#import "UnityAppController.h" -#import "AppDelegateListener.h" -@import Adapty; - - -@interface AdaptyAppController : UnityAppController -@end - -@implementation AdaptyAppController - -- (void)didReceiveRemoteNotification:(NSNotification*)notification { - [Adapty handlePushNotification:notification.userInfo completion:^(NSError * _Nullable) { - - }]; -} - -@end - -IMPL_APP_CONTROLLER_SUBCLASS(AdaptyAppController) diff --git a/Assets/Adapty/Plugins/iOS/AdaptyModels.mm b/Assets/Adapty/Plugins/iOS/AdaptyModels.mm deleted file mode 100644 index 429b740..0000000 --- a/Assets/Adapty/Plugins/iOS/AdaptyModels.mm +++ /dev/null @@ -1,506 +0,0 @@ -#import "Foundation/Foundation.h" -#import "StoreKit/StoreKit.h" - -@import Adapty; - -static NSMutableDictionary *skProductCache = [NSMutableDictionary dictionary]; - -static NSString *dateToString(NSDate *date) { - NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init]; - return [formatter stringFromDate:date]; -} - -static NSString *periodUnitToString(PeriodUnit unit){ - NSString *result = nil; - switch (unit) { - case PeriodUnitDay: - result = @"day"; - break; - case PeriodUnitWeek: - result = @"week"; - break; - case PeriodUnitMonth: - result = @"month"; - break; - case PeriodUnitYear: - result = @"year"; - break; - default: - case PeriodUnitUnknown: - result = @"unknown"; - break; - } - return result; -} - -static PeriodUnit stringToPeriodUnit(NSString *unit) { - PeriodUnit result = PeriodUnitUnknown; - if ([unit isEqualToString:@"day"]) { - return PeriodUnitDay; - } else if ([unit isEqualToString:@"week"]) { - return PeriodUnitWeek; - } else if ([unit isEqualToString:@"month"]) { - return PeriodUnitMonth; - } else if ([unit isEqualToString:@"year"]) { - return PeriodUnitYear; - } - return result; -} - -static NSString *paymentModeToString(PaymentMode mode){ - NSString *result = nil; - switch (mode) { - case PaymentModeFreeTrial: - result = @"free_trial"; - break; - case PaymentModePayAsYouGo: - result = @"pay_as_you_go"; - break; - case PaymentModePayUpFront: - result = @"pay_up_front"; - break; - default: - case PaymentModeUnknown: - result = @"unknown"; - break; - } - return result; -} - -static PaymentMode stringToPaymentMode(NSString *mode) { - PaymentMode result = PaymentModeUnknown; - if ([mode isEqualToString:@"free_trial"]) { - return PaymentModeFreeTrial; - } else if ([mode isEqualToString:@"pay_as_you_go"]) { - return PaymentModePayAsYouGo; - } else if ([mode isEqualToString:@"pay_up_front"]) { - return PaymentModePayUpFront; - } - return result; -} - -static Gender stringToGender(NSString *mode) { - Gender result = GenderOther; - if ([mode isEqualToString:@"female"]) { - return GenderFemale; - } else if ([mode isEqualToString:@"male"]) { - return GenderMale; - } else if ([mode isEqualToString:@"other"]) { - return GenderOther; - } - return result; -} - -static NSDictionary *adaptyErrorToDictionary(AdaptyError *adaptyError) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - if (adaptyError.localizedDescription) { - dictionary[@"message"] = adaptyError.localizedDescription; - } - dictionary[@"code"] = @(adaptyError.adaptyErrorCode); - return dictionary; -} - -static NSDictionary *subscriptionPeriodToDictionary(ProductSubscriptionPeriodModel *subscriptionPeriod) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"unit"] = periodUnitToString(subscriptionPeriod.unit); - dictionary[@"numberOfUnits"] = @(subscriptionPeriod.numberOfUnits); - return dictionary; -} - -static NSDictionary *discountToDictionary(ProductDiscountModel *discount) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - if (discount.identifier) { - dictionary[@"identifier"] = discount.identifier; - } - dictionary[@"price"] = [NSDecimalNumber decimalNumberWithDecimal:discount.price].stringValue; - dictionary[@"numberOfPeriods"] = @(discount.numberOfPeriods); - dictionary[@"paymentMode"] = paymentModeToString(discount.paymentMode); - if (discount.localizedPrice) { - dictionary[@"localizedPrice"] = discount.localizedPrice; - } - if (discount.localizedSubscriptionPeriod) { - dictionary[@"localizedSubscriptionPeriod"] = discount.localizedSubscriptionPeriod; - } - if (discount.localizedNumberOfPeriods) { - dictionary[@"localizedNumberOfPeriods"] = discount.localizedNumberOfPeriods; - } - dictionary[@"subscriptionPeriod"] = subscriptionPeriodToDictionary(discount.subscriptionPeriod); - return dictionary; -} - -static NSDictionary *productToDictionary(ProductModel *product) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"vendorProductId"] = product.vendorProductId; - dictionary[@"localizedTitle"] = product.localizedTitle; - dictionary[@"localizedDescription"] = product.localizedDescription; - if (product.localizedPrice) { - dictionary[@"localizedPrice"] = product.localizedPrice; - } - if (product.localizedSubscriptionPeriod) { - dictionary[@"localizedSubscriptionPeriod"] = product.localizedSubscriptionPeriod; - } - dictionary[@"price"] = [NSDecimalNumber decimalNumberWithDecimal:product.price].stringValue; - if (product.currencyCode) { - dictionary[@"currencyCode"] = product.currencyCode; - } - if (product.currencySymbol) { - dictionary[@"currencySymbol"] = product.currencySymbol; - } - if (product.regionCode) { - dictionary[@"regionCode"] = product.regionCode; - } - if (product.subscriptionPeriod) { - dictionary[@"subscriptionPeriod"] = subscriptionPeriodToDictionary(product.subscriptionPeriod); - } - if (product.subscriptionGroupIdentifier) { - dictionary[@"subscriptionGroupIdentifier"] = product.subscriptionGroupIdentifier; - } - dictionary[@"introductoryOfferEligibility"] = @(product.introductoryOfferEligibility); - dictionary[@"promotionalOfferEligibility"] = @(product.promotionalOfferEligibility); - if (product.promotionalOfferId) { - dictionary[@"promotionalOfferId"] = product.promotionalOfferId; - } - if (product.introductoryDiscount) { - dictionary[@"introductoryDiscount"] = discountToDictionary(product.introductoryDiscount); - } - - NSMutableArray *discountsArray = [[NSMutableArray alloc] init]; - for (int i = 0; i < product.discounts.count; ++i) { - if (product.discounts[i]) { - [discountsArray addObject:discountToDictionary(product.discounts[i])]; - } - } - dictionary[@"discounts"] = discountsArray; - if (product.skProduct) { - dictionary[@"skuId"] = product.skProduct.productIdentifier; - skProductCache[product.skProduct.productIdentifier] = product.skProduct; - } - return dictionary; -} - -static NSDictionary *paywallToDictionary(PaywallModel *paywall) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"developerId"] = paywall.developerId; - dictionary[@"variationId"] = paywall.variationId; - dictionary[@"revision"] = @(paywall.revision); - dictionary[@"isPromo"] = @(paywall.isPromo); - dictionary[@"customPayload"] = paywall.customPayload; - - NSMutableArray *productsArray = [[NSMutableArray alloc] init]; - for (int i = 0; i < paywall.products.count; ++i) { - if (paywall.products[i]) { - [productsArray addObject:productToDictionary(paywall.products[i])]; - } - } - dictionary[@"products"] = productsArray; - return dictionary; -} - -static NSDictionary *promoToDictionary(PromoModel *promo) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"promoType"] = promo.promoType; - dictionary[@"variationId"] = promo.variationId; - if (promo.expiresAt) { - dictionary[@"expiresAt"] = dateToString(promo.expiresAt); - } - if (promo.paywall) { - dictionary[@"paywall"] = paywallToDictionary(promo.paywall); - } - return dictionary; -} - -static NSDictionary *accessLevelInfoToDictionary(AccessLevelInfoModel *accessLevel) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"id"] = accessLevel.id; - dictionary[@"isActive"] = @(accessLevel.isActive); - dictionary[@"vendorProductId"] = accessLevel.vendorProductId; - if (accessLevel.vendorTransactionId) { - dictionary[@"vendorTransactionId"] = accessLevel.vendorTransactionId; - } - if (accessLevel.vendorOriginalTransactionId) { - dictionary[@"vendorOriginalTransactionId"] = accessLevel.vendorOriginalTransactionId; - } - dictionary[@"store"] = accessLevel.store; - if (accessLevel.activatedAt) { - dictionary[@"activatedAt"] = dateToString(accessLevel.activatedAt); - } - if (accessLevel.startsAt) { - dictionary[@"startsAt"] = dateToString(accessLevel.startsAt); - } - if (accessLevel.renewedAt) { - dictionary[@"renewedAt"] = dateToString(accessLevel.renewedAt); - } - if (accessLevel.expiresAt) { - dictionary[@"expiresAt"] = dateToString(accessLevel.expiresAt); - } - dictionary[@"isLifetime"] = @(accessLevel.isLifetime); - dictionary[@"willRenew"] = @(accessLevel.willRenew); - dictionary[@"isInGracePeriod"] = @(accessLevel.isInGracePeriod); - if (accessLevel.unsubscribedAt) { - dictionary[@"unsubscribedAt"] = dateToString(accessLevel.unsubscribedAt); - } - if (accessLevel.billingIssueDetectedAt) { - dictionary[@"billingIssueDetectedAt"] = dateToString(accessLevel.billingIssueDetectedAt); - } - if (accessLevel.cancellationReason) { - dictionary[@"cancellationReason"] = accessLevel.cancellationReason; - } - dictionary[@"isRefund"] = @(accessLevel.isRefund); - if (accessLevel.activeIntroductoryOfferType) { - dictionary[@"activeIntroductoryOfferType"] = accessLevel.activeIntroductoryOfferType; - } - if (accessLevel.activePromotionalOfferType) { - dictionary[@"activePromotionalOfferType"] = accessLevel.activePromotionalOfferType; - } - return dictionary; -} - -static NSDictionary *subscriptionInfoToDictionary(SubscriptionInfoModel *subscription) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"id"] = @(subscription.isActive); - dictionary[@"isActive"] = @(subscription.isActive); - dictionary[@"vendorProductId"] = subscription.vendorProductId; - if (subscription.vendorTransactionId) { - dictionary[@"vendorTransactionId"] = subscription.vendorTransactionId; - } - if (subscription.vendorOriginalTransactionId) { - dictionary[@"vendorOriginalTransactionId"] = subscription.vendorOriginalTransactionId; - } - dictionary[@"store"] = subscription.store; - if (subscription.activatedAt) { - dictionary[@"activatedAt"] = dateToString(subscription.activatedAt); - } - if (subscription.startsAt) { - dictionary[@"startsAt"] = dateToString(subscription.startsAt); - } - if (subscription.renewedAt) { - dictionary[@"renewedAt"] = dateToString(subscription.renewedAt); - } - if (subscription.expiresAt) { - dictionary[@"expiresAt"] = dateToString(subscription.expiresAt); - } - dictionary[@"isLifetime"] = @(subscription.isLifetime); - dictionary[@"willRenew"] = @(subscription.willRenew); - dictionary[@"isInGracePeriod"] = @(subscription.isInGracePeriod); - if (subscription.unsubscribedAt) { - dictionary[@"unsubscribedAt"] = dateToString(subscription.unsubscribedAt); - } - if (subscription.billingIssueDetectedAt) { - dictionary[@"billingIssueDetectedAt"] = dateToString(subscription.billingIssueDetectedAt); - } - if (subscription.cancellationReason) { - dictionary[@"cancellationReason"] = subscription.cancellationReason; - } - dictionary[@"isRefund"] = @(subscription.isRefund); - if (subscription.activeIntroductoryOfferType) { - dictionary[@"activeIntroductoryOfferType"] = subscription.activeIntroductoryOfferType; - } - if (subscription.activePromotionalOfferType) { - dictionary[@"activePromotionalOfferType"] = subscription.activePromotionalOfferType; - } - dictionary[@"isSandbox"] = @(subscription.isSandbox); - return dictionary; -} - -static NSDictionary *nonSubscriptionInfoToDictionary(NonSubscriptionInfoModel *nonSubscription) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"purchaseId"] = nonSubscription.purchaseId; - dictionary[@"vendorProductId"] = nonSubscription.vendorProductId; - if (nonSubscription.vendorTransactionId) { - dictionary[@"vendorTransactionId"] = nonSubscription.vendorTransactionId; - } - dictionary[@"store"] = nonSubscription.store; - if (nonSubscription.purchasedAt) { - dictionary[@"purchasedAt"] = dateToString(nonSubscription.purchasedAt); - } - dictionary[@"isRefund"] = @(nonSubscription.isRefund); - dictionary[@"isOneTime"] = @(nonSubscription.isOneTime); - dictionary[@"isSandbox"] = @(nonSubscription.isSandbox); - return dictionary; -} - -static NSDictionary *purchaserInfoToDictionary(PurchaserInfoModel *purchaser) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - if (purchaser.customerUserId) { - dictionary[@"customerUserId"] = purchaser.customerUserId; - } - - NSMutableDictionary *accessLevels = [NSMutableDictionary dictionary]; - [purchaser.accessLevels enumerateKeysAndObjectsUsingBlock:^(NSString *key, AccessLevelInfoModel *accessLevel, BOOL *stop) { - accessLevels[key] = accessLevelInfoToDictionary(accessLevel); - }]; - dictionary[@"accessLevels"] = accessLevels; - - NSMutableDictionary *subscriptions = [NSMutableDictionary dictionary]; - [purchaser.subscriptions enumerateKeysAndObjectsUsingBlock:^(NSString *key, SubscriptionInfoModel *subscription, BOOL *stop) { - subscriptions[key] = subscriptionInfoToDictionary(subscription); - }]; - dictionary[@"subscriptions"] = subscriptions; - - NSMutableDictionary *nonSubscriptions = [NSMutableDictionary dictionary]; - [purchaser.nonSubscriptions enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSArray *nonSubscriptionsArray, BOOL *stop) { - NSMutableArray *array = [[NSMutableArray alloc] init]; - for (int i = 0; i < nonSubscriptionsArray.count; ++i) { - if (nonSubscriptionsArray[i]) { - [array addObject:nonSubscriptionInfoToDictionary(nonSubscriptionsArray[i])]; - } - } - nonSubscriptions[key] = array; - }]; - dictionary[@"nonSubscriptions"] = nonSubscriptions; - return dictionary; -} - -static ProductSubscriptionPeriodModel *dictionaryToSubscriptionPeriod(NSDictionary *dictionary) { - ProductSubscriptionPeriodModel *subscriptionPeriod = [ProductSubscriptionPeriodModel alloc]; - if (dictionary[@"unit"]) { - subscriptionPeriod.unit = stringToPeriodUnit(dictionary[@"unit"]); - } - if (dictionary[@"numberOfUnits"]) { - subscriptionPeriod.numberOfUnits = ((NSNumber *)dictionary[@"numberOfUnits"]).intValue; - } - return subscriptionPeriod; -} - -static ProductDiscountModel *dictionaryToDiscount(NSDictionary *dictionary) { - ProductDiscountModel *discount = [ProductDiscountModel alloc]; - if (dictionary[@"identifier"]) { - discount.identifier = dictionary[@"identifier"]; - } - if (dictionary[@"price"]) { - discount.price = [NSDecimalNumber decimalNumberWithString:dictionary[@"price"]].decimalValue; - } - if (dictionary[@"numberOfPeriods"]) { - discount.numberOfPeriods = ((NSNumber *)dictionary[@"numberOfPeriods"]).intValue; - } - if (dictionary[@"paymentMode"]) { - discount.paymentMode = stringToPaymentMode(dictionary[@"paymentMode"]); - } - if (dictionary[@"localizedPrice"]) { - discount.localizedPrice = dictionary[@"localizedPrice"]; - } - if (dictionary[@"localizedSubscriptionPeriod"]) { - discount.localizedSubscriptionPeriod = dictionary[@"localizedSubscriptionPeriod"]; - } - if (dictionary[@"localizedNumberOfPeriods"]) { - discount.localizedNumberOfPeriods = dictionary[@"localizedNumberOfPeriods"]; - } - if (dictionary[@"subscriptionPeriod"]) { - discount.subscriptionPeriod = dictionaryToSubscriptionPeriod((NSDictionary *)dictionary[@"subscriptionPeriod"]); - } - return discount; -} - -static ProductModel *dictionaryToProduct(NSDictionary *dictionary) { - ProductModel *product = [ProductModel alloc]; - if (dictionary[@"vendorProductId"]) { - product.vendorProductId = dictionary[@"vendorProductId"]; - } - if (dictionary[@"localizedTitle"]) { - product.localizedTitle = dictionary[@"localizedTitle"]; - } - if (dictionary[@"localizedDescription"]) { - product.localizedDescription = dictionary[@"localizedDescription"]; - } - if (dictionary[@"localizedPrice"]) { - product.localizedPrice = dictionary[@"localizedPrice"]; - } - if (dictionary[@"localizedSubscriptionPeriod"]) { - product.localizedSubscriptionPeriod = dictionary[@"localizedSubscriptionPeriod"]; - } - if (dictionary[@"price"]) { - product.price = [NSDecimalNumber decimalNumberWithString:dictionary[@"price"]].decimalValue; - } - if (dictionary[@"currencyCode"]) { - product.currencyCode = dictionary[@"currencyCode"]; - } - if (dictionary[@"currencySymbol"]) { - product.currencySymbol = dictionary[@"currencySymbol"]; - } - if (dictionary[@"regionCode"]) { - product.regionCode = dictionary[@"regionCode"]; - } - if (dictionary[@"subscriptionPeriod"]) { - product.subscriptionPeriod = dictionaryToSubscriptionPeriod((NSDictionary *)dictionary[@"subscriptionPeriod"]); - } - if (dictionary[@"subscriptionGroupIdentifier"]) { - product.subscriptionGroupIdentifier = dictionary[@"subscriptionGroupIdentifier"]; - } - if (dictionary[@"introductoryOfferEligibility"]) { - product.introductoryOfferEligibility = ((NSNumber*)dictionary[@"introductoryOfferEligibility"]).boolValue; - } - if (dictionary[@"promotionalOfferEligibility"]) { - product.promotionalOfferEligibility = ((NSNumber*)dictionary[@"promotionalOfferEligibility"]).boolValue; - } - if (dictionary[@"promotionalOfferId"]) { - product.promotionalOfferId = dictionary[@"promotionalOfferId"]; - } - if (dictionary[@"introductoryDiscount"]) { - product.introductoryDiscount = dictionaryToDiscount((NSDictionary *)dictionary[@"introductoryDiscount"]); - } - - if (dictionary[@"discounts"]) { - NSArray *discounts = dictionary[@"discounts"]; - NSMutableArray *discountsArray = [[NSMutableArray alloc] init]; - for (int i = 0; i < discounts.count; ++i) { - if (discounts[i]) { - [discountsArray addObject:dictionaryToDiscount(discounts[i])]; - } - } - product.discounts = discountsArray; - } - if (dictionary[@"skuId"] && skProductCache[dictionary[@"skuId"]]) { - product.skProduct = skProductCache[dictionary[@"skuId"]]; - } - return product; -} - -static ProfileParameterBuilder *dictionaryToProfileParameterBuilder(NSDictionary *dictionary) { - ProfileParameterBuilder *params = [[ProfileParameterBuilder alloc] init]; - if (dictionary[@"email"]) { - params = [params withEmail:dictionary[@"email"]]; - } - if (dictionary[@"phoneNumber"]) { - params = [params withPhoneNumber:dictionary[@"phoneNumber"]]; - } - if (dictionary[@"facebookUserId"]) { - params = [params withFacebookUserId:dictionary[@"facebookUserId"]]; - } - if (dictionary[@"amplitudeUserId"]) { - params = [params withAmplitudeUserId:dictionary[@"amplitudeUserId"]]; - } - if (dictionary[@"amplitudeDeviceId"]) { - params = [params withAmplitudeDeviceId:dictionary[@"amplitudeDeviceId"]]; - } - if (dictionary[@"mixpanelUserId"]) { - params = [params withMixpanelUserId:dictionary[@"mixpanelUserId"]]; - } - if (dictionary[@"appmetricaProfileId"]) { - params = [params withAppmetricaProfileId:dictionary[@"appmetricaProfileId"]]; - } - if (dictionary[@"appmetricaDeviceId"]) { - params = [params withAppmetricaDeviceId:dictionary[@"appmetricaDeviceId"]]; - } - if (dictionary[@"firstName"]) { - params = [params withFirstName:dictionary[@"firstName"]]; - } - if (dictionary[@"lastName"]) { - params = [params withLastName:dictionary[@"lastName"]]; - } - if (dictionary[@"gender"]) { - params = [params withGender:stringToGender(dictionary[@"gender"])]; - } - if (dictionary[@"birthday"]) { - NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; - [dateFormat setDateFormat:@"yyyy-MM-dd"]; - NSDate *date = [dateFormat dateFromString:dictionary[@"birthday"]]; - params = [params withBirthday:date]; - } - if (dictionary[@"appTrackingTransparencyStatus"]) { - params = [params withAppTrackingTransparencyStatus:[dictionary[@"appTrackingTransparencyStatus"] unsignedIntegerValue]]; - } - if (dictionary[@"customAttributes"]) { - params = [params withCustomAttributes:dictionary[@"customAttributes"]]; - } - return params; -} diff --git a/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm b/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm deleted file mode 100644 index aafb1fc..0000000 --- a/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm +++ /dev/null @@ -1,27 +0,0 @@ -#import "Foundation/Foundation.h" - -#import "AdaptyModels.mm" - -static NSString *cstringToString(const char *str) { - return str ? [NSString stringWithUTF8String:str] : nil; -} - -static NSDictionary *jsonToDictionary(const char *jsonString) { - if (jsonString) { - NSData *jsonData = [[NSData alloc] initWithBytes:jsonString length:strlen(jsonString)]; - NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil]; - return dictionary; - } - - return nil; -} - -static NSString *dictionaryToJson(NSDictionary* dictionary) { - if (dictionary) { - NSError *err; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&err]; - return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - } - - return nil; -} diff --git a/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm b/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm deleted file mode 100644 index d99a670..0000000 --- a/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm +++ /dev/null @@ -1,358 +0,0 @@ -#import "AdaptyUnityUtils.mm" - -static const NSString *tag = @"AdaptyiOSWrapper"; - -static NSString *Callback_identify = @"OnIdentify"; -static NSString *Callback_logout = @"OnLogout"; -static NSString *Callback_getPaywalls = @"OnGetPaywalls"; -static NSString *Callback_makePurchase = @"OnMakePurchase"; -static NSString *Callback_restorePurchases = @"OnRestorePurchases"; -static NSString *Callback_validateReceipt = @"OnValidateAppleReceipt"; -static NSString *Callback_getPurchaserInfo = @"OnGetPurchaserInfo"; -static NSString *Callback_setOnPurchaserInfoUpdatedListener = @"OnPurchaserInfoUpdated"; -static NSString *Callback_updateAttribution = @"OnUpdateAttribution"; -static NSString *Callback_updateProfile = @"OnUpdateProfile"; -static NSString *Callback_getPromo = @"OnGetPromo"; -static NSString *Callback_setOnPromoReceivedListener = @"OnPromoReceived"; -static NSString *Callback_makeDeferredPurchaseListener = @"OnMakeDeferredPurchase"; - -@interface Callback : NSObject -@property(retain, nonatomic) NSString *objectName, *method, *message; -@end - -@implementation Callback -@end - -static NSMutableArray *callbacks = [NSMutableArray array]; - -static void sendMessage(NSString *objectName, NSString *method, NSString *message) { - if (objectName) { - Callback *callback = [Callback alloc]; - callback.objectName = objectName; - callback.method = method; - callback.message = message; - [callbacks addObject:callback]; - } -} - -@interface AdaptyDelegateWrapper : NSObject -@property(copy, nonatomic) NSString *promoReceivedListener, *purchaserInfoUpdatedListener, *makeDeferredPurchaseListener; -@end - -@implementation AdaptyDelegateWrapper --(void)didReceivePromo:(PromoModel *)promo { - if (self.promoReceivedListener) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (promo) { - message[@"promo"] = promoToDictionary(promo); - } - sendMessage(self.promoReceivedListener, Callback_setOnPromoReceivedListener, dictionaryToJson(message)); - } -} --(void)didReceiveUpdatedPurchaserInfo:(PurchaserInfoModel *)purchaserInfo { - if (self.purchaserInfoUpdatedListener){ - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - sendMessage(self.purchaserInfoUpdatedListener, Callback_setOnPurchaserInfoUpdatedListener, dictionaryToJson(message)); - } -} --(void)paymentQueueWithShouldAddStorePaymentFor:(ProductModel *)product defermentCompletion:(void (^)(void (^ _Nullable)(PurchaserInfoModel * _Nullable, NSString * _Nullable, NSDictionary * _Nullable, ProductModel * _Nullable, AdaptyError * _Nullable)))makeDeferredPurchase { - makeDeferredPurchase(^(PurchaserInfoModel * _Nullable purchaserInfo, NSString * _Nullable receipt, NSDictionary * _Nullable appleValidationResult, ProductModel * _Nullable _product, AdaptyError * _Nullable error) { - if (self.makeDeferredPurchaseListener){ - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (receipt) { - message[@"receipt"] = receipt; - } - if (appleValidationResult) { - message[@"validationResult"] = appleValidationResult; - } - if (_product) { - message[@"product"] = productToDictionary(_product); - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(self.makeDeferredPurchaseListener, Callback_makeDeferredPurchaseListener, dictionaryToJson(message)); - } - }); -} -@end - -static AdaptyDelegateWrapper *adaptyDelegateWrapper; - -extern "C" bool AdaptyUnity_hasCallback() { - return callbacks.count > 0; -} - -extern "C" const char *AdaptyUnity_getCallbackObjectName() { - Callback *callback = (Callback *)callbacks.firstObject; - if (callback) { - return strdup(callback.objectName.UTF8String); - } - return nil; -} - -extern "C" const char *AdaptyUnity_getCallbackMethod() { - Callback *callback = (Callback *)callbacks.firstObject; - if (callback) { - return strdup(callback.method.UTF8String); - } - return nil; -} - -extern "C" const char *AdaptyUnity_getCallbackMessageAndPop() { - Callback *callback = (Callback *)callbacks.firstObject; - if (callback) { - [callbacks removeObjectAtIndex:0]; - return strdup(callback.message.UTF8String); - } - return nil; -} - -extern "C" void AdaptyUnity_setLogLevel(int logLevel) { - NSLog(@"%@ setLogLevel()", tag); - switch (logLevel) { - case 0: - [Adapty setLogLevel:AdaptyLogLevelNone]; - break; - - case 1: - [Adapty setLogLevel:AdaptyLogLevelErrors]; - break; - - case 2: - [Adapty setLogLevel:AdaptyLogLevelVerbose]; - break; - } -} - -extern "C" void AdaptyUnity_activate(const char *key, bool observeMode) { - NSLog(@"%@ activate()", tag); - [Adapty activate:cstringToString(key) observerMode:observeMode]; - if (adaptyDelegateWrapper == nil) { - adaptyDelegateWrapper = [[AdaptyDelegateWrapper alloc] init]; - [Adapty setDelegate:adaptyDelegateWrapper]; - } -} - -extern "C" void AdaptyUnity_identify(const char *customerUserId, const char *objectName) { - NSLog(@"%@ identify()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty identify:cstringToString(customerUserId) completion:^(AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_identify, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_logout(const char *objectName) { - NSLog(@"%@ logout()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty logout:^(AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_logout, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_getPaywalls(const char *objectName) { - NSLog(@"%@ getPaywalls()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty getPaywalls:^(NSArray * _Nullable paywalls, NSArray * _Nullable products, enum DataState state, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (paywalls) { - NSMutableArray *array = [[NSMutableArray alloc] init]; - for (int i = 0; i < paywalls.count; ++i) { - if (paywalls[i]) { - [array addObject:paywallToDictionary(paywalls[i])]; - } - } - message[@"paywalls"] = array; - } - if (products) { - NSMutableArray *array = [[NSMutableArray alloc] init]; - for (int i = 0; i < products.count; ++i) { - if (products[i]) { - [array addObject:productToDictionary(products[i])]; - } - } - message[@"products"] = array; - } - if (state == DataStateCached) { - message[@"state"] = @"cached"; - } else if (state == DataStateSynced) { - message[@"state"] = @"synced"; - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_getPaywalls, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_makePurchase(const char *productJson, const char *offerId, const char *objectName) { - NSLog(@"%@ makePurchase()", tag); - NSString *objectNameString = cstringToString(objectName); - ProductModel *product = dictionaryToProduct(jsonToDictionary(productJson)); - [Adapty makePurchaseWithProduct:product offerId:cstringToString(offerId) completion:^(PurchaserInfoModel * _Nullable purchaserInfo, NSString * _Nullable receipt, NSDictionary * _Nullable appleValidationResult, ProductModel * _Nullable _product, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (receipt) { - message[@"receipt"] = receipt; - } - if (appleValidationResult) { - message[@"validationResult"] = appleValidationResult; - } - if (_product) { - message[@"product"] = productToDictionary(_product); - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_makePurchase, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_restorePurchases(const char *objectName) { - NSLog(@"%@ restorePurchases()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty restorePurchasesWithCompletion:^(PurchaserInfoModel * _Nullable purchaserInfo, NSString * _Nullable receipt, NSDictionary * _Nullable appleValidationResult, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (receipt) { - message[@"receipt"] = receipt; - } - if (appleValidationResult) { - message[@"validationResults"] = [NSArray arrayWithObject:appleValidationResult]; - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_restorePurchases, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_validateReceipt(const char *receipt, const char *objectName) { - NSLog(@"%@ validateReceipt()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty validateReceipt:cstringToString(receipt) completion:^(PurchaserInfoModel * _Nullable purchaserInfo, NSDictionary * _Nullable appleValidationResult, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (appleValidationResult) { - message[@"validationResult"] = appleValidationResult; - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_validateReceipt, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_getPurchaserInfo(const char *objectName) { - NSLog(@"%@ getPurchaserInfo()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty getPurchaserInfo:^(PurchaserInfoModel * _Nullable purchaserInfo, DataState state, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (purchaserInfo) { - message[@"purchaserInfo"] = purchaserInfoToDictionary(purchaserInfo); - } - if (state == DataStateCached) { - message[@"state"] = @"cached"; - } else if (state == DataStateSynced) { - message[@"state"] = @"synced"; - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_getPurchaserInfo, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_setOnPurchaserInfoUpdatedListener(const char *objectName) { - NSLog(@"%@ setOnPurchaserInfoUpdatedListener()", tag); - if (adaptyDelegateWrapper) { - adaptyDelegateWrapper.purchaserInfoUpdatedListener = cstringToString(objectName); - } -} - -extern "C" void AdaptyUnity_updateAttribution(const char *attributionJson, int sourceInt, const char *networkUserId, const char *objectName) { - NSLog(@"%@ updateAttribution()", tag); - NSString *objectNameString = cstringToString(objectName); - NSDictionary *attribution = jsonToDictionary(attributionJson); - AttributionNetwork attributionNetwork; - switch (sourceInt) { - default: - case 0: - attributionNetwork = AttributionNetworkAppsflyer; - break; - - case 1: - attributionNetwork = AttributionNetworkAdjust; - break; - - case 2: - attributionNetwork = AttributionNetworkBranch; - break; - - case 3: - attributionNetwork = AttributionNetworkCustom; - break; - } - [Adapty updateAttribution:attribution source:attributionNetwork networkUserId:cstringToString(networkUserId) completion:^(AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_updateAttribution, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_updateProfile(const char *paramsJson, const char *objectName) { - NSLog(@"%@ updateProfile()", tag); - NSString *objectNameString = cstringToString(objectName); - ProfileParameterBuilder *params = dictionaryToProfileParameterBuilder(jsonToDictionary(paramsJson)); - [Adapty updateProfileWithParams:params completion:^(AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_updateProfile, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_getPromo(const char *objectName) { - NSLog(@"%@ getPromo()", tag); - NSString *objectNameString = cstringToString(objectName); - [Adapty getPromo:^(PromoModel * _Nullable promo, AdaptyError * _Nullable error) { - NSMutableDictionary *message = [NSMutableDictionary dictionary]; - if (promo) { - message[@"promo"] = promoToDictionary(promo); - } - if (error) { - message[@"error"] = adaptyErrorToDictionary(error); - } - sendMessage(objectNameString, Callback_getPromo, dictionaryToJson(message)); - }]; -} - -extern "C" void AdaptyUnity_setOnPromoReceivedListener(const char *objectName) { - NSLog(@"%@ setOnPromoReceivedListener()", tag); - if (adaptyDelegateWrapper) { - adaptyDelegateWrapper.promoReceivedListener = cstringToString(objectName); - } -} diff --git a/Assets/Adapty/Plugins/iOS/EnableSwift.swift b/Assets/Adapty/Plugins/iOS/EnableSwift.swift deleted file mode 100644 index fecc4ab..0000000 --- a/Assets/Adapty/Plugins/iOS/EnableSwift.swift +++ /dev/null @@ -1 +0,0 @@ -import Foundation diff --git a/AdaptyUnityProject/Assets/Adapty/Docs.meta b/Assets/AdaptySDK.meta similarity index 77% rename from AdaptyUnityProject/Assets/Adapty/Docs.meta rename to Assets/AdaptySDK.meta index cc27569..de78c4f 100644 --- a/AdaptyUnityProject/Assets/Adapty/Docs.meta +++ b/Assets/AdaptySDK.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 67e9f569620134ae8afba4f48deac719 +guid: 297a6f5be7aa44558b4ced2701a21b1d folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/AdaptySDK/Adapty.cs b/Assets/AdaptySDK/Adapty.cs new file mode 100644 index 0000000..ab63641 --- /dev/null +++ b/Assets/AdaptySDK/Adapty.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using AdaptySDK.iOS; +using AdaptySDK.Android; +using AdaptySDK.Noop; + +#if UNITY_IOS && !UNITY_EDITOR +using _Adapty = AdaptySDK.iOS.AdaptyIOS; +#elif UNITY_ANDROID && !UNITY_EDITOR +using _Adapty = AdaptySDK.Android.AdaptyAndroid; +#else +using _Adapty = AdaptySDK.Noop.AdaptyNoop; +#endif + +namespace AdaptySDK { + public static partial class Adapty { + public static readonly string pluginVersion = "1.1.0"; + + public static LogLevel GetLogLevel() => _Adapty.GetLogLevel(); + public static void SetLogLevel(LogLevel level) => _Adapty.SetLogLevel(level); + + //public static void Activate(string key, bool observeMode, string customerUserId) => _Adapty.Activate(key, observeMode, customerUserId); + //public static void Activate(string key, bool observeMode) => Activate(key, observeMode, null); + //public static void Activate(string key, string customerUserId) => Activate(key, false, customerUserId); + //public static void Activate(string key) => Activate(key, false, null); + + public static void Identify(string customerUserId, Action completionHandler) => _Adapty.Identify(customerUserId, completionHandler); + public static void Identify(string customerUserId) => Identify(customerUserId, null); + + public static void Logout(Action completionHandler) => _Adapty.Logout(completionHandler); + public static void Logout() => Logout(null); + + public static void GetPaywalls(bool forceUpdate, Action completionHandler) => _Adapty.GetPaywalls(forceUpdate, completionHandler); + public static void GetPaywalls(Action completionHandler) => GetPaywalls(false, completionHandler); + + public static void GetPurchaserInfo(bool forceUpdate, Action completionHandler) => _Adapty.GetPurchaserInfo(forceUpdate, completionHandler); + public static void GetPurchaserInfo(Action completionHandler) => GetPurchaserInfo(false, completionHandler); + + public static void RestorePurchases(Action completionHandler) => _Adapty.RestorePurchases(completionHandler); + + public static void MakePurchase(string productId, string variationId, string offerId, AndroidSubscriptionUpdate subscriptionUpdate, Action completionHandler) + { + #if UNITY_IOS + AdaptyIOS.MakePurchase(productId, variationId, offerId, completionHandler); + #elif UNITY_ANDROID + AdaptyAndroid.MakePurchase(productId, variationId, subscriptionUpdate, completionHandler); + #else + AdaptyNoop.MakePurchase(productId, variationId, completionHandler); + #endif + } + public static void MakePurchase(string productId, string variationId, string offerId, Action completionHandler) => MakePurchase(productId, variationId, offerId, null, completionHandler); + public static void MakePurchase(string productId, string variationId, AndroidSubscriptionUpdate subscriptionUpdate, Action completionHandler) => MakePurchase(productId, variationId, null, subscriptionUpdate, completionHandler); + public static void MakePurchase(string productId, string variationId, Action completionHandler) => MakePurchase(productId, variationId, null, null, completionHandler); + + public static void LogShowPaywall(Paywall paywall, Action completionHandler) => _Adapty.LogShowPaywall(paywall, completionHandler); + public static void LogShowPaywall(Paywall paywall) => LogShowPaywall(paywall, null); + + public static void SetFallbackPaywalls(string paywalls, Action completionHandler) => _Adapty.SetFallbackPaywalls(paywalls, completionHandler); + public static void SetFallbackPaywalls(string paywalls) => SetFallbackPaywalls(paywalls, null); + + public static void GetPromo(Action completionHandler) => _Adapty.GetPromo(completionHandler); + + public static void UpdateProfile(ProfileParameterBuilder param, Action completionHandler) => _Adapty.UpdateProfile(param, completionHandler); + public static void UpdateProfile(ProfileParameterBuilder param) => UpdateProfile(param, null); + + public static void UpdateAttribution(string jsonstring, AttributionNetwork source, string networkUserId, Action completionHandler) => _Adapty.UpdateAttribution(jsonstring, source, networkUserId, completionHandler); + public static void UpdateAttribution(string jsonstring, AttributionNetwork source, Action completionHandler) => UpdateAttribution(jsonstring, source, null, completionHandler); + public static void UpdateAttribution(string jsonstring, AttributionNetwork source, string networkUserId) => UpdateAttribution(jsonstring, source, networkUserId, null); + public static void UpdateAttribution(string jsonstring, AttributionNetwork source) => UpdateAttribution(jsonstring, source, null, null); + public static void UpdateAttribution(Dictionary attribution, AttributionNetwork source, string networkUserId, Action completionHandler) => _Adapty.UpdateAttribution(attribution, source, networkUserId, completionHandler); + public static void UpdateAttribution(Dictionary attribution, AttributionNetwork source, Action completionHandler) => UpdateAttribution(attribution, source, null, completionHandler); + public static void UpdateAttribution(Dictionary attribution, AttributionNetwork source, string networkUserId) => UpdateAttribution(attribution, source, networkUserId, null); + public static void UpdateAttribution(Dictionary attribution, AttributionNetwork source) => UpdateAttribution(attribution, source, null, null); + + public static void SetExternalAnalyticsEnabled(bool enabled, Action completionHandler) => _Adapty.SetExternalAnalyticsEnabled(enabled, completionHandler); + public static void SetExternalAnalyticsEnabled(bool enabled) => SetExternalAnalyticsEnabled(enabled, null); + + public static void SetVariationForTransaction(string variationId, string transactionId, Action completionHandler) => _Adapty.SetVariationForTransaction(variationId, transactionId, completionHandler); + public static void SetVariationForTransaction(string variationId, string transactionId) => SetVariationForTransaction(variationId, transactionId, null); + + +#if UNITY_IOS + public static void SetIdfaCollectionDisabled(bool disabled) => AdaptyIOS.SetIdfaCollectionDisabled(disabled); + + public static void MakeDeferredPurchase(string productId, Action completionHandler) => AdaptyIOS.MakeDeferredPurchase(productId, completionHandler); + + public static string GetApnsToken() => AdaptyIOS.GetApnsToken(); + public static void SetApnsToken(string apnsToken) => AdaptyIOS.SetApnsToken(apnsToken); + + public static void HandlePushNotification(Dictionary userInfo, Action completionHandler) => AdaptyIOS.HandlePushNotification(userInfo, completionHandler); + public static void HandlePushNotification(Dictionary userInfo) => HandlePushNotification(userInfo, null); + public static void HandlePushNotification(string userInfo, Action completionHandler) => AdaptyIOS.HandlePushNotification(userInfo, completionHandler); + public static void HandlePushNotification(string userInfo) => HandlePushNotification(userInfo, null); + + public static void PresentCodeRedemptionSheet() => AdaptyIOS.PresentCodeRedemptionSheet(); +#elif UNITY_ANDROID + public static void NewPushToken(string pushToken) => AdaptyAndroid.NewPushToken(pushToken); + + public static void PushReceived(string pushMessageJson) => AdaptyAndroid.PushReceived(pushMessageJson); +#endif + } +} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/Adapty.cs.meta b/Assets/AdaptySDK/Adapty.cs.meta similarity index 83% rename from AdaptyUnityProject/Assets/Adapty/Adapty.cs.meta rename to Assets/AdaptySDK/Adapty.cs.meta index 99f327c..00ab33e 100644 --- a/AdaptyUnityProject/Assets/Adapty/Adapty.cs.meta +++ b/Assets/AdaptySDK/Adapty.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ad3509e2a6a6548968443a3c0b432650 +guid: 94ec09b8f5e274c8984f2875e66a9005 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/AdaptyEventListener.cs b/Assets/AdaptySDK/AdaptyEventListener.cs new file mode 100644 index 0000000..ecc126a --- /dev/null +++ b/Assets/AdaptySDK/AdaptyEventListener.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using AdaptySDK.SimpleJSON; + +#if UNITY_IOS && !UNITY_EDITOR +using _AdaptyCallbackAction = AdaptySDK.iOS.AdaptyIOSCallbackAction; +#elif UNITY_ANDROID && !UNITY_EDITOR +using _AdaptyCallbackAction = AdaptySDK.Android.AdaptyAndroidCallbackAction; +#else +using _AdaptyCallbackAction = AdaptySDK.Noop.AdaptyNoopCallbackAction; +#endif + +namespace AdaptySDK +{ + public interface AdaptyEventListener + { + void OnReceiveUpdatedPurchaserInfo(Adapty.PurchaserInfo purchaserInfo); + void OnReceivePromo(Adapty.Promo promo); + void OnDeferredPurchasesProduct(Adapty.Product product); + void OnReceivePaywallsForConfig(Adapty.Paywall[] paywalls); + } + + public static partial class Adapty + { + private static AdaptyEventListener m_Listener; + + public static void SetEventListener(AdaptyEventListener listener) + { + _AdaptyCallbackAction.InitializeOnce(); + m_Listener = listener; + } + + internal static void OnMessage(string type, string json) + { + if (string.IsNullOrEmpty(json) || m_Listener == null) return; + var response = JSON.Parse(json); + if (response == null || response.IsNull) return; + switch (type) + { + case "purchaser_info_update": + var info = Adapty.PurchaserInfoFromJSON(response); + if (info == null) return; + m_Listener.OnReceiveUpdatedPurchaserInfo(info); + return; + case "promo_received": + var promo = Adapty.PromoFromJSON(response); + if (promo == null) return; + m_Listener.OnReceivePromo(promo); + return; + case "deferred_purchase": + var product = Adapty.ProductFromJSON(response); + if (product == null) return; + m_Listener.OnDeferredPurchasesProduct(product); + return; + case "remote_config_update": + if (!response.IsArray) return; + var list = new List(); + foreach (var node in response.Children) + { + var value = Adapty.PaywallFromJSON(node); + if (value != null) + { + list.Add(value); + } + } + m_Listener.OnReceivePaywallsForConfig(list.ToArray()); + return; + } + } + } +} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyModels.cs.meta b/Assets/AdaptySDK/AdaptyEventListener.cs.meta similarity index 83% rename from AdaptyUnityProject/Assets/Adapty/AdaptyModels.cs.meta rename to Assets/AdaptySDK/AdaptyEventListener.cs.meta index 0eaa922..d0afa17 100644 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyModels.cs.meta +++ b/Assets/AdaptySDK/AdaptyEventListener.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bbd20b9ed77a747198782b69ebb71067 +guid: 167e8ac101fa546bfb84f6dc34a38816 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor.meta b/Assets/AdaptySDK/Editor.meta similarity index 77% rename from AdaptyUnityProject/Assets/ExternalDependencyManager/Editor.meta rename to Assets/AdaptySDK/Editor.meta index 811db6e..79363b2 100644 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor.meta +++ b/Assets/AdaptySDK/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b42aa8acaabecbf943da2892de5e6aeb +guid: 0bfda373d49304eb98cfe4af8095a847 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Adapty/Editor/AdaptyDependencies.xml b/Assets/AdaptySDK/Editor/AdaptySDKDependencies.xml similarity index 81% rename from Assets/Adapty/Editor/AdaptyDependencies.xml rename to Assets/AdaptySDK/Editor/AdaptySDKDependencies.xml index b9bdbb3..ede1cac 100644 --- a/Assets/Adapty/Editor/AdaptyDependencies.xml +++ b/Assets/AdaptySDK/Editor/AdaptySDKDependencies.xml @@ -2,7 +2,7 @@ - + https://jitpack.io @@ -10,7 +10,7 @@ - + diff --git a/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyDependencies.xml.meta b/Assets/AdaptySDK/Editor/AdaptySDKDependencies.xml.meta similarity index 75% rename from AdaptyUnityProject/Assets/Adapty/Editor/AdaptyDependencies.xml.meta rename to Assets/AdaptySDK/Editor/AdaptySDKDependencies.xml.meta index 063561d..a247108 100644 --- a/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyDependencies.xml.meta +++ b/Assets/AdaptySDK/Editor/AdaptySDKDependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8322f599719d8415e9081e3934a1cd9b +guid: a6a98dbf9aefb42df98c81b6b497cd0f TextScriptImporter: externalObjects: {} userData: diff --git a/AdaptyUnityProject/Assets/Adapty.meta b/Assets/AdaptySDK/Models.meta similarity index 77% rename from AdaptyUnityProject/Assets/Adapty.meta rename to Assets/AdaptySDK/Models.meta index acd2ab3..d4284dd 100644 --- a/AdaptyUnityProject/Assets/Adapty.meta +++ b/Assets/AdaptySDK/Models.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8f72781ea552b4f50aef67079a18a0af +guid: 9a90062f51ff14a86ae086c9a28fc4de folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/AdaptySDK/Models/AccessLevelInfo.cs b/Assets/AdaptySDK/Models/AccessLevelInfo.cs new file mode 100644 index 0000000..419a6ce --- /dev/null +++ b/Assets/AdaptySDK/Models/AccessLevelInfo.cs @@ -0,0 +1,165 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class AccessLevelInfo + { + + /// Unique identifier of the access level configured by you in Adapty Dashboard. + public readonly string Id; + + /// Whether the access level is active. + /// Generally, you have to check just this property to determine if the user has access to premium features. + public readonly bool IsActive; + + /// The identifier of the product in the App Store Connect that unlocked this access level. + public readonly string VendorProductId; + + /// The store of the purchase that unlocked this access level. + /// The possible values are: app_store, play_store, adapty. + public readonly string Store; + + /// The time when the access level was activated. + /// + /// [Nullable] + public readonly DateTime? ActivatedAt; // nullable + + /// The time when the access level was renewed. + /// + /// [Nullable] + public readonly DateTime? RenewedAt; // nullable + + /// The time when the access level will expire (could be in the past and could be null for lifetime access). + /// + /// [Nullable] + public readonly DateTime? ExpiresAt; // nullable + + /// Whether the access level is active for a lifetime (no expiration date). + /// If set to true you shouldn't check expires_at , or you could just check isActive. + public readonly bool IsLifetime; + + /// The type of active introductory offer. + /// Possible values are: free_trial, pay_as_you_go, pay_up_front. If the value is not null, + /// it means that the offer was applied during the current subscription period. + /// + /// [Nullable] + public readonly string ActiveIntroductoryOfferType; // nullable + + /// The type of active promotional offer. + /// Possible values are: free_trial, pay_as_you_go, pay_up_front. + /// If the value is not null, it means that the offer was applied during the current subscription period. + /// + /// [Nullable] + public readonly string ActivePromotionalOfferType; // nullable + + /// Whether the auto-renewable subscription is set to renew. + public readonly bool WillRenew; + + /// Whether the auto-renewable subscription is in the grace period. + public readonly bool IsInGracePeriod; + + /// The time when the auto-renewable subscription was cancelled. + /// Subscription can still be active, it just means that auto-renewal turned off. + /// Will be set to null if the user reactivates the subscription. + /// + /// [Nullable] + public readonly DateTime? UnsubscribedAt; // nullable + + /// The time when billing issue was detected (Apple was not able to charge the card). + /// Subscription can still be active. Will be set to null if the charge will be made. + /// + /// [Nullable] + public readonly DateTime? BillingIssueDetectedAt; // nullable + + /// Transaction id of the purchase that unlocked this access level. + /// + /// [Nullable] + public readonly string VendorTransactionId; // nullable + + /// Original transaction id of the purchase that unlocked this access level. + /// For auto-renewable subscription, this will be the id of the first transaction in the subscription. + /// + /// [Nullable] + public readonly string VendorOriginalTransactionId; // nullable + + /// The time when the access level has started (could be in the future). + /// + /// [Nullable] + public readonly DateTime? StartsAt; // nullable + + /// The reason why the subscription was cancelled. + /// Possible values are: voluntarily_cancelled, billing_error, refund, price_increase, product_was_not_available, unknown. + /// + /// [Nullable] + public readonly string CancellationReason; // nullable + + /// Whether the purchase was refunded. + public readonly bool IsRefund; + + + internal AccessLevelInfo(JSONNode response) + { + Id = response["id"]; + IsActive = response["is_active"]; + VendorProductId = response["vendor_product_id"]; + Store = response["store"]; + ActivatedAt = NullableDateTimeFromJSON(response["activated_at"]); + RenewedAt = NullableDateTimeFromJSON(response["renewed_at"]); + ExpiresAt = NullableDateTimeFromJSON(response["expires_at"]); + IsLifetime = response["is_lifetime"]; + ActiveIntroductoryOfferType = response["active_introductory_offer_type"]; + ActivePromotionalOfferType = response["active_promotional_offer_type"]; + WillRenew = response["will_renew"]; + IsInGracePeriod = response["is_in_grace_period"]; + UnsubscribedAt = NullableDateTimeFromJSON(response["unsubscribed_at"]); + BillingIssueDetectedAt = NullableDateTimeFromJSON(response["billing_issue_detected_at"]); + VendorTransactionId = response["vendor_transaction_id"]; + VendorOriginalTransactionId = response["vendor_original_transaction_id"]; + StartsAt = NullableDateTimeFromJSON(response["starts_at"]); + CancellationReason = response["cancellation_reason"]; + IsRefund = response["is_refund"]; + } + + public override string ToString() + { + return $"{nameof(Id)}: {Id}, " + + $"{nameof(IsActive)}: {IsActive}, " + + $"{nameof(VendorProductId)}: {VendorProductId}, " + + $"{nameof(Store)}: {Store}, " + + $"{nameof(ActivatedAt)}: {ActivatedAt}, " + + $"{nameof(RenewedAt)}: {RenewedAt}, " + + $"{nameof(ExpiresAt)}: {ExpiresAt}, " + + $"{nameof(IsLifetime)}: {IsLifetime}, " + + $"{nameof(ActiveIntroductoryOfferType)}: {ActiveIntroductoryOfferType}, " + + $"{nameof(ActivePromotionalOfferType)}: {ActivePromotionalOfferType}, " + + $"{nameof(WillRenew)}: {WillRenew}, " + + $"{nameof(IsInGracePeriod)}: {IsInGracePeriod}, " + + $"{nameof(UnsubscribedAt)}: {UnsubscribedAt}, " + + $"{nameof(BillingIssueDetectedAt)}: {BillingIssueDetectedAt}, " + + $"{nameof(VendorTransactionId)}: {VendorTransactionId}, " + + $"{nameof(VendorOriginalTransactionId)}: {VendorOriginalTransactionId}, " + + $"{nameof(StartsAt)}: {StartsAt}, " + + $"{nameof(CancellationReason)}: {CancellationReason}, " + + $"{nameof(IsRefund)}: {IsRefund}"; + } + } + + public static AccessLevelInfo AccessLevelInfoInfoFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try + { + return new AccessLevelInfo(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding AccessLevelInfo: {e} source: {response}"); + return null; + } + } + } +} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyiOS.cs.meta b/Assets/AdaptySDK/Models/AccessLevelInfo.cs.meta similarity index 83% rename from AdaptyUnityProject/Assets/Adapty/AdaptyiOS.cs.meta rename to Assets/AdaptySDK/Models/AccessLevelInfo.cs.meta index b34e775..c8178a1 100644 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyiOS.cs.meta +++ b/Assets/AdaptySDK/Models/AccessLevelInfo.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6b1847ff145e6488bbf6fd264987f3ae +guid: d1fff70973fbc4e709c207dc8b06c534 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/Models/AndroidSubscriptionUpdate.cs b/Assets/AdaptySDK/Models/AndroidSubscriptionUpdate.cs new file mode 100644 index 0000000..324eb0c --- /dev/null +++ b/Assets/AdaptySDK/Models/AndroidSubscriptionUpdate.cs @@ -0,0 +1,84 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public enum AndroidSubscriptionUpdateProrationMode + { + ImmediateWithTimeProration = 0, + ImmediateAndChargeProratedPrice = 1, + ImmediateWithoutProration = 2, + Deferred = 3, + ImmediateAndChargeFullPrice = 4 + } + + public class AndroidSubscriptionUpdate + { + + + public string OldSubVendorProductId; + public AndroidSubscriptionUpdateProrationMode ProrationMode; + + public AndroidSubscriptionUpdate(string oldSubVendorProductId, AndroidSubscriptionUpdateProrationMode prorationMode) + { + OldSubVendorProductId = oldSubVendorProductId; + ProrationMode = prorationMode; + } + + public AndroidSubscriptionUpdate(AndroidSubscriptionUpdateProrationMode prorationMode): this(null, prorationMode) + {} + + public override string ToString() + { + return $"{nameof(OldSubVendorProductId)}: {OldSubVendorProductId}, " + + $"{nameof(ProrationMode)}: {ProrationMode}"; + } + + public string ToJSONString() + { + try { + JSONNode node = new JSONObject(); + if (OldSubVendorProductId != null) + { + node.Add("old_sub_vendor_product_id", OldSubVendorProductId); + } + node.Add("proration_mode", AndroidSubscriptionUpdateProrationModeToString(ProrationMode)); + return node.ToString(); + } + catch (Exception e) + { + Debug.LogError($"Exception on encoding AndroidSubscriptionUpdate: {e} source: {ToString()}"); + return null; + } + } + } + + + public static string AndroidSubscriptionUpdateProrationModeToString(this AndroidSubscriptionUpdateProrationMode value) + { + switch (value) + { + case AndroidSubscriptionUpdateProrationMode.ImmediateWithTimeProration: + return "immediate_with_time_proration"; + case AndroidSubscriptionUpdateProrationMode.ImmediateAndChargeProratedPrice: + return "immediate_and_charge_prorated_price"; + case AndroidSubscriptionUpdateProrationMode.ImmediateWithoutProration: + return "immediate_without_proration"; + case AndroidSubscriptionUpdateProrationMode.Deferred: + return "deferred"; + case AndroidSubscriptionUpdateProrationMode.ImmediateAndChargeFullPrice: + return "immediate_and_charge_full_price"; + } + + throw new Exception($"AndroidSubscriptionUpdateProrationMode unknown value: {value}"); + } + + public static int AndroidSubscriptionUpdateProrationModeToInt(AndroidSubscriptionUpdateProrationMode value) + { + return (int)value; + } + } +} diff --git a/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyObjectEditor.cs.meta b/Assets/AdaptySDK/Models/AndroidSubscriptionUpdate.cs.meta similarity index 83% rename from AdaptyUnityProject/Assets/Adapty/Editor/AdaptyObjectEditor.cs.meta rename to Assets/AdaptySDK/Models/AndroidSubscriptionUpdate.cs.meta index 8bd734b..e2cf431 100644 --- a/AdaptyUnityProject/Assets/Adapty/Editor/AdaptyObjectEditor.cs.meta +++ b/Assets/AdaptySDK/Models/AndroidSubscriptionUpdate.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ebce31aea9dd648e6b0800919e537500 +guid: 9506ddf92708749209bbda5462942802 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/Models/AppTrackingTransparency.cs b/Assets/AdaptySDK/Models/AppTrackingTransparency.cs new file mode 100644 index 0000000..dd9b3ca --- /dev/null +++ b/Assets/AdaptySDK/Models/AppTrackingTransparency.cs @@ -0,0 +1,56 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public enum AppTrackingTransparency + { + NotDetermined, + Restricted, + Denied, + Authorized + } + + public static AppTrackingTransparency AppTrackingTransparencyFromJSON(JSONNode response) + { + return AppTrackingTransparencyFromString(response); + } + + public static AppTrackingTransparency AppTrackingTransparencyFromString(string value) + { + switch (value) + { + case "not_determined": + case "notDetermined": + return AppTrackingTransparency.NotDetermined; + case "restricted": + return AppTrackingTransparency.Restricted; + case "denied": + return AppTrackingTransparency.Denied; + case "authorized": + return AppTrackingTransparency.Authorized; + } + + throw new Exception($"AppTrackingTransparency unknown value: {value}"); + } + + public static string AppTrackingTransparencyToString(this AppTrackingTransparency value) + { + switch (value) + { + case AppTrackingTransparency.NotDetermined: + return "not_determined"; + case AppTrackingTransparency.Restricted: + return "restricted"; + case AppTrackingTransparency.Denied: + return "denied"; + case AppTrackingTransparency.Authorized: + return "authorized"; + } + throw new Exception($"AppTrackingTransparency unknown value: {value}"); + } + } +} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyObjectScript.cs.meta b/Assets/AdaptySDK/Models/AppTrackingTransparency.cs.meta similarity index 83% rename from AdaptyUnityProject/Assets/Adapty/AdaptyObjectScript.cs.meta rename to Assets/AdaptySDK/Models/AppTrackingTransparency.cs.meta index ac5aac6..832d436 100644 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyObjectScript.cs.meta +++ b/Assets/AdaptySDK/Models/AppTrackingTransparency.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 86bd11ca2822145bbabca3e820f6308f +guid: e20da1d70f8ac4c3fa39b98a1768daed MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/Models/AttributionNetwork.cs b/Assets/AdaptySDK/Models/AttributionNetwork.cs new file mode 100644 index 0000000..0d40968 --- /dev/null +++ b/Assets/AdaptySDK/Models/AttributionNetwork.cs @@ -0,0 +1,59 @@ +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public enum AttributionNetwork + { + Adjust, + Appsflyer, + Branch, + AppleSearchAds, + Custom + } + + public static AttributionNetwork AttributionNetworkFromJSON(JSONNode response) + { + return AttributionNetworkFromString(response); + } + + public static AttributionNetwork AttributionNetworkFromString(string value) + { + if (value == null) return AttributionNetwork.Custom; + switch (value) + { + case "adjust": + return AttributionNetwork.Adjust; + case "appsflyer": + return AttributionNetwork.Appsflyer; + case "branch": + return AttributionNetwork.Branch; + case "apple_search_ads": + case "appleSearchAds": + return AttributionNetwork.AppleSearchAds; + default: + return AttributionNetwork.Custom; + } + } + + public static string AttributionNetworkToString(this AttributionNetwork value) + { + switch (value) + { + case AttributionNetwork.Adjust: + return "adjust"; + case AttributionNetwork.Appsflyer: + return "appsflyer"; + case AttributionNetwork.Branch: + return "branch"; + case AttributionNetwork.AppleSearchAds: + return "apple_search_ads"; + case AttributionNetwork.Custom: + default: + return "custom"; + } + } + } +} diff --git a/Assets/AdaptySDK/Models/AttributionNetwork.cs.meta b/Assets/AdaptySDK/Models/AttributionNetwork.cs.meta new file mode 100644 index 0000000..15ed0cc --- /dev/null +++ b/Assets/AdaptySDK/Models/AttributionNetwork.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d9c662a65e2d4da4aa8d66776e13360 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/DateTime.cs b/Assets/AdaptySDK/Models/DateTime.cs new file mode 100644 index 0000000..8f031b8 --- /dev/null +++ b/Assets/AdaptySDK/Models/DateTime.cs @@ -0,0 +1,40 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + + public static DateTime DateTimeFromJSON(JSONNode response) + { + return DateTimeFromString(response); + } + + public static DateTime? NullableDateTimeFromJSON(JSONNode response) + { + if (response == null || response.IsNull) return null; + return DateTimeFromJSON(response); + } + + public static DateTime DateTimeFromString(string value) + { + try + { + return DateTime.Parse(value, System.Globalization.CultureInfo.InvariantCulture); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding DateTimeFromString: {e} source: \"{value}\""); + throw e; + } + } + + public static DateTime? NullableDateTimeFromString(string value) + { + if (value == null) return null; + return DateTimeFromString(value); + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Models/DateTime.cs.meta b/Assets/AdaptySDK/Models/DateTime.cs.meta new file mode 100644 index 0000000..9b3e4e7 --- /dev/null +++ b/Assets/AdaptySDK/Models/DateTime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d4774fd0d50e4f188015d3c7f7d21ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/Error.cs b/Assets/AdaptySDK/Models/Error.cs new file mode 100644 index 0000000..6b8ee8f --- /dev/null +++ b/Assets/AdaptySDK/Models/Error.cs @@ -0,0 +1,136 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public enum ErrorCode + { + None = -1, + + // system storekit codes + Unknown = 0, + ClientInvalid = 1, // client is not allowed to issue the request, etc. + PaymentCancelled = 2, // user cancelled the request, etc. + PaymentInvalid = 3, // purchase identifier was invalid, etc. + PaymentNotAllowed = 4, // this device is not allowed to make the payment + StoreProductNotAvailable = 5, // Product is not available in the current storefront + CloudServicePermissionDenied = 6, // user has not allowed access to cloud service information + CloudServiceNetworkConnectionFailed = 7, // the device could not connect to the nework + CloudServiceRevoked = 8, // user has revoked permission to use this cloud service + PrivacyAcknowledgementRequired = 9, // The user needs to acknowledge Apple's privacy policy + UnauthorizedRequestData = 10, // The app is attempting to use SKPayment's requestData property, but does not have the appropriate entitlement + InvalidOfferIdentifier = 11, // The specified subscription offer identifier is not valid + InvalidSignature = 12, // The cryptographic signature provided is not valid + MissingOfferParams = 13, // One or more parameters from SKPaymentDiscount is missing + InvalidOfferPrice = 14, + + //custom android codes + AdaptyNotInitialized = 20, + PaywallNotFound = 21, + ProductNotFound = 22, + InvalidJson = 23, + CurrentSubscriptionToUpdateNotFoundInHistory = 24, + PendingPurchase = 25, + BillingServiceTimeout = 97, + FeatureNotSupported = 98, + BillingServiceDisconnected = 99, + BillingServiceUnavailable = 102, + BillingUnavailable = 103, + DeveloperError = 105, + BillingError = 106, + ItemAlreadyOwned = 107, + ItemNotOwned = 108, + + // custom storekit codes + NoProductIDsFound = 1000, // No In-App Purchase product identifiers were found + NoProductsFound = 1001, // No In-App Purchases were found + ProductRequestFailed = 1002, // Unable to fetch available In-App Purchase products at the moment + CantMakePayments = 1003, // In-App Purchases are not allowed on this device + NoPurchasesToRestore = 1004, // No purchases to restore + CantReadReceipt = 1005, // Can't find a valid receipt + ProductPurchaseFailed = 1006, // Product purchase failed + MissingOfferSigningParams = 1007, // Missing offer signing required params + FallbackPaywallsNotRequired = 1008, // Fallback paywalls are not required + + // custom network codes + EmptyResponse = 2000, //Response is empty + EmptyData = 2001, // Request data is empty + AuthenticationError = 2002, // You need to be authenticated first + BadRequest = 2003, // Bad request + ServerError = 2004, // Response code is 429 or 500s + Failed = 2005, // Network request failed + UnableToDecode = 2006, // We could not decode the response + MissingParam = 2007, // Missing some of the required params + InvalidProperty = 2008, // Received invalid property data + EncodingFailed = 2009, // Parameters encoding failed + MissingURL = 2010, // Request url is nil + + // plugin codes + NotFoundProduct = 10001, + NotFoundPaywall = 10002, + NotDeferredPurchase = 10003 + } + + public class Error + { + + + public readonly long Code; + public readonly string Domain; + public readonly string Message; + public readonly ErrorCode AdaptyCode; + + internal Error(JSONNode response) + { + Message = response["message"]; + Domain = response["domain"]; + Code = response["adapty_code"]; + if (Code == 0) + { + Code = response["code"]; + AdaptyCode = ErrorCode.Unknown; + } else + { + AdaptyCode = (ErrorCode)Code; + } + } + + public override string ToString() + { + return $"{nameof(Domain)}: {Domain}, " + + $"{nameof(Code)}: {Code}, " + + $"{nameof(AdaptyCode)}: {AdaptyCode}, " + + $"{nameof(Message)}: {Message}"; + } + } + + + internal static bool ResponseHasError(JSONNode response) + { + if (response == null || response.IsNull) return false; + var error = response["error"]; + return error != null && !error.IsNull; + } + + + + public static Error ErrorFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try + { + return new Error(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding Error: {e} source: {response}"); + return null; + } + } + + } +} + diff --git a/Assets/AdaptySDK/Models/Error.cs.meta b/Assets/AdaptySDK/Models/Error.cs.meta new file mode 100644 index 0000000..151c025 --- /dev/null +++ b/Assets/AdaptySDK/Models/Error.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91d04b6d1c997475bbd00797ae75243c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/Gender.cs b/Assets/AdaptySDK/Models/Gender.cs new file mode 100644 index 0000000..02eaeea --- /dev/null +++ b/Assets/AdaptySDK/Models/Gender.cs @@ -0,0 +1,51 @@ +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public enum Gender + { + Female, + Male, + Other + } + + + public static Gender GenderFromJSON(JSONNode response) + { + return GenderFromString(response); + } + + public static Gender GenderFromString(string value) + { + if (value == null) return Gender.Other; + switch (value) + { + case "f": + case "female": + return Gender.Female; + case "m": + case "male": + return Gender.Male; + default: + return Gender.Other; + } + } + + public static string GenderToString(this Gender value) + { + switch (value) + { + case Gender.Female: + return "f"; + case Gender.Male: + return "m"; + case Gender.Other: + default: + return "o"; + } + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Models/Gender.cs.meta b/Assets/AdaptySDK/Models/Gender.cs.meta new file mode 100644 index 0000000..c52d514 --- /dev/null +++ b/Assets/AdaptySDK/Models/Gender.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78602a97d3f324c38843c23d31668cee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/LogLevel.cs b/Assets/AdaptySDK/Models/LogLevel.cs new file mode 100644 index 0000000..b250f83 --- /dev/null +++ b/Assets/AdaptySDK/Models/LogLevel.cs @@ -0,0 +1,54 @@ +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public enum LogLevel + { + None, + Errors, + Verbose, + All + } + + public static LogLevel LogLevelFromJSON(JSONNode response) + { + return LogLevelFromString(response); + } + + public static LogLevel LogLevelFromString(string value) + { + if (value == null) return LogLevel.None; + switch (value) + { + case "errors": + return LogLevel.Errors; + case "verbose": + return LogLevel.Verbose; + case "all": + return LogLevel.All; + default: + return LogLevel.None; + } + } + + public static string LogLevelToString(this LogLevel value) + { + switch (value) + { + case LogLevel.Errors: + return "errors"; + case LogLevel.Verbose: + return "verbose"; + case LogLevel.All: + return "all"; + case LogLevel.None: + default: + return "none"; + } + } + + } +} diff --git a/Assets/AdaptySDK/Models/LogLevel.cs.meta b/Assets/AdaptySDK/Models/LogLevel.cs.meta new file mode 100644 index 0000000..cd726cc --- /dev/null +++ b/Assets/AdaptySDK/Models/LogLevel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c4a9e82281c248899ec8838fe9836a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/NonSubscriptionInfo.cs b/Assets/AdaptySDK/Models/NonSubscriptionInfo.cs new file mode 100644 index 0000000..815c995 --- /dev/null +++ b/Assets/AdaptySDK/Models/NonSubscriptionInfo.cs @@ -0,0 +1,88 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class NonSubscriptionInfo + { + /// The identifier of the purchase in Adapty. + /// You can use it to ensure that you've already processed this purchase (for example tracking one time products). + public readonly string PurchaseId; + + /// The identifier of the product in the App Store Connect. + public readonly string VendorProductId; + + /// The store of the purchase. + /// The possible values are: app_store, play_store , adapty. + public readonly string Store; + + /// The time when the product was purchased. + /// + /// [Nullable] + public readonly DateTime? PurchasedAt; // nullable + + /// Whether the product should only be processed once. + /// If true, the purchase will be returned by Adapty API one time only. + public readonly bool IsOneTime; + + /// Whether the product was purchased in the sandbox environment. + public readonly bool IsSandbox; + + /// Transaction id from the App Store. + /// + /// [Nullable] + public readonly string VendorTransactionId; // nullable + + /// Original transaction id from the App Store. + /// For auto-renewable subscription, this will be the id of the first transaction in the subscription. + /// + /// [Nullable] + public readonly string VendorOriginalTransactionId; // nullable + + /// Whether the purchase was refunded. + public readonly bool IsRefund; + + internal NonSubscriptionInfo(JSONNode response) + { + PurchaseId = response["purchase_id"]; + VendorProductId = response["vendor_product_id"]; + Store = response["store"]; + PurchasedAt = NullableDateTimeFromJSON(response["purchased_at"]); + IsOneTime = response["is_one_time"]; + IsSandbox = response["is_sandbox"]; + VendorTransactionId = response["vendor_transaction_id"]; + VendorOriginalTransactionId = response["vendor_original_transaction_id"]; + IsRefund = response["is_refund"]; + } + + public override string ToString() + { + return $"{nameof(PurchaseId)}: {PurchaseId}, " + + $"{nameof(VendorProductId)}: {VendorProductId}, " + + $"{nameof(Store)}: {Store}, " + + $"{nameof(PurchasedAt)}: {PurchasedAt}, " + + $"{nameof(IsOneTime)}: {IsOneTime}, " + + $"{nameof(IsSandbox)}: {IsSandbox}, " + + $"{nameof(VendorTransactionId)}: {VendorTransactionId}, " + + $"{nameof(VendorOriginalTransactionId)}: {VendorOriginalTransactionId}, " + + $"{nameof(IsRefund)}: {IsRefund}"; + } + } + + public static NonSubscriptionInfo NonSubscriptionInfoFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try { + return new NonSubscriptionInfo(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding NonSubscriptionInfo: {e} source: {response}"); + return null; + } + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Models/NonSubscriptionInfo.cs.meta b/Assets/AdaptySDK/Models/NonSubscriptionInfo.cs.meta new file mode 100644 index 0000000..429ddfe --- /dev/null +++ b/Assets/AdaptySDK/Models/NonSubscriptionInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6001e48bd5b2f4e08892fabccb6264f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/PaymentMode.cs b/Assets/AdaptySDK/Models/PaymentMode.cs new file mode 100644 index 0000000..ee54dd1 --- /dev/null +++ b/Assets/AdaptySDK/Models/PaymentMode.cs @@ -0,0 +1,64 @@ +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public enum PaymentMode + { + PayAsYouGo = 0, + PayUpFront = 1, + FreeTrial = 2, + Unknown = 3 + } + + + public static PaymentMode PaymentModeFromJSON(JSONNode response) + { + if (response.IsNumber) + { + return PaymentModeFromInt(response); + } + else if (response.IsString) + { + return PaymentModeFromString(response); + } + else + { + return PaymentMode.Unknown; + } + } + + public static PaymentMode PaymentModeFromString(string value) + { + if (value == null) return PaymentMode.Unknown; + switch (value) + { + case "payAsYouGo": + case "pay_as_you_go": + return PaymentMode.PayAsYouGo; + case "payUpFront": + case "pay_up_front": + return PaymentMode.PayUpFront; + case "FreeTrial": + case "free_trial": + return PaymentMode.FreeTrial; + default: + return PaymentMode.Unknown; + } + } + + public static PaymentMode PaymentModeFromInt(int value) + { + if (value < 0 || value > 3) + { + return PaymentMode.Unknown; + } + else + { + return (PaymentMode)value; + } + } + } +} diff --git a/Assets/AdaptySDK/Models/PaymentMode.cs.meta b/Assets/AdaptySDK/Models/PaymentMode.cs.meta new file mode 100644 index 0000000..aecf931 --- /dev/null +++ b/Assets/AdaptySDK/Models/PaymentMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2894c60a19cb540c7b8e6f33a5bb4cad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/Paywall.cs b/Assets/AdaptySDK/Models/Paywall.cs new file mode 100644 index 0000000..f8e31fb --- /dev/null +++ b/Assets/AdaptySDK/Models/Paywall.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class Paywall + { + /// The identifier of the paywall, configured in Adapty Dashboard. + public readonly string DeveloperId; + + /// The identifier of the variation, used to attribute purchases to the paywall. + public readonly string VariationId; + + /// The current revision (version) of the paywall. + /// Every change within the paywall creates a new revision. + public readonly int Revision; + + /// Whether this paywall is a part of the Promo Campaign. + public readonly bool IsPromo; + + /// An array of ProductModel objects related to this paywall. + public readonly Product[] Products; + + /// The custom JSON formatted data configured in Adapty Dashboard. + public Dictionary CustomPayload; + + /// The custom JSON formatted data configured in Adapty Dashboard. + /// (String representation) + public readonly string CustomPayloadString; + + /// Paywall A/B test name + public readonly string ABTestName; + + /// Paywall name + public readonly string Name; + + + internal Paywall(JSONNode response) + { + + DeveloperId = response["developer_id"]; + VariationId = response["variation_id"]; + Revision = response["revision"]; + IsPromo = response["is_promo"]; + var products = response["products"]; + if (products != null && !products.IsNull && products.IsArray) + { + var list = new List(); + foreach (var item in products) + { + var value = ProductFromJSON(item); + if (value != null) + { + list.Add(value); + } + } + this.Products = list.ToArray(); + } + CustomPayloadString = response["custom_payload_string"] ?? response["custom_payload"]; + ABTestName = response["ab_test_name"] ?? response["a_b_test_name"]; + Name = response["name"] ?? response["paywall_name"]; + + if (!string.IsNullOrEmpty(CustomPayloadString)) + { + CustomPayload = JSON.Parse(CustomPayloadString).ToDictionary(); + } + + } + + public override string ToString() + { + return $"{nameof(DeveloperId)}: {DeveloperId}, " + + $"{nameof(VariationId)}: {VariationId}, " + + $"{nameof(Revision)}: {Revision}, " + + $"{nameof(IsPromo)}: {IsPromo}, " + + $"{nameof(Products)}: {Products}, " + + $"{nameof(CustomPayloadString)}: {CustomPayloadString}, " + + $"{nameof(ABTestName)}: {ABTestName}, " + + $"{nameof(Name)}: {Name}"; + } + } + + public static Paywall PaywallFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try { + return new Paywall(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding Paywall: {e} source: {response}"); + return null; + } + } + } +} diff --git a/Assets/AdaptySDK/Models/Paywall.cs.meta b/Assets/AdaptySDK/Models/Paywall.cs.meta new file mode 100644 index 0000000..0eb47ae --- /dev/null +++ b/Assets/AdaptySDK/Models/Paywall.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 804fcbd190b74463ca2499b134522a72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/Period.cs b/Assets/AdaptySDK/Models/Period.cs new file mode 100644 index 0000000..3bd7b37 --- /dev/null +++ b/Assets/AdaptySDK/Models/Period.cs @@ -0,0 +1,96 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public enum PeriodUnit + { + Day = 0, + Week = 1, + Month = 2, + Year = 3, + Unknown = 4 + } + + public class Period + { + + public readonly PeriodUnit Unit; + public readonly long NumberOfUnits; + + internal Period(JSONNode response) + { + Unit = PeriodUnitFromJSON(response["unit"]); + NumberOfUnits = response["number_of_units"]; + if (NumberOfUnits == 0) NumberOfUnits = response["numberOfUnits"]; + } + + public override string ToString() + { + return $"{nameof(Unit)}: {Unit}, " + + $"{nameof(NumberOfUnits)}: {NumberOfUnits}"; + } + } + + public static Period PeriodFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try { + return new Period(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding Period: {e} source: {response}"); + return null; + } + } + + public static PeriodUnit PeriodUnitFromJSON(JSONNode response) + { + + if (response.IsNumber ) + { + return PeriodUnitFromInt(response); + } + else if (response.IsString ) + { + return PeriodUnitFromString(response); + } else + { + return PeriodUnit.Unknown; + } + } + + public static PeriodUnit PeriodUnitFromString(string value) + { + if (value == null) return PeriodUnit.Unknown; + switch (value) + { + case "day": + return PeriodUnit.Day; + case "week": + return PeriodUnit.Week; + case "month": + return PeriodUnit.Month; + case "year": + return PeriodUnit.Year; + default: + return PeriodUnit.Unknown; + } + } + + public static PeriodUnit PeriodUnitFromInt(int value) + { + if (value < 0 || value > 4) + { + return PeriodUnit.Unknown; + } else + { + return (PeriodUnit)value; + } + } + } +} diff --git a/Assets/AdaptySDK/Models/Period.cs.meta b/Assets/AdaptySDK/Models/Period.cs.meta new file mode 100644 index 0000000..3d1745d --- /dev/null +++ b/Assets/AdaptySDK/Models/Period.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e499211d24bf4c4f9879588686cad4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/Product.cs b/Assets/AdaptySDK/Models/Product.cs new file mode 100644 index 0000000..1ca1637 --- /dev/null +++ b/Assets/AdaptySDK/Models/Product.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class Product + { + /// Unique identifier of the product. + public readonly string VendorProductId; + + /// Eligibility of user for introductory offer. + public readonly bool IntroductoryOfferEligibility; + + /// Eligibility of user for promotional offer. + public readonly bool PromotionalOfferEligibility; + + /// Id of the offer, provided by Adapty for this specific user. + /// + /// [Nullable] + public readonly string PromotionalOfferId; + + /// The identifier of the variation, used to attribute purchases to the paywall. + /// + /// [Nullable] + public readonly string VariationId; + + /// A description of the product. + public readonly string LocalizedDescription; + + /// The name of the product. + public readonly string LocalizedTitle; + + /// The cost of the product in the local currency. + public readonly double? Price; + + /// Product locale currency code. + /// + /// [Nullable] + public readonly string CurrencyCode; + + /// Product locale currency symbol. + /// + /// [Nullable] + public readonly string CurrencySymbol; + + /// Product locale region code. + /// + /// [Nullable] + public readonly string RegionCode; + + /// A ProductSubscriptionPeriodModel object. + /// The period details for products that are subscriptions. + /// + /// [Nullable] + public readonly Period SubscriptionPeriod; + + /// A ProductDiscountModel object, containing introductory price information for the product. + /// + /// [Nullable] + public readonly ProductDiscount IntroductoryDiscount; + + /// The identifier of the subscription group to which the subscription belongs. + /// + /// [Nullable] + public readonly string SubscriptionGroupIdentifier; + + /// An array of [Adapty.ProductDiscount] discount offers available for the product. + public readonly ProductDiscount[] Discounts; + + /// Localized price of the product. + /// + /// [Nullable] + public readonly string LocalizedPrice; + + /// Localized subscription period of the product. + /// + /// [Nullable] + public readonly string LocalizedSubscriptionPeriod; + + /// Parent A/B test name + public readonly string PaywallABTestName; + + /// Indicates whether the product is available for family sharing in App Store Connect. + public readonly bool IsFamilyShareable; + + /// Parent paywall name + public readonly string PaywallName; + + /// The duration of the trial period. (Android only) + public readonly Period FreeTrialPeriod; + + /// Localized trial period of the product. (Android only) + public readonly string LocalizedFreeTrialPeriod; + + internal Product(JSONNode response) + { + VendorProductId = response["vendor_product_id"]; + IntroductoryOfferEligibility = response["introductory_offer_eligibility"]; + PromotionalOfferEligibility = response["promotional_offer_eligibility"]; + PromotionalOfferId = response["promotional_offer_id"]; + VariationId = response["variation_id"]; + LocalizedDescription = response["localized_description"]; + LocalizedTitle = response["localized_title"]; + var price = response["price"]; + this.Price = (price == null || price.IsNull || !price.IsNumber) ? null : price; + CurrencyCode = response["currency_code"]; + CurrencySymbol = response["currency_symbol"]; + RegionCode = response["region_code"]; + SubscriptionPeriod = PeriodFromJSON( response["subscription_period"]); + IntroductoryDiscount = ProductDiscountFromJSON(response["introductory_discount"]); + var discounts = response["discounts"]; + if (discounts != null && !discounts.IsNull && discounts.IsArray) { + var _discounts = new List(); + foreach (var item in discounts) + { + var value = ProductDiscountFromJSON(item); + if (value != null) + { + _discounts.Add(value); + } + } + this.Discounts = _discounts.ToArray(); + } + SubscriptionGroupIdentifier = response["subscription_group_identifier"]; + LocalizedPrice = response["localized_price"]; + LocalizedSubscriptionPeriod = response["localized_subscription_period"]; + PaywallABTestName = response["paywall_ab_test_name"] ?? response["paywall_a_b_test_name"]; + PaywallName = response["paywall_name"]; + IsFamilyShareable = response["is_family_shareable"]; + FreeTrialPeriod = PeriodFromJSON(response["free_trial_period"]); + LocalizedFreeTrialPeriod = response["localized_free_trial_period"]; + + } + + public override string ToString() + { + return $"{nameof(VendorProductId)}: {VendorProductId}, " + + $"{nameof(IntroductoryOfferEligibility)}: {IntroductoryOfferEligibility}, " + + $"{nameof(PromotionalOfferEligibility)}: {PromotionalOfferEligibility}, " + + $"{nameof(PromotionalOfferId)}: {PromotionalOfferId}, " + + $"{nameof(VariationId)}: {VariationId}, " + + $"{nameof(LocalizedDescription)}: {LocalizedDescription}, " + + $"{nameof(LocalizedTitle)}: {LocalizedTitle}, " + + $"{nameof(Price)}: {Price}, " + + $"{nameof(CurrencyCode)}: {CurrencyCode}, " + + $"{nameof(CurrencySymbol)}: {CurrencySymbol}, " + + $"{nameof(RegionCode)}: {RegionCode}, " + + $"{nameof(SubscriptionPeriod)}: {SubscriptionPeriod}, " + + $"{nameof(IntroductoryDiscount)}: {IntroductoryDiscount}, " + + $"{nameof(Discounts)}: {Discounts}, " + + $"{nameof(SubscriptionGroupIdentifier)}: {SubscriptionGroupIdentifier}, " + + $"{nameof(LocalizedPrice)}: {LocalizedPrice}, " + + $"{nameof(LocalizedSubscriptionPeriod)}: {LocalizedSubscriptionPeriod}, " + + $"{nameof(PaywallABTestName)}: {PaywallABTestName}, " + + $"{nameof(PaywallName)}: {PaywallName}, " + + $"{nameof(IsFamilyShareable)}: {IsFamilyShareable}, " + + $"{nameof(FreeTrialPeriod)}: {FreeTrialPeriod}, " + + $"{nameof(LocalizedFreeTrialPeriod)}: {LocalizedFreeTrialPeriod}"; + } + } + + public static Product ProductFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try { + return new Product(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding Product: {e} source: {response}"); + return null; + } + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Models/Product.cs.meta b/Assets/AdaptySDK/Models/Product.cs.meta new file mode 100644 index 0000000..afc3f20 --- /dev/null +++ b/Assets/AdaptySDK/Models/Product.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a30ccc43d95674a05b3c6c2c60d0a4a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/ProductDiscount.cs b/Assets/AdaptySDK/Models/ProductDiscount.cs new file mode 100644 index 0000000..7d0ec62 --- /dev/null +++ b/Assets/AdaptySDK/Models/ProductDiscount.cs @@ -0,0 +1,75 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class ProductDiscount + { + /// The discount price of the product in the user's local currency. + public readonly double Price; + /// An identifier of the discount offer for the product. + /// + /// [Nullable] + public readonly string Identifier; + /// A [Adapty.Period] object that defines the period for the product discount. + public readonly Period SubscriptionPeriod; + /// An integer that indicates the number of periods the product discount is available. + public readonly long NumberOfPeriods; + /// The payment mode for this product discount. + public readonly PaymentMode PaymentMode; + /// The formatted price of the discount for the user's localization. + /// + /// [Nullable] + public readonly string LocalizedPrice; + /// The formatted subscription period of the discount for the user's localization. + /// + /// [Nullable] + public readonly string LocalizedSubscriptionPeriod; + /// The formatted number of periods of the discount for the user's localization. + /// + /// [Nullable] + public readonly string LocalizedNumberOfPeriods; + + internal ProductDiscount(JSONNode response) + { + Price = response["price"]; + Identifier = response["identifier"]; + SubscriptionPeriod = PeriodFromJSON(response["subscription_period"]); + NumberOfPeriods = response["number_of_periods"]; + PaymentMode = PaymentModeFromJSON(response["payment_mode"]); + LocalizedPrice = response["localized_price"]; + LocalizedSubscriptionPeriod = response["localized_subscription_period"]; + LocalizedNumberOfPeriods = response["localized_number_of_periods"]; + } + + public override string ToString() + { + return $"{nameof(Price)}: {Price}, " + + $"{nameof(Identifier)}: {Identifier}, " + + $"{nameof(SubscriptionPeriod)}: {SubscriptionPeriod}, " + + $"{nameof(NumberOfPeriods)}: {NumberOfPeriods}, " + + $"{nameof(PaymentMode)}: {PaymentMode}, " + + $"{nameof(LocalizedPrice)}: {LocalizedPrice}, " + + $"{nameof(LocalizedSubscriptionPeriod)}: {LocalizedSubscriptionPeriod}, " + + $"{nameof(LocalizedNumberOfPeriods)}: {LocalizedNumberOfPeriods}"; + } + } + + public static ProductDiscount ProductDiscountFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try + { + return new ProductDiscount(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding ProductDiscount: {e} source: {response}"); + return null; + } + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Models/ProductDiscount.cs.meta b/Assets/AdaptySDK/Models/ProductDiscount.cs.meta new file mode 100644 index 0000000..703ca78 --- /dev/null +++ b/Assets/AdaptySDK/Models/ProductDiscount.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c9f62acee7f74be0919cc142bff36e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/ProfileParameterBuilder.cs b/Assets/AdaptySDK/Models/ProfileParameterBuilder.cs new file mode 100644 index 0000000..49938c7 --- /dev/null +++ b/Assets/AdaptySDK/Models/ProfileParameterBuilder.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class ProfileParameterBuilder + { + private Dictionary m_Params = new Dictionary(); + + public string Email + { + get { return m_Params["email"] as string; } + set { m_Params["email"] = value; } + } + + public string PhoneNumber + { + get { return m_Params["phone_number"] as string ; } + set { m_Params["phone_number"] = value; } + } + + public string FacebookUserId + { + get { return m_Params["facebook_user_id"] as string; } + set { m_Params["facebook_user_id"] = value; } + } + + public string FacebookAnonymousId + { + get { return m_Params["facebook_anonymous_id"] as string; } + set { m_Params["facebook_anonymous_id"] = value; } + } + + public string AmplitudeUserId + { + get { return m_Params["amplitude_user_id"] as string; } + set { m_Params["amplitude_user_id"] = value; } + } + + public string AmplitudeDeviceId + { + get { return m_Params["amplitude_device_id"] as string; } + set { m_Params["amplitude_device_id"] = value; } + } + + public string MixpanelUserId + { + get { return m_Params["mixpanel_user_id"] as string; } + set { m_Params["mixpanel_user_id"] = value; } + } + + public string AppmetricaProfileId + { + get { return m_Params["appmetrica_profile_id"] as string; } + set { m_Params["appmetrica_profile_id"] = value; } + } + + public string AppmetricaDeviceId + { + get { return m_Params["appmetrica_device_id"] as string; } + set { m_Params["appmetrica_device_id"] = value; } + } + + public string FirstName + { + get { return m_Params["first_name"] as string; } + set { m_Params["first_name"] = value; } + } + + public string LastName + { + get { return m_Params["last_name"] as string; } + set { m_Params["last_name"] = value; } + } + + public Gender? Gender + { + get + { + var v = m_Params["gender"] as string; + return v is null ? null : (Gender?)GenderFromString(v); + } + set + { + if (value.HasValue) + { + m_Params["gender"] = GenderToString(value.Value); + } + else + { + m_Params.Remove("gender"); + } + } + } + + public string Birthday + { + get { return m_Params["birthday"] as string; } + set { m_Params["birthday"] = value; } + } + + public void SetBirthday(int year, int month, int day ) + { + m_Params["birthday"] = $"{year}-{month}-{day}"; + } + + public Dictionary CustomAttributes + { + get { return m_Params["custom_attributes"] as Dictionary; } + set { m_Params["custom_attributes"] = value; } + } + + /// iOS 14 and newer + public AppTrackingTransparency? AppTrackingTransparencyStatus + { + get { + var v = m_Params["att_status"] as string; + return v is null ? null : (AppTrackingTransparency?)AppTrackingTransparencyFromString(v); + } + set { + if (value.HasValue) + { + m_Params["att_status"] = AppTrackingTransparencyToString(value.Value); + } else + { + m_Params.Remove("att_status"); + } + } + } + + public override string ToString() + { + return $"{nameof(Email)}: {Email}, " + + $"{nameof(PhoneNumber)}: {PhoneNumber}, " + + $"{nameof(FacebookUserId)}: {FacebookUserId}, " + + $"{nameof(FacebookAnonymousId)}: {FacebookAnonymousId}, " + + $"{nameof(AmplitudeUserId)}: {AmplitudeUserId}, " + + $"{nameof(AmplitudeDeviceId)}: {AmplitudeDeviceId}, " + + $"{nameof(MixpanelUserId)}: {MixpanelUserId}, " + + $"{nameof(AppmetricaProfileId)}: {AppmetricaProfileId}, " + + $"{nameof(AppmetricaDeviceId)}: {AppmetricaDeviceId}, " + + $"{nameof(FirstName)}: {FirstName}, " + + $"{nameof(LastName)}: {LastName}, " + + $"{nameof(Gender)}: {Gender}, " + + $"{nameof(Birthday)}: {Birthday}, " + + $"{nameof(CustomAttributes)}: {CustomAttributes}, " + + $"{nameof(AppTrackingTransparencyStatus)}: {AppTrackingTransparencyStatus}"; + } + + public string ToJSONString() + { + try + { + JSONNode node = DictionaryExtensions.ToJSON(m_Params); + return node.ToString(); + } + catch (Exception e) + { + Debug.LogError($"Exception on encoding ProfileParameterBuilder: {e} source: {ToString()}"); + return null; + } + } + } + } +} + diff --git a/Assets/AdaptySDK/Models/ProfileParameterBuilder.cs.meta b/Assets/AdaptySDK/Models/ProfileParameterBuilder.cs.meta new file mode 100644 index 0000000..57f457b --- /dev/null +++ b/Assets/AdaptySDK/Models/ProfileParameterBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d966371b26194db888d736e1d66ce10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/Promo.cs b/Assets/AdaptySDK/Models/Promo.cs new file mode 100644 index 0000000..e671997 --- /dev/null +++ b/Assets/AdaptySDK/Models/Promo.cs @@ -0,0 +1,56 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class Promo + { + /// The type of the promo offer. + public readonly string PromoType; + + /// The identifier of the variation, used to attribute purchases to the promo. + public readonly string VariationId; + + /// The time when the current promo offer will expire. + public readonly DateTime? ExpiresAt; + + /// A [Adapty.Paywall] object. + public readonly Paywall Paywall; + + + internal Promo(JSONNode response) + { + PromoType = response["promo_type"]; + ExpiresAt = NullableDateTimeFromJSON(response["expires_at"]); + VariationId = response["variation_id"]; + Paywall = PaywallFromJSON(response["paywall"]); + } + + public override string ToString() + { + return $"{nameof(PromoType)}: {PromoType}, " + + $"{nameof(ExpiresAt)}: {ExpiresAt}, " + + $"{nameof(VariationId)}: {VariationId}, " + + $"{nameof(Paywall)}: {Paywall}"; + } + } + + public static Promo PromoFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try + { + return new Promo(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding Promo: {e} source: {response}"); + + return null; + } + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Models/Promo.cs.meta b/Assets/AdaptySDK/Models/Promo.cs.meta new file mode 100644 index 0000000..83c1d43 --- /dev/null +++ b/Assets/AdaptySDK/Models/Promo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6da5c84b4f624d1d97192c5521019d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/PurchaserInfo.cs b/Assets/AdaptySDK/Models/PurchaserInfo.cs new file mode 100644 index 0000000..80f555e --- /dev/null +++ b/Assets/AdaptySDK/Models/PurchaserInfo.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class PurchaserInfo + { + /// An identifier of the user in Adapty + public readonly string ProfileId; + + /// An identifier of the user in your system. + /// + /// [Nullable] + public readonly string CustomerUserId; + + /// The keys are access level identifiers configured by you in Adapty Dashboard. + /// The values are [AdaptyAccessLevelInfo] objects. + /// Can be null if the customer has no access levels. + public readonly Dictionary AccessLevels; + + /// The keys are product ids from App Store Connect. + /// The values are [AdaptySubscriptionInfo] objects. + /// Can be null if the customer has no subscriptions. + public readonly Dictionary Subscriptions; + + /// The keys are product ids from App Store Connect. + /// The values are array[] of [AdaptyNonSubscriptionInfo] objects. + /// Can be null if the customer has no purchases. + public readonly Dictionary NonSubscriptions; + + internal PurchaserInfo(JSONNode response) + { + ProfileId = response["profile_id"] ?? response["id"]; + CustomerUserId = response["customer_user_id"]; + + AccessLevels = new Dictionary(); + Subscriptions = new Dictionary(); + NonSubscriptions = new Dictionary(); + + var _accessLevels = response["access_levels"] ?? response["paid_access_levels"]; + foreach (var item in _accessLevels) + { + var value = AccessLevelInfoInfoFromJSON(item.Value); + if (value != null) + { + AccessLevels.Add(item.Key, value); + } + } + + var _subscriptions = response["subscriptions"]; + foreach (var item in _subscriptions) + { + var value = SubscriptionInfoFromJSON(item.Value); + if (value != null) + { + Subscriptions.Add(item.Key, value); + } + } + + var _nonSubscriptions = response["non_subscriptions"]; + foreach (var item in _nonSubscriptions) + { + var list = new List(); + foreach (var subitem in item.Value) + { + var value = NonSubscriptionInfoFromJSON(subitem); + if (value != null) { + list.Add(value); + } + } + if (list.Count > 0) + { + NonSubscriptions.Add(item.Key, list.ToArray()); + } + } + } + + public override string ToString() + { + return $"{nameof(ProfileId)}: {ProfileId}, " + + $"{nameof(CustomerUserId)}: {CustomerUserId}, " + + $"{nameof(AccessLevels)}: {AccessLevels}, " + + $"{nameof(Subscriptions)}: {Subscriptions}, " + + $"{nameof(NonSubscriptions)}: {NonSubscriptions}"; + } + } + + + public static PurchaserInfo PurchaserInfoFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try + { + return new PurchaserInfo(response); + } catch (Exception e) + { + Debug.LogError($"Exception on decoding PurchaserInfo: {e} source: {response}"); + return null; + } + } + } +} diff --git a/Assets/AdaptySDK/Models/PurchaserInfo.cs.meta b/Assets/AdaptySDK/Models/PurchaserInfo.cs.meta new file mode 100644 index 0000000..2f5bad7 --- /dev/null +++ b/Assets/AdaptySDK/Models/PurchaserInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8fa93ff4a61a4ece869de15e73dafb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Models/SubscriptionInfo.cs b/Assets/AdaptySDK/Models/SubscriptionInfo.cs new file mode 100644 index 0000000..fe6dd67 --- /dev/null +++ b/Assets/AdaptySDK/Models/SubscriptionInfo.cs @@ -0,0 +1,160 @@ +using System; +using AdaptySDK.SimpleJSON; +using UnityEngine; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class SubscriptionInfo + { + /// Whether the subscription is active. + public readonly bool IsActive; + + /// The identifier of the product in the App Store Connect. + public readonly string VendorProductId; + + /// The store of the purchase. The possible values are: app_store, play_store , adapty. + public readonly string Store; + + /// The time when the subscription was activated. + /// + /// [Nullable] + public readonly DateTime? ActivatedAt; // nullable + + /// The time when the subscription was renewed. + /// + /// [Nullable] + public readonly DateTime? RenewedAt; // nullable + + /// The time when the subscription will expire (could be in the past and could be null for lifetime access). + /// + /// [Nullable] + public readonly DateTime? ExpiresAt; // nullable + + /// The time when the subscription has started (could be in the future). + /// + /// [Nullable] + public readonly DateTime? StartsAt; // nullable + + /// Whether the subscription is active for a lifetime (no expiration date). + /// If set to true you shouldn't check expires_at , or you could just check isActive. + public readonly bool IsLifetime; + + /// The type of active introductory offer. + /// Possible values are: free_trial, pay_as_you_go, pay_up_front. + /// If the value is not null, it means that the offer was applied during the current subscription period. + /// + /// [Nullable] + public readonly string ActiveIntroductoryOfferType; // nullable + + /// The type of active promotional offer. + /// Possible values are: free_trial, pay_as_you_go, pay_up_front. + /// If the value is not null, it means that the offer was applied during the current subscription period. + /// + /// [Nullable] + public readonly string ActivePromotionalOfferType; // nullable + + /// Whether the auto-renewable subscription is set to renew. + public readonly bool WillRenew; + + /// Whether the auto-renewable subscription is in the grace period. + public readonly bool IsInGracePeriod; + + /// The time when the auto-renewable subscription was cancelled. + /// Subscription can still be active, it just means that auto-renewal turned off. + /// Will be set to null if the user reactivates the subscription. + /// + /// [Nullable] + public readonly DateTime? UnsubscribedAt; // nullable + + /// The time when billing issue was detected (Apple was not able to charge the card). + /// Subscription can still be active. Will be set to null if the charge will be made. + /// + /// [Nullable] + public readonly DateTime? BillingIssueDetectedAt; // nullable + + /// Whether the product was purchased in the sandbox environment. + public readonly bool IsSandbox; + + /// Transaction id from the App Store. + /// + /// [Nullable] + public readonly string VendorTransactionId; // nullable + + /// Original transaction id from the App Store. + /// For auto-renewable subscription, this will be the id of the first transaction in the subscription. + /// + /// [Nullable] + public readonly string VendorOriginalTransactionId; // nullable + + /// The reason why the subscription was cancelled. + /// Possible values are: voluntarily_cancelled, billing_error, refund, price_increase, product_was_not_available, unknown. + /// + /// [Nullable] + public readonly string CancellationReason; // nullable + + /// Whether the purchase was refunded. + public readonly bool IsRefund; + + internal SubscriptionInfo(JSONNode response) + { + IsActive = response["is_active"]; + VendorProductId = response["vendor_product_id"]; + Store = response["store"]; + ActivatedAt = NullableDateTimeFromJSON(response["activated_at"]); + RenewedAt = NullableDateTimeFromJSON(response["renewed_at"]); + ExpiresAt = NullableDateTimeFromJSON(response["expires_at"]); + StartsAt = NullableDateTimeFromJSON(response["starts_at"]); + IsLifetime = response["is_lifetime"]; + ActiveIntroductoryOfferType = response["active_introductory_offer_type"]; + ActivePromotionalOfferType = response["active_promotional_offer_type"]; + WillRenew = response["will_renew"]; + IsInGracePeriod = response["is_in_grace_period"]; + UnsubscribedAt = NullableDateTimeFromJSON(response["unsubscribed_at"]); + BillingIssueDetectedAt = NullableDateTimeFromJSON(response["billing_issue_detected_at"]); + IsSandbox = response["is_sandbox"]; + VendorTransactionId = response["vendor_transaction_id"]; + VendorOriginalTransactionId = response["vendor_original_transaction_id"]; + CancellationReason = response["cancellation_reason"]; + IsRefund = response["is_refund"]; + } + + public override string ToString() + { + return $"{nameof(IsActive)}: {IsActive}, " + + $"{nameof(VendorProductId)}: {VendorProductId}, " + + $"{nameof(Store)}: {Store}, " + + $"{nameof(ActivatedAt)}: {ActivatedAt}, " + + $"{nameof(RenewedAt)}: {RenewedAt}, " + + $"{nameof(ExpiresAt)}: {ExpiresAt}, " + + $"{nameof(StartsAt)}: {StartsAt}, " + + $"{nameof(IsLifetime)}: {IsLifetime}, " + + $"{nameof(ActiveIntroductoryOfferType)}: {ActiveIntroductoryOfferType}, " + + $"{nameof(ActivePromotionalOfferType)}: {ActivePromotionalOfferType}, " + + $"{nameof(WillRenew)}: {WillRenew}, " + + $"{nameof(IsInGracePeriod)}: {IsInGracePeriod}, " + + $"{nameof(UnsubscribedAt)}: {UnsubscribedAt}, " + + $"{nameof(BillingIssueDetectedAt)}: {BillingIssueDetectedAt}, " + + $"{nameof(IsSandbox)}: {IsSandbox}, " + + $"{nameof(VendorTransactionId)}: {VendorTransactionId}, " + + $"{nameof(VendorOriginalTransactionId)}: {VendorOriginalTransactionId}, " + + $"{nameof(CancellationReason)}: {CancellationReason}, " + + $"{nameof(IsRefund)}: {IsRefund}"; + } + } + + public static SubscriptionInfo SubscriptionInfoFromJSON(JSONNode response) + { + if (response == null || response.IsNull || !response.IsObject) return null; + try { + return new SubscriptionInfo(response); + } + catch (Exception e) + { + Debug.LogError($"Exception on decoding SubscriptionInfo: {e} source: {response}"); + return null; + } + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Models/SubscriptionInfo.cs.meta b/Assets/AdaptySDK/Models/SubscriptionInfo.cs.meta new file mode 100644 index 0000000..5d175fe --- /dev/null +++ b/Assets/AdaptySDK/Models/SubscriptionInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ced3dfacc4f24e3d891cdfd1c7532a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins.meta b/Assets/AdaptySDK/Plugins.meta similarity index 77% rename from AdaptyUnityProject/Assets/Plugins.meta rename to Assets/AdaptySDK/Plugins.meta index fc47124..a770599 100644 --- a/AdaptyUnityProject/Assets/Plugins.meta +++ b/Assets/AdaptySDK/Plugins.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 64f42b91a04b34a5587607c8d5d16eca +guid: 82e2ef044ea65497dbbe52c1c600b80b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/AdaptySDK/Plugins/AdaptyNoop.cs b/Assets/AdaptySDK/Plugins/AdaptyNoop.cs new file mode 100644 index 0000000..cfa02ea --- /dev/null +++ b/Assets/AdaptySDK/Plugins/AdaptyNoop.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; + +namespace AdaptySDK.Noop +{ + internal static class AdaptyNoop + { + //internal static void Activate(string key, bool observeMode, string customerUserId) { } + + internal static Adapty.LogLevel GetLogLevel() { return Adapty.LogLevel.None; } + + internal static void SetLogLevel(Adapty.LogLevel value) { } + + internal static void Identify(string customerUserId, Action completionHandler) { completionHandler(null); } + + internal static void Logout(Action completionHandler) { completionHandler(null); } + + internal static void GetPaywalls(bool forceUpdate, Action completionHandler) { completionHandler(null, null); } + + internal static void GetPurchaserInfo(bool forceUpdate, Action completionHandler) { completionHandler(null, null); } + + internal static void RestorePurchases(Action completionHandler) { completionHandler(null, null); } + + internal static void MakePurchase(string productId, string variationId, Action completionHandler) { completionHandler(null, null); } + + internal static void LogShowPaywall(Adapty.Paywall paywall, Action completionHandler) { completionHandler(null); } + + internal static void SetFallbackPaywalls(string paywalls, Action completionHandler) { completionHandler(null); } + + internal static void GetPromo(Action completionHandler) { completionHandler(null, null); } + + internal static void UpdateProfile(Adapty.ProfileParameterBuilder param, Action completionHandler) { completionHandler(null); } + + internal static void UpdateAttribution(string jsonstring, Adapty.AttributionNetwork source, string networkUserId, Action completionHandler) { completionHandler(null); } + + internal static void UpdateAttribution(Dictionary attribution, Adapty.AttributionNetwork source, string networkUserId, Action completionHandler) { completionHandler(null); } + + internal static void SetExternalAnalyticsEnabled(bool enabled, Action completionHandler) { completionHandler(null); } + + internal static void SetVariationForTransaction(string variationId, string transactionId, Action completionHandler) { completionHandler(null); } + } + + internal static class AdaptyNoopCallbackAction + { + internal static void InitializeOnce() { } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Plugins/AdaptyNoop.cs.meta b/Assets/AdaptySDK/Plugins/AdaptyNoop.cs.meta new file mode 100644 index 0000000..57ad8f5 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/AdaptyNoop.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 661775f8130a447cea1dcc53c42e7c71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/Android.meta b/Assets/AdaptySDK/Plugins/Android.meta similarity index 77% rename from AdaptyUnityProject/Assets/Adapty/Plugins/Android.meta rename to Assets/AdaptySDK/Plugins/Android.meta index ed7a4b7..a57cef7 100644 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/Android.meta +++ b/Assets/AdaptySDK/Plugins/Android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d259292156f2f40e6a850801c21af30a +guid: 2bdcb36fe142644f59000f3a4129199a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/AdaptySDK/Plugins/Android/AdaptyAndroid.cs b/Assets/AdaptySDK/Plugins/Android/AdaptyAndroid.cs new file mode 100644 index 0000000..a5e7235 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/Android/AdaptyAndroid.cs @@ -0,0 +1,268 @@ +using System; +using System.Collections.Generic; +using AdaptySDK.SimpleJSON; +using UnityEngine; +namespace AdaptySDK.Android +{ +#if UNITY_ANDROID +using AdaptyAndroidCallback = AdaptyAndroidCallbackAction; + +internal static class AdaptyAndroid +{ + private static bool ResponseHasError(JSONNode response) + { + if (response == null || response.IsNull) return false; + var error = response["error"]; + return error != null && !error.IsNull; + } + + private static AndroidJavaClass AdaptyAndroidClass = new AndroidJavaClass("com.adapty.unity.AdaptyAndroidWrapper"); + + //internal static void Activate(string key, bool observeMode, string customerUserId) + //{ + // AdaptyAndroidClass.CallStatic("activate", key, customerUserId, observeMode); + //} + + internal static Adapty.LogLevel GetLogLevel() { return Adapty.LogLevel.None; } + + internal static void SetLogLevel(Adapty.LogLevel value) + { + AdaptyAndroidClass.CallStatic("setLogLevel", value.LogLevelToString()); + } + + + internal static void Identify(string customerUserId, Action completionHandler) + { + AdaptyAndroidClass.CallStatic("identify", customerUserId, AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (ResponseHasError(response)) + { + completionHandler(new Adapty.Error(response["error"])); + } + else + { + completionHandler(null); + } + + })); + } + + internal static void Logout(Action completionHandler) + { + AdaptyAndroidClass.CallStatic("logout", AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + internal static void GetPaywalls(bool forceUpdate, Action completionHandler) + { + AdaptyAndroidClass.CallStatic("getPaywalls", forceUpdate, AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(new Adapty.GetPaywallsResponse(response["success"]), null); + } + })); + } + + internal static void GetPurchaserInfo(bool forceUpdate, Action completionHandler) + { + AdaptyAndroidClass.CallStatic("getPurchaserInfo", forceUpdate, AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(Adapty.PurchaserInfoFromJSON(response["success"]), null); + } + })); + } + + internal static void RestorePurchases(Action completionHandler) + { + AdaptyAndroidClass.CallStatic("restorePurchases", AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(new Adapty.RestorePurchasesResponse(response["success"]), null); + } + })); + } + + internal static void MakePurchase(string productId, string variationId, Adapty.AndroidSubscriptionUpdate subscriptionUpdate, Action completionHandler) + { + AdaptyAndroidClass.CallStatic("makePurchase", productId, variationId, (subscriptionUpdate == null) ? null: subscriptionUpdate.ToJSONString(), AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(new Adapty.MakePurchaseResponse(response["success"]), null); + } + })); + } + + internal static void LogShowPaywall(Adapty.Paywall paywall, Action completionHandler) { + AdaptyAndroidClass.CallStatic("logShowPaywall", paywall.VariationId, AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + internal static void SetFallbackPaywalls(string paywalls, Action completionHandler) { + AdaptyAndroidClass.CallStatic("setFallbackPaywalls", paywalls, AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + internal static void GetPromo(Action completionHandler) { + AdaptyAndroidClass.CallStatic("getPromo", AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(Adapty.PromoFromJSON(response["success"]), null); + } + })); + } + + internal static void UpdateProfile(Adapty.ProfileParameterBuilder param, Action completionHandler) { + AdaptyAndroidClass.CallStatic("updateProfile", param.ToJSONString(), AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + internal static void UpdateAttribution(string attributionJson, Adapty.AttributionNetwork source, string networkUserId, Action completionHandler) + { + AdaptyAndroidClass.CallStatic("updateAttribution", attributionJson, source.AttributionNetworkToString(), networkUserId, AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + internal static void UpdateAttribution(Dictionary attribution, Adapty.AttributionNetwork source, string networkUserId, Action completionHandler) { + UpdateAttribution(DictionaryExtensions.ToJSON(attribution).ToString(), source, networkUserId, completionHandler); + } + + internal static void SetExternalAnalyticsEnabled(bool enabled, Action completionHandler) { + AdaptyAndroidClass.CallStatic("setExternalAnalyticsEnabled", enabled, AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + + internal static void SetVariationForTransaction(string variationId, string transactionId, Action completionHandler) { + AdaptyAndroidClass.CallStatic("setTransactionVariationId", transactionId, variationId, AdaptyAndroidCallback.Action((string json) => + { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + + internal static void NewPushToken(string pushToken) + { + AdaptyAndroidClass.CallStatic("newPushToken", pushToken); + } + + internal static void PushReceived(string pushMessageJson) + { + AdaptyAndroidClass.CallStatic("pushReceived", pushMessageJson); + } + + } +#endif +} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyAndroid.cs.meta b/Assets/AdaptySDK/Plugins/Android/AdaptyAndroid.cs.meta similarity index 83% rename from AdaptyUnityProject/Assets/Adapty/AdaptyAndroid.cs.meta rename to Assets/AdaptySDK/Plugins/Android/AdaptyAndroid.cs.meta index dd6bdce..f4841b6 100644 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyAndroid.cs.meta +++ b/Assets/AdaptySDK/Plugins/Android/AdaptyAndroid.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1b987de2701e74c029293acf52fb9773 +guid: 422520f1630e94ae5ad0ecfb84acde84 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/Plugins/Android/AdaptyAndroidCallbackAction.cs b/Assets/AdaptySDK/Plugins/Android/AdaptyAndroidCallbackAction.cs new file mode 100644 index 0000000..885ea9d --- /dev/null +++ b/Assets/AdaptySDK/Plugins/Android/AdaptyAndroidCallbackAction.cs @@ -0,0 +1,62 @@ +using System; +using UnityEngine; + +namespace AdaptySDK.Android +{ +#if UNITY_ANDROID + internal static class AdaptyAndroidCallbackAction + { + internal class MessageHandler : AndroidJavaProxy + { + internal MessageHandler() : base("com.adapty.unity.AdaptyAndroidMessageHandler") { } + + public void onMessage(string type, string json) + { + Adapty.OnMessage(type, json); + } + } + + internal class CallbackHandler : AndroidJavaProxy + { + private readonly Action _resultHandler; + + internal CallbackHandler(Action resultHandler) : base("com.adapty.unity.AdaptyAndroidCallback") + { + _resultHandler = resultHandler; + } + + public void onHandleResult(string result) + { + if (_resultHandler == null) return; + _resultHandler.Invoke(result); + } + } + + public static AndroidJavaProxy Action(Action action) + { + return new CallbackHandler(action); + } + +#if !UNITY_EDITOR + + private static readonly object m_Lock = new object(); + + private static bool m_IsInitialized = false; + + internal static void InitializeOnce() + { + lock(m_Lock) { + if (!m_IsInitialized) { + m_IsInitialized = true; + new AndroidJavaClass("com.adapty.unity.AdaptyAndroidWrapper").CallStatic("registerMessageHandler", new MessageHandler()); + } + } + } +#else + internal static void InitializeOnce() { } +#endif + + } +#endif + +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Plugins/Android/AdaptyAndroidCallbackAction.cs.meta b/Assets/AdaptySDK/Plugins/Android/AdaptyAndroidCallbackAction.cs.meta new file mode 100644 index 0000000..b9e1cb3 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/Android/AdaptyAndroidCallbackAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86fa29bc97b8844bb8119309f9e0656d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS.meta b/Assets/AdaptySDK/Plugins/iOS.meta similarity index 77% rename from AdaptyUnityProject/Assets/Adapty/Plugins/iOS.meta rename to Assets/AdaptySDK/Plugins/iOS.meta index 2d3fec0..260c558 100644 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS.meta +++ b/Assets/AdaptySDK/Plugins/iOS.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 74838b3811fd649a09ca077bd158a078 +guid: 71cce5b0b6d7140869639907aeafcd07 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/AdaptySDK/Plugins/iOS/AdaptyIOS.cs b/Assets/AdaptySDK/Plugins/iOS/AdaptyIOS.cs new file mode 100644 index 0000000..be57db7 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/AdaptyIOS.cs @@ -0,0 +1,339 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using AdaptySDK.SimpleJSON; + +namespace AdaptySDK.iOS +{ +#if UNITY_IOS + internal static class AdaptyIOS + { + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_setIdfaCollectionDisabled")] + internal static extern void SetIdfaCollectionDisabled(bool disabled); + + //[DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_activate")] + //internal static extern void Activate(string key, bool observeMode, string customerUserId); + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_getLogLevel")] + private static extern string _GetLogLevel(); + + internal static Adapty.LogLevel GetLogLevel() + { + return Adapty.LogLevelFromString(_GetLogLevel()); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_setLogLevel")] + private static extern void _SetLogLevel(string value); + + internal static void SetLogLevel(Adapty.LogLevel value) + { + _SetLogLevel(value.LogLevelToString()); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_identify")] + private static extern void _Identify(string customerUserId, IntPtr callback); + + internal static void Identify(string customerUserId, Action completionHandler) + { + _Identify(customerUserId, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } else + { + completionHandler(null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_logout")] + private static extern void _Logout(IntPtr callback); + + internal static void Logout(Action completionHandler) + { + _Logout(AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_getPaywalls")] + private static extern void _GetPaywalls(bool forceUpdate, IntPtr callback); + + internal static void GetPaywalls(bool forceUpdate, Action completionHandler) + { + _GetPaywalls(forceUpdate, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(new Adapty.GetPaywallsResponse(response["success"]), null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_getPurchaserInfo")] + private static extern void _GetPurchaserInfo(bool forceUpdate, IntPtr callback); + + internal static void GetPurchaserInfo(bool forceUpdate, Action completionHandler) + { + _GetPurchaserInfo(forceUpdate, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(Adapty.PurchaserInfoFromJSON(response["success"]), null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_restorePurchases")] + private static extern void _RestorePurchases(IntPtr callback); + + internal static void RestorePurchases(Action completionHandler) + { + _RestorePurchases(AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(new Adapty.RestorePurchasesResponse(response["success"]), null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_makePurchase")] + private static extern void _MakePurchase(string productId, string variationId, string offerId, IntPtr callback); + + internal static void MakePurchase(string productId, string variationId, string offerId, Action completionHandler) + { + _MakePurchase(productId, variationId, offerId, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(new Adapty.MakePurchaseResponse(response["success"]), null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_makeDeferredPurchase")] + private static extern void _MakeDeferredPurchase(string productId, IntPtr callback); + + internal static void MakeDeferredPurchase(string productId, Action completionHandler) + { + _MakeDeferredPurchase(productId, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(new Adapty.MakePurchaseResponse(response["success"]), null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_logShowPaywall")] + private static extern void _LogShowPaywall(string variationId, IntPtr callback); + + internal static void LogShowPaywall(Adapty.Paywall paywall, Action completionHandler) + { + _LogShowPaywall(paywall.VariationId, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_setFallbackPaywalls")] + private static extern void _SetFallbackPaywalls(string paywalls, IntPtr callback); + + internal static void SetFallbackPaywalls(string paywalls, Action completionHandler) + { + _SetFallbackPaywalls(paywalls, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_getPromo")] + private static extern void _GetPromo(IntPtr callback); + + internal static void GetPromo(Action completionHandler) + { + _GetPromo(AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(null, Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(Adapty.PromoFromJSON(response["success"]), null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_updateProfile")] + private static extern void _UpdateProfile(string param, IntPtr callback); + + internal static void UpdateProfile(Adapty.ProfileParameterBuilder param, Action completionHandler) + { + _UpdateProfile(param.ToJSONString(), AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_updateAttribution")] + private static extern void _UpdateAttribution(string attributions, string source, string networkUserId, IntPtr callback); + + internal static void UpdateAttribution(string jsonstring, Adapty.AttributionNetwork source, string networkUserId, Action completionHandler) + { + _UpdateAttribution(jsonstring, source.AttributionNetworkToString(), networkUserId, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + internal static void UpdateAttribution(Dictionary attribution, Adapty.AttributionNetwork source, string networkUserId, Action completionHandler) + { + UpdateAttribution(DictionaryExtensions.ToJSON(attribution).ToString(),source,networkUserId,completionHandler); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_setExternalAnalyticsEnabled")] + private static extern void _SetExternalAnalyticsEnabled(bool enabled, IntPtr callback); + + internal static void SetExternalAnalyticsEnabled(bool enabled, Action completionHandler) + { + _SetExternalAnalyticsEnabled(enabled, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_setVariationForTransaction")] + private static extern void _SetVariationForTransaction(string variationId, string transactionId, IntPtr callback); + + internal static void SetVariationForTransaction(string variationId, string transactionId, Action completionHandler) + { + _SetVariationForTransaction(variationId, transactionId, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_getApnsToken")] + internal static extern string GetApnsToken(); + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_setApnsToken")] + internal static extern void SetApnsToken(string apnsToken); + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_handlePushNotification")] + private static extern void _HandlePushNotification(string userInfo, IntPtr callback); + + internal static void HandlePushNotification(string userInfo, Action completionHandler) + { + _HandlePushNotification(userInfo, AdaptyIOSCallbackAction.ActionToIntPtr((string json) => { + if (completionHandler == null) return; + var response = (string.IsNullOrEmpty(json)) ? new JSONObject() : JSON.Parse(json); + if (Adapty.ResponseHasError(response)) + { + completionHandler(Adapty.ErrorFromJSON(response["error"])); + } + else + { + completionHandler(null); + } + })); + } + + internal static void HandlePushNotification(Dictionary userInfo, Action completionHandler) + { + HandlePushNotification(DictionaryExtensions.ToJSON(userInfo).ToString(), completionHandler); + } + + [DllImport("__Internal", CharSet = CharSet.Ansi, EntryPoint = "AdaptyUnity_presentCodeRedemptionSheet")] + internal static extern void PresentCodeRedemptionSheet(); + + } +#endif +} \ No newline at end of file diff --git a/Assets/AdaptySDK/Plugins/iOS/AdaptyIOS.cs.meta b/Assets/AdaptySDK/Plugins/iOS/AdaptyIOS.cs.meta new file mode 100644 index 0000000..0c81828 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/AdaptyIOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08d6cfdacf69e40beac76b819a5d5e00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/AdaptyIOSCallbackAction.cs b/Assets/AdaptySDK/Plugins/iOS/AdaptyIOSCallbackAction.cs new file mode 100644 index 0000000..f78b1cd --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/AdaptyIOSCallbackAction.cs @@ -0,0 +1,82 @@ +using System; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace AdaptySDK.iOS +{ +#if UNITY_IOS + internal static class AdaptyIOSCallbackAction { + private delegate void MessageDelegate(string type, string data); + private delegate void CallbackDelegate(IntPtr actionPtr, string data); + + + [AOT.MonoPInvokeCallback(typeof(MessageDelegate))] + private static void OnMessage(string type, string json) { + Adapty.OnMessage(type, json); + } + + [AOT.MonoPInvokeCallback(typeof(CallbackDelegate))] + private static void OnCallback(IntPtr actionPtr, string data) { + if(IntPtr.Zero.Equals(actionPtr)) { return; } + var action = IntPtrToObject(actionPtr, true); + if(action == null) { return; } + + try { + var paramTypes = action.GetType().GetGenericArguments(); + var arg = paramTypes.Length == 0 ? null : data; + + var invokeMethod = action.GetType().GetMethod("Invoke", paramTypes.Length == 0 ? new Type[0] : new []{ paramTypes[0] }); + if(invokeMethod != null) { + invokeMethod.Invoke(action, paramTypes.Length == 0 ? new object[] { } : new[] { arg }); + } + else { + Debug.LogError("Failed to invoke callback " + action + " with arg " + arg + ": invoke method not found"); + } + } + catch(Exception e) { + Debug.LogError("Failed to invoke callback " + action + " with arg " + data + ": " + e.Message); + } + } + + internal static object IntPtrToObject(IntPtr handle, bool unpinHandle) { + if(IntPtr.Zero.Equals(handle)) { return null; } + var gcHandle = GCHandle.FromIntPtr(handle); + var result = gcHandle.Target; + if(unpinHandle) { gcHandle.Free(); } + return result; + } + + internal static IntPtr ObjectToIntPtr(object obj) { + if(obj == null) { return IntPtr.Zero; } + var handle = GCHandle.Alloc(obj); + return GCHandle.ToIntPtr(handle); + } + internal static IntPtr ActionToIntPtr(Action action) { + return ObjectToIntPtr(action); + } + +#if !UNITY_EDITOR + + private static readonly object m_Lock = new object(); + private static bool m_IsInitialized = false; + + internal static void InitializeOnce() { + lock (m_Lock) + { + if (!m_IsInitialized) + { + m_IsInitialized = true; + RegisterCallbackDelegate(OnMessage, OnCallback); + } + } + } +#else + internal static void InitializeOnce() { } +#endif + + + [DllImport("__Internal", EntryPoint = "AdaptyUnity_registerCallbackHandler")] + private static extern void RegisterCallbackDelegate(MessageDelegate messageDelegate,CallbackDelegate callbackDelegate); + } +#endif + } \ No newline at end of file diff --git a/Assets/AdaptySDK/Plugins/iOS/AdaptyIOSCallbackAction.cs.meta b/Assets/AdaptySDK/Plugins/iOS/AdaptyIOSCallbackAction.cs.meta new file mode 100644 index 0000000..470df22 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/AdaptyIOSCallbackAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62dd7edef10924d11acd32a0b69ed1eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Adapty/Editor.meta b/Assets/AdaptySDK/Plugins/iOS/Editor.meta similarity index 77% rename from AdaptyUnityProject/Assets/Adapty/Editor.meta rename to Assets/AdaptySDK/Plugins/iOS/Editor.meta index e242a49..6dcb794 100644 --- a/AdaptyUnityProject/Assets/Adapty/Editor.meta +++ b/Assets/AdaptySDK/Plugins/iOS/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1f9ee5d9201cd4e08a83baf3132aa783 +guid: eb1009f043ec048ea8a199733aca0ff2 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/AdaptySDK/Plugins/iOS/Editor/AdaptySDKPostProcess.cs b/Assets/AdaptySDK/Plugins/iOS/Editor/AdaptySDKPostProcess.cs new file mode 100644 index 0000000..ee5fed4 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Editor/AdaptySDKPostProcess.cs @@ -0,0 +1,67 @@ +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEngine; + +using System.IO; + +#if UNITY_IOS +using UnityEditor.iOS.Xcode; +#endif + +public static class AdaptySDKPostProcess { + + [PostProcessBuild] + public static void OnPostProcessBuild(BuildTarget buildTarget, string buildPath) { + if (buildTarget == BuildTarget.iOS) { + OnPostProcessBuildIOS(buildTarget, buildPath); + } + } + + + static void OnPostProcessBuildIOS(BuildTarget buildTarget, string buildPath) { +#if UNITY_IOS + var projPath = buildPath + "/Unity-Iphone.xcodeproj/project.pbxproj"; + var proj = new PBXProject(); + proj.ReadFromFile(projPath); + + var testTargetGuid = proj.TargetGuidByName(PBXProject.GetUnityTestTargetName()); + var mainTargetGuid = proj.GetUnityMainTargetGuid(); + + UpdateBuildProperties(proj, testTargetGuid); + CopyAdaptyInfoPlist(buildPath, proj, mainTargetGuid); + + proj.WriteToFile(projPath); +#endif + } + +#if UNITY_IOS + static void UpdateBuildProperties(PBXProject project, string targetGuid) { + project.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO"); + project.SetBuildProperty(targetGuid, "SWIFT_OBJC_BRIDGING_HEADER", "Libraries/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin-Bridging-Header.h"); + project.SetBuildProperty(targetGuid, "SWIFT_OBJC_INTERFACE_HEADER_NAME", "AdaptyUnityPlugin-Swift.h"); + + + project.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks $(PROJECT_DIR)/lib/$(CONFIGURATION) $(inherited)"); + project.AddBuildProperty(targetGuid, "FRAMERWORK_SEARCH_PATHS", + "$(inherited) $(PROJECT_DIR) $(PROJECT_DIR)/Frameworks"); + project.AddBuildProperty(targetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES"); + project.AddBuildProperty(targetGuid, "DYLIB_INSTALL_NAME_BASE", "@rpath"); + project.AddBuildProperty(targetGuid, "LD_DYLIB_INSTALL_NAME", + "@executable_path/../Frameworks/$(EXECUTABLE_PATH)"); + project.AddBuildProperty(targetGuid, "DEFINES_MODULE", "YES"); + project.AddBuildProperty(targetGuid, "SWIFT_VERSION", "4.0"); + project.AddBuildProperty(targetGuid, "COREML_CODEGEN_LANGUAGE", "Swift"); + } + + static void CopyAdaptyInfoPlist(string buildPath, PBXProject project, string targetGuid) { + var fileName = "Adapty-Info.plist"; + var plistPath = Path.Combine(Application.dataPath, fileName); + var destinationPath = Path.Combine(buildPath, fileName); + + File.Copy(plistPath, destinationPath, true); + + var fileGuid = project.AddFile(fileName, fileName); + project.AddFileToBuild(targetGuid, fileGuid); + } +#endif +} diff --git a/Assets/AdaptySDK/Plugins/iOS/Editor/AdaptySDKPostProcess.cs.meta b/Assets/AdaptySDK/Plugins/iOS/Editor/AdaptySDKPostProcess.cs.meta new file mode 100644 index 0000000..ee157ef --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Editor/AdaptySDKPostProcess.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84088db4a6b7f41d9888447bade7b345 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source.meta b/Assets/AdaptySDK/Plugins/iOS/Source.meta new file mode 100644 index 0000000..b368cce --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bac30689e3d8d424088b8f8b91250021 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyAppStateListener.mm b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyAppStateListener.mm new file mode 100644 index 0000000..72663d0 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyAppStateListener.mm @@ -0,0 +1,67 @@ +#import +#import "AppDelegateListener.h" +#include "UnityFramework/UnityFramework-Swift.h" +#include "AdaptyUnityPluginCallback.h" + +@interface ApplicationStateListener : NSObject ++ (instancetype)sharedInstance; +@end + +@implementation ApplicationStateListener + +static ApplicationStateListener* _applicationStateListenerInstance = [[ApplicationStateListener alloc] init]; + ++ (instancetype)sharedInstance { + return _applicationStateListenerInstance; +} + +- (instancetype)init { + self = [super init]; + if (self) { + UnityRegisterAppDelegateListener(self); + } + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (NSDictionary *)infoDictionary { + NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Adapty-Info" ofType:@"plist"]; + NSData *plistData = [NSData dataWithContentsOfFile:plistPath options:0 error:NULL]; + + if(!plistData) return [[NSBundle mainBundle] infoDictionary]; + + NSError *readingError = nil; + NSPropertyListSerialization *plist = [NSPropertyListSerialization propertyListWithData:plistData options:NSPropertyListMutableContainers format:nil error:&readingError]; + + if (plist) { + return (NSDictionary *) plist; + } else { + return [[NSBundle mainBundle] infoDictionary]; + } +} + +- (void)applicationWillFinishLaunchingWithOptions:(NSNotification *)notification { + NSDictionary *infoDictionary = [self infoDictionary]; + NSString *apiKey = infoDictionary[@"AdaptyPublicSdkKey"]; + BOOL observerMode = [infoDictionary[@"AdaptyObserverMode"] boolValue]; + BOOL idfaCollectionDisabled = [infoDictionary[@"AdaptyIDFACollectionDisabled"] boolValue]; + + [[AdaptyUnityPlugin shared] + setIdfaCollectionDisabled: idfaCollectionDisabled + ]; + + [[AdaptyUnityPlugin shared] + activate: apiKey + observerMode: observerMode + customerUserId: nil + ]; + + [[AdaptyUnityPlugin shared] + registerMessageDelegate:^(NSString * _Nonnull type, NSString * _Nonnull data) { + SendMessageToUnity(type, data); + }]; +} +@end diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyAppStateListener.mm.meta similarity index 94% rename from AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm.meta rename to Assets/AdaptySDK/Plugins/iOS/Source/AdaptyAppStateListener.mm.meta index 555c8d1..af3d9f7 100644 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyiOSWrapper.mm.meta +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyAppStateListener.mm.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3b3d6e716938c4a868e03baca967da2d +guid: bce2cfa5df49a494e9e65514af807d4d PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyDelegate.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyDelegate.swift new file mode 100644 index 0000000..7e316ac --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyDelegate.swift @@ -0,0 +1,34 @@ +import Adapty + +extension AdaptyUnityPlugin { + static let delegate = AdaptyDelegateWrapper() + public typealias MessageDelegate = (String, String) -> Void + private static var _messageDelegate: MessageDelegate? + + @objc public func registerMessageDelegate(_ delegate: MessageDelegate? = nil) { + AdaptyUnityPlugin._messageDelegate = delegate + } + + class AdaptyDelegateWrapper: AdaptyDelegate { + public func didReceiveUpdatedPurchaserInfo(_ purchaserInfo: PurchaserInfoModel) { + guard let jsonString = AdaptyUnityPlugin.toJSONString(purchaserInfo) else { return } + AdaptyUnityPlugin._messageDelegate?("purchaser_info_update", jsonString) + } + + public func didReceivePromo(_ promo: PromoModel) { + guard let jsonString = AdaptyUnityPlugin.toJSONString(promo) else { return } + AdaptyUnityPlugin._messageDelegate?("promo_received", jsonString) + } + + public func paymentQueue(shouldAddStorePaymentFor product: ProductModel, defermentCompletion makeDeferredPurchase: @escaping DeferredPurchaseCompletion) { + guard let jsonString = AdaptyUnityPlugin.toJSONString(product) else { return } + AdaptyUnityPlugin.deferredPurchases[product.vendorProductId] = makeDeferredPurchase + AdaptyUnityPlugin._messageDelegate?("deferred_purchase", jsonString) + } + + public func didReceivePaywallsForConfig(paywalls: [PaywallModel]) { + guard let jsonString = AdaptyUnityPlugin.toJSONString(paywalls) else { return } + AdaptyUnityPlugin._messageDelegate?("remote_config_update", jsonString) + } + } +} diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyDelegate.swift.meta similarity index 94% rename from AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm.meta rename to Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyDelegate.swift.meta index f5cf283..edf5e30 100644 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyAppController.mm.meta +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyDelegate.swift.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dd53eba00aa4f4ed7a8a9e7f378c73b8 +guid: 7cd3512bd05df459caa59cf1a4afd275 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyResult.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyResult.swift new file mode 100644 index 0000000..15055dd --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyResult.swift @@ -0,0 +1,27 @@ +import Adapty + +extension AdaptyUnityPlugin { + enum AdaptyResult: Encodable where T: Encodable { + case success(T?) + case error(AdaptyError) + + enum CodingKeys: String, CodingKey { + case success + case error + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .success(value): + if let value = value { + try container.encode(value, forKey: .success) + } else { + try container.encodeNil(forKey: .success) + } + case let .error(value): + try container.encode(value, forKey: .error) + } + } + } +} diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyModels.mm.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyResult.swift.meta similarity index 94% rename from AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyModels.mm.meta rename to Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyResult.swift.meta index 1e5a0ad..1b152b5 100644 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyModels.mm.meta +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+AdaptyResult.swift.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 211abd557976f49d3a859b72ff7aa5a4 +guid: 7f90827338d9c4db6b8741b2b407a59d PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Cache.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Cache.swift new file mode 100644 index 0000000..2f8da20 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Cache.swift @@ -0,0 +1,43 @@ +import Adapty + +extension AdaptyUnityPlugin { + static let productCache = ProductCache() + static var deferredPurchases = [String: DeferredPurchaseCompletion]() + + class ProductCache { + private var paywalls = [PaywallModel]() + private var products = [ProductModel]() + + func clear() { + paywalls.removeAll() + products.removeAll() + } + + func add(_ products: [ProductModel]?) { + self.products.removeAll() + if let products = products { + self.products.append(contentsOf: products) + } + } + + func add(_ paywalls: [PaywallModel]?) { + self.paywalls.removeAll() + if let paywalls = paywalls { + self.paywalls.append(contentsOf: paywalls) + } + } + + func paywall(byVariationId variationId: String?) -> PaywallModel? { + guard let variationId = variationId else { return nil } + return paywalls.first(where: { $0.variationId == variationId }) + } + + func product(byId productId: String, withVariationId variationId: String?) -> ProductModel? { + guard let paywall = paywall(byVariationId: variationId) else { + return products.first(where: { $0.vendorProductId == productId }) + } + + return paywall.products.first(where: { $0.vendorProductId == productId }) + } + } +} diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Cache.swift.meta similarity index 94% rename from AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm.meta rename to Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Cache.swift.meta index dfdb687..d3b1c48 100644 --- a/AdaptyUnityProject/Assets/Adapty/Plugins/iOS/AdaptyUnityUtils.mm.meta +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Cache.swift.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fbd7a701783db4bbdbe69b124b48fba1 +guid: 772ecc6e4540e4245bfa6c5bdd18eafc PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Codable.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Codable.swift new file mode 100644 index 0000000..550e00a --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Codable.swift @@ -0,0 +1,198 @@ +import Adapty + +protocol StringSerializable { + init(serializingString value: String) throws + var serializingString: String { get throws } +} + +extension AdaptyLogLevel: StringSerializable, Codable { + private enum CodingValues: String { + case none + case verbose + case errors + case all + } + + init(serializingString value: String) throws { + guard let value = CodingValues(rawValue: value) else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "unknown value")) + } + switch value { + case .none: self = .none + case .verbose: self = .verbose + case .errors: self = .errors + case .all: self = .all + } + } + + var serializingString: String { + let value: CodingValues + switch self { + case .none: value = .none + case .errors: value = .errors + case .verbose: value = .verbose + case .all: value = .all + } + return value.rawValue + } + + public init(from decoder: Decoder) throws { + try self.init(serializingString: try decoder.singleValueContainer().decode(String.self)) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(serializingString) + } +} + +extension AdaptyError: Encodable { + enum CodingKeys: String, CodingKey { + case code + case message + case domain + case adaptyCode = "adapty_code" + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + + try container.encode(code, forKey: .code) + try container.encode(localizedDescription, forKey: .message) + try container.encode(domain, forKey: .domain) + try container.encode(adaptyErrorCode.rawValue, forKey: .adaptyCode) + } +} + +extension AttributionNetwork: StringSerializable, Codable { + private enum CodingValues: String { + case adjust + case appsflyer + case branch + case appleSearchAds = "apple_search_ads" + case custom + } + + init(serializingString value: String) throws { + guard let value = CodingValues(rawValue: value) else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "unknown value")) + } + + switch value { + case .adjust: self = .adjust + case .appsflyer: self = .appsflyer + case .branch: self = .branch + case .appleSearchAds: self = .appleSearchAds + case .custom: self = .custom + } + } + + var serializingString: String { + let value: CodingValues + switch self { + case .adjust: value = .adjust + case .appsflyer: value = .appsflyer + case .branch: value = .branch + case .appleSearchAds: value = .appleSearchAds + case .custom: value = .custom + } + return value.rawValue + } + + public init(from decoder: Decoder) throws { + try self.init(serializingString: try decoder.singleValueContainer().decode(String.self)) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(serializingString) + } +} + +extension Gender: StringSerializable, Codable { + private enum CodingValues: String { + case female = "f" + case male = "m" + case other = "o" + } + + init(serializingString value: String) throws { + guard let value = CodingValues(rawValue: value) else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "unknown value")) + } + switch value { + case .female: self = .female + case .male: self = .male + case .other: self = .other + } + } + + var serializingString: String { + let value: CodingValues + switch self { + case .female: value = .female + case .male: value = .male + case .other: value = .other + } + return value.rawValue + } + + public init(from decoder: Decoder) throws { + try self.init(serializingString: try decoder.singleValueContainer().decode(String.self)) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(serializingString) + } +} + +#if canImport(AppTrackingTransparency) + import AppTrackingTransparency + + @available(iOS 14, macOS 11.0, *) + extension ATTrackingManager.AuthorizationStatus: StringSerializable, Codable { + private enum CodingValues: String { + case notDetermined = "not_determined" + case restricted + case denied + case authorized + } + + init(serializingString value: String) throws { + guard let value = CodingValues(rawValue: value) else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "unknown value")) + } + switch value { + case .notDetermined: self = .notDetermined + case .restricted: self = .restricted + case .denied: self = .denied + case .authorized: self = .authorized + } + } + + var serializingString: String { + get throws { + let value: CodingValues + switch self { + case .notDetermined: value = .notDetermined + case .restricted: value = .restricted + case .denied: value = .denied + case .authorized: value = .authorized + @unknown default: + throw EncodingError.invalidValue(self, EncodingError.Context(codingPath: [], debugDescription: "unknown value")) + } + return value.rawValue + } + } + + public init(from decoder: Decoder) throws { + try self.init(serializingString: try decoder.singleValueContainer().decode(String.self)) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(try serializingString) + } + } +#endif diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Codable.swift.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Codable.swift.meta new file mode 100644 index 0000000..7125397 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Codable.swift.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: d787d42a0a3c84d25b6acbc62b8344f1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Error.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Error.swift new file mode 100644 index 0000000..d7036eb --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Error.swift @@ -0,0 +1,52 @@ +// +// AdaptyUnityPlugin+Error.swift +// UnityFramework +// +// Created by Alexey Valiano on 23.04.2022. +// + +import Foundation + +extension AdaptyUnityPlugin { + struct AdaptyErrorResult: Encodable where T: Encodable { + let error: T + } + + struct PluginError: Error, Encodable { + enum Code: Int { + case notFoundProduct = 10001 + case notFoundPaywall = 10002 + case notDeferredPurchase = 10003 + } + + let code: Code + let message: String + + enum CodingKeys: String, CodingKey { + case code + case message + case domain + case adaptyCode = "adapty_code" + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(code.rawValue, forKey: .code) + try container.encode(message, forKey: .message) + try container.encode("com.adapty.AdaptySDK.UnityPlugin", forKey: .domain) + try container.encode(code.rawValue, forKey: .adaptyCode) + } + + static func notFoundProduct(_ productId: String, withVariationId variationId: String?) -> PluginError { + PluginError(code: .notFoundProduct, message: "Not found product (id: \(productId), variationId: \(variationId ?? "nil"))") + } + + static func notFoundPaywall(byVariationId variationId: String) -> PluginError { + PluginError(code: .notFoundPaywall, message: "Not found paywall (with variationId: \(variationId ))") + } + + static func notFoundDeferredPurchase(_ productId: String) -> PluginError { + PluginError(code: .notDeferredPurchase, message: "Not found deferred purchase for product (id: \(productId))") + } + } +} diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Error.swift.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Error.swift.meta new file mode 100644 index 0000000..183385b --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Error.swift.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 15a27bd9c4a754b96abbaee6ae69fce1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+JSON.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+JSON.swift new file mode 100644 index 0000000..f1e7b7b --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+JSON.swift @@ -0,0 +1,46 @@ +import Foundation + +extension AdaptyUnityPlugin { + private static let encoder: JSONEncoder = { + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .iso8601 + encoder.keyEncodingStrategy = .convertToSnakeCase + return encoder + }() + private static let decoder: JSONDecoder = { + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .iso8601 + decoder.keyDecodingStrategy = .convertFromSnakeCase + return decoder + }() + + static func toJSONData(_ value: T?) -> Data? where T: Encodable { + guard let value = value else { return nil } + + do { + return try AdaptyUnityPlugin.encoder.encode(value) + } catch { + // TODO + return nil + } + } + + static func toJSONString(_ value: T?) -> String? where T: Encodable { + guard let data = toJSONData(value) else { return nil } + return String(decoding: data, as: UTF8.self) + } + + static func toDictionary(_ value: Data?) -> [String: Any]? { + guard let value = value else { return nil } + do { + return try JSONSerialization.jsonObject(with: value, options: []) as? [String: Any] + } catch { + // TODO + return nil + } + } + + static func toDictionary(_ value: String?) -> [String: Any]? { + toDictionary(value?.data(using: .utf8)) + } +} diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+JSON.swift.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+JSON.swift.meta new file mode 100644 index 0000000..f4cbc88 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+JSON.swift.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: aa563a558c4494200890493925d85255 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+ProfileParameter.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+ProfileParameter.swift new file mode 100644 index 0000000..6348dd5 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+ProfileParameter.swift @@ -0,0 +1,110 @@ + +import Adapty +import Foundation +#if canImport(AppTrackingTransparency) + import AppTrackingTransparency +#endif + +extension Parameters { + enum CodingKeys: String { + case email + case phoneNumber = "phone_number" + case facebookUserId = "facebook_user_id" + case facebookAnonymousId = "facebook_anonymous_id" + case amplitudeUserId = "amplitude_user_id" + case amplitudeDeviceId = "amplitude_device_id" + case mixpanelUserId = "mixpanel_user_id" + case appmetricaProfileId = "appmetrica_profile_id" + case appmetricaDeviceId = "appmetrica_device_id" + case firstName = "first_name" + case lastName = "last_name" + case gender + case birthday + case customAttributes = "custom_attributes" + case appTrackingTransparencyStatus = "att_status" + } + + subscript(_ i: CodingKeys) -> Any? { + get { self[i.rawValue] } + set { self[i.rawValue] = newValue } + } +} + +extension ProfileParameterBuilder { + @objc func withBirthday(_ value: String) -> Self { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd" + dateFormatter.timeZone = TimeZone(identifier: "UTC") + if let birthday = dateFormatter.date(from: value) { + _ = withBirthday(birthday) + } + return self + } + + @objc func with(_ value: Parameters) -> Self { + if let value = value[.email] as? String { + _ = withEmail(value) + } + + if let value = value[.phoneNumber] as? String { + _ = withPhoneNumber(value) + } + + if let value = value[.facebookUserId] as? String { + _ = withFacebookUserId(value) + } + + if let value = value[.facebookAnonymousId] as? String { + _ = withFacebookAnonymousId(value) + } + + if let value = value[.amplitudeUserId] as? String { + _ = withAmplitudeUserId(value) + } + + if let value = value[.amplitudeDeviceId] as? String { + _ = withAmplitudeDeviceId(value) + } + + if let value = value[.mixpanelUserId] as? String { + _ = withMixpanelUserId(value) + } + + if let value = value[.appmetricaProfileId] as? String { + _ = withAppmetricaProfileId(value) + } + + if let value = value[.appmetricaDeviceId] as? String { + _ = withAppmetricaDeviceId(value) + } + + if let value = value[.firstName] as? String { + _ = withFirstName(value) + } + + if let value = value[.lastName] as? String { + _ = withLastName(value) + } + + if let string = value[.gender] as? String, + let value = try? Gender(serializingString: string) { + _ = withGender(value) + } + + if let value = value[.birthday] as? String { + _ = withBirthday(value) + } + + if let value = value[.customAttributes] as? Parameters { + _ = withCustomAttributes(value) + } + + if #available(iOS 14, macOS 11.0, tvOS 14, *), + let string = value[.appTrackingTransparencyStatus] as? String, + let value = try? ATTrackingManager.AuthorizationStatus(serializingString: string) { + _ = withAppTrackingTransparencyStatus(value) + } + + return self + } +} diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+ProfileParameter.swift.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+ProfileParameter.swift.meta new file mode 100644 index 0000000..01c47c6 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+ProfileParameter.swift.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: fc61f0d340d654efe9d3a299313b0508 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Responses.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Responses.swift new file mode 100644 index 0000000..46fa1ab --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Responses.swift @@ -0,0 +1,37 @@ +import Adapty + +extension AdaptyUnityPlugin { + struct GetPaywallsResponse: Encodable { + let paywalls: [PaywallModel]? + let products: [ProductModel]? + + enum CodingKeys: String, CodingKey { + case paywalls + case products + } + } + + struct RestorePurchasesResponse: Encodable { + let purchaserInfo: PurchaserInfoModel? + let receipt: String? + let appleValidationResult: [String: Any]? + + enum CodingKeys: String, CodingKey { + case purchaserInfo = "purchaser_info" + case receipt + } + } + + struct MakePurchaseResponse: Encodable { + let purchaserInfo: PurchaserInfoModel? + let receipt: String? + let appleValidationResult: [String: Any]? + let product: ProductModel? + + enum CodingKeys: String, CodingKey { + case purchaserInfo = "purchaser_info" + case receipt + case product + } + } +} diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Responses.swift.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Responses.swift.meta new file mode 100644 index 0000000..63018e7 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin+Responses.swift.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 5db3006e4f1864567bfe6600c1261779 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin-Bridging-Header.h b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin-Bridging-Header.h new file mode 100644 index 0000000..0357978 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin-Bridging-Header.h @@ -0,0 +1,7 @@ + +#ifndef AdaptyUnityPlugin_Bridging_Header_h +#define AdaptyUnityPlugin_Bridging_Header_h + + + +#endif /* AdaptyUnityPlugin_Bridging_Header_h */ diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin-Bridging-Header.h.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin-Bridging-Header.h.meta new file mode 100644 index 0000000..da11ee9 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin-Bridging-Header.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 059bf38701bf54bdf93a2023a38bc3f9 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin.swift b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin.swift new file mode 100644 index 0000000..56ffae3 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin.swift @@ -0,0 +1,263 @@ +import Adapty + +@objc public class AdaptyUnityPlugin: NSObject { + @objc public static let shared = AdaptyUnityPlugin() + + public typealias JSONStringCompletion = (String?) -> Void + + public override init() { + super.init() + Adapty.delegate = AdaptyUnityPlugin.delegate + } + + @objc public func setIdfaCollectionDisabled(_ value: Bool) { + Adapty.idfaCollectionDisabled = value + } + + + @objc public func activate(_ apikey: String, observerMode: Bool, customerUserId: String?) { + Adapty.activate(apikey, observerMode: observerMode, customerUserId: customerUserId) + } + + @objc public func getLogLevel() -> String { + Adapty.logLevel.serializingString + } + + @objc public func setLogLevel(_ value: String) { + Adapty.logLevel = (try? AdaptyLogLevel(serializingString: value)) ?? .none + } + + @objc public func identify(_ customerUserId: String, completion: JSONStringCompletion? = nil) { + Adapty.identify(customerUserId) { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func logout(_ completion: JSONStringCompletion? = nil) { + Adapty.logout { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func getPaywalls(_ forceUpdate: Bool, completion: JSONStringCompletion? = nil) { + Adapty.getPaywalls(forceUpdate: forceUpdate) { paywalls, products, error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + AdaptyUnityPlugin.productCache.add(products) + AdaptyUnityPlugin.productCache.add(paywalls) + result = .success(GetPaywallsResponse(paywalls: paywalls, products: products)) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func getPurchaserInfo(_ forceUpdate: Bool, completion: JSONStringCompletion? = nil) { + Adapty.getPurchaserInfo(forceUpdate: forceUpdate) { purchaserInfo, error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(purchaserInfo) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func restorePurchases(_ completion: JSONStringCompletion? = nil) { + Adapty.restorePurchases { purchaserInfo, receipt, appleValidationResult, error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(RestorePurchasesResponse( + purchaserInfo: purchaserInfo, + receipt: receipt, + appleValidationResult: appleValidationResult + )) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func makePurchase(_ productId: String, variationId: String?, offerId: String?, completion: JSONStringCompletion? = nil) { + guard let product = AdaptyUnityPlugin.productCache.product(byId: productId, withVariationId: variationId) else { + let error = PluginError.notFoundProduct(productId, withVariationId: variationId) + completion?(AdaptyUnityPlugin.toJSONString(AdaptyErrorResult(error: error))) + return + } + + Adapty.makePurchase(product: product, offerId: offerId) { purchaserInfo, receipt, appleValidationResult, product, error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(MakePurchaseResponse( + purchaserInfo: purchaserInfo, + receipt: receipt, + appleValidationResult: appleValidationResult, + product: product + )) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func makeDeferredPurchase(_ productId: String, completion: JSONStringCompletion? = nil) { + guard let deferredPurchase = AdaptyUnityPlugin.deferredPurchases[productId] else { + let error = PluginError.notFoundDeferredPurchase(productId) + completion?(AdaptyUnityPlugin.toJSONString(AdaptyErrorResult(error: error))) + return + } + + deferredPurchase { purchaserInfo, receipt, appleValidationResult, product, error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + AdaptyUnityPlugin.deferredPurchases.removeValue(forKey: productId) + result = .success(MakePurchaseResponse( + purchaserInfo: purchaserInfo, + receipt: receipt, + appleValidationResult: appleValidationResult, + product: product + )) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func logShowPaywall(_ variationId: String, completion: JSONStringCompletion? = nil) { + guard let paywall = AdaptyUnityPlugin.productCache.paywall(byVariationId: variationId) else { + let error = PluginError.notFoundPaywall(byVariationId: variationId) + completion?(AdaptyUnityPlugin.toJSONString(AdaptyErrorResult(error: error))) + return + } + + Adapty.logShowPaywall(paywall) { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func setFallbackPaywalls(_ paywalls: String, completion: JSONStringCompletion? = nil) { + Adapty.setFallbackPaywalls(paywalls) { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func getPromo(_ completion: JSONStringCompletion? = nil) { + Adapty.getPromo { promo, error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(promo) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func updateProfile(_ jsonString: String, completion: JSONStringCompletion? = nil) { + let builder = ProfileParameterBuilder() + if let params = AdaptyUnityPlugin.toDictionary(jsonString) { + _ = builder.with(params) + } + Adapty.updateProfile(params: builder) { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func updateAttribution(_ jsonString: String, source: String, networkUserId: String?, completion: JSONStringCompletion? = nil) { + let attribution = AdaptyUnityPlugin.toDictionary(jsonString) ?? [:] + let source = (try? AttributionNetwork(serializingString: source)) ?? .custom + Adapty.updateAttribution(attribution, source: source, networkUserId: networkUserId) { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func setExternalAnalyticsEnabled(_ enabled: Bool, completion: JSONStringCompletion? = nil) { + Adapty.setExternalAnalyticsEnabled(enabled) { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func setVariationId(_ variationId: String, forTransactionId: String, completion: JSONStringCompletion? = nil) { + Adapty.setVariationId(variationId, forTransactionId: forTransactionId) { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } + + @objc public func getApnsToken() -> String? { + Adapty.apnsTokenString + } + + @objc public func setApnsToken(_ value: String) { + Adapty.apnsTokenString = value + } + + @objc public func presentCodeRedemptionSheet() { + Adapty.presentCodeRedemptionSheet() + } + + @objc public func handlePushNotification(_ userInfo: String, completion: JSONStringCompletion? = nil) { + let userInfo = AdaptyUnityPlugin.toDictionary(userInfo) ?? [:] + Adapty.handlePushNotification(userInfo) { error in + let result: AdaptyResult + if let error = error { + result = .error(error) + } else { + result = .success(true) + } + completion?(AdaptyUnityPlugin.toJSONString(result)) + } + } +} diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin.swift.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin.swift.meta new file mode 100644 index 0000000..6ad0560 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPlugin.swift.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 6e308e3ea6ccc4c2ba6863d0650d2a7f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginBridge.mm b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginBridge.mm new file mode 100644 index 0000000..18f9719 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginBridge.mm @@ -0,0 +1,219 @@ +#import +#include "UnityFramework/UnityFramework-Swift.h" +#include "AdaptyUnityPluginCallback.h" + +static NSString *cstringToString(const char *str) { + return str ? [NSString stringWithUTF8String:str] : nil; +} + +static const char *cstringFromString(NSString *str) { + return str ? [str cStringUsingEncoding:NSUTF8StringEncoding] : nil; +} + +static char* makeStringCopy (const char* string) +{ + if (string == NULL) return NULL; + char* res = (char*)malloc(strlen(string) + 1); + strcpy(res, string); + return res; +} + +typedef void (*MessageDelegate)(const char* type, const char* data); + +typedef void (*CallbackDelegate)(UnityAction action, const char* data); + +static CallbackDelegate _callbackDelegate = NULL; +static MessageDelegate _messageDelegate = NULL; + +void SendMessageToUnity(NSString* type, NSString* data) { + dispatch_async(dispatch_get_main_queue(), ^{ + if(_messageDelegate != NULL) { + _messageDelegate(cstringFromString(type), cstringFromString(data)); + } + }); +} + +void SendCallbackToUnity(UnityAction action, NSString* data) { + if(action == NULL) { return; } + dispatch_async(dispatch_get_main_queue(), ^{ + if(_callbackDelegate != NULL) { + _callbackDelegate(action, cstringFromString(data )); + } + }); +} + +extern "C" { +void AdaptyUnity_registerCallbackHandler(MessageDelegate messageDelegate, CallbackDelegate callbackDelegate ) { + _messageDelegate = messageDelegate; + _callbackDelegate = callbackDelegate; +} + + #pragma mark - Test + +void AdaptyUnity_testCallback(UnityAction callback) { + SendCallbackToUnity(callback, @"bla-bla-bla"); +} + + #pragma mark - Adapty + +void AdaptyUnity_setIdfaCollectionDisabled( bool disabled) { + [[AdaptyUnityPlugin shared] + setIdfaCollectionDisabled: disabled + ]; +} + +void AdaptyUnity_activate(const char *key, bool observeMode, const char * _Nullable customerUserId) { + [[AdaptyUnityPlugin shared] + activate: cstringToString(key) + observerMode: observeMode + customerUserId: cstringToString(customerUserId) + ]; +} + +char * AdaptyUnity_getLogLevel() { + return makeStringCopy(cstringFromString([[AdaptyUnityPlugin shared] getLogLevel])); +} + +void AdaptyUnity_setLogLevel(const char *value) { + [[AdaptyUnityPlugin shared] + setLogLevel:cstringToString(value) + ]; +} + +void AdaptyUnity_identify(const char *customerUserId, UnityAction callback) { + [[AdaptyUnityPlugin shared] + identify:cstringToString(customerUserId) + completion:^(NSString * _Nullable error) { + SendCallbackToUnity(callback, error); + }]; +} + +void AdaptyUnity_logout(UnityAction callback) { + [[AdaptyUnityPlugin shared] + logout:^(NSString * _Nullable error) { + SendCallbackToUnity(callback, error); + }]; +} + +void AdaptyUnity_getPaywalls(bool forceUpdate, UnityAction callback) { + [[AdaptyUnityPlugin shared] + getPaywalls:forceUpdate + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_getPurchaserInfo(bool forceUpdate, UnityAction callback) { + [[AdaptyUnityPlugin shared] + getPurchaserInfo:forceUpdate + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_restorePurchases(UnityAction callback) { + [[AdaptyUnityPlugin shared] + restorePurchases:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_makePurchase(const char * productId, const char * variationId, const char * offerId, UnityAction callback) { + [[AdaptyUnityPlugin shared] + makePurchase:cstringToString(productId) + variationId:cstringToString(variationId) + offerId:cstringToString(offerId) + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_makeDeferredPurchase(const char * productId, UnityAction callback) { + [[AdaptyUnityPlugin shared] + makeDeferredPurchase:cstringToString(productId) + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_logShowPaywall(const char * variationId, UnityAction callback) { + [[AdaptyUnityPlugin shared] + logShowPaywall:cstringToString(variationId) + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_setFallbackPaywalls( const char * paywalls, UnityAction callback) { + [[AdaptyUnityPlugin shared] + setFallbackPaywalls:cstringToString(paywalls) + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_getPromo(UnityAction callback) { + [[AdaptyUnityPlugin shared] + getPromo:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_updateProfile( const char * params, UnityAction callback) { + [[AdaptyUnityPlugin shared] + updateProfile:cstringToString(params) + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_updateAttribution( const char * attributions, const char * source, const char * networkUserId,UnityAction callback) { + [[AdaptyUnityPlugin shared] + updateAttribution:cstringToString(attributions) + source:cstringToString(source) + networkUserId:cstringToString(networkUserId) + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_setExternalAnalyticsEnabled( bool enabled,UnityAction callback) { + [[AdaptyUnityPlugin shared] + setExternalAnalyticsEnabled:enabled + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_setVariationForTransaction( const char * variationId, const char * transactionId, UnityAction callback) { + [[AdaptyUnityPlugin shared] + setVariationId:cstringToString(variationId) + forTransactionId:cstringToString(transactionId) + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_setApnsToken( const char * apnsToken) { + [[AdaptyUnityPlugin shared] + setApnsToken: cstringToString(apnsToken) + ]; +} + +char * AdaptyUnity_getApnsToken() { + return makeStringCopy(cstringFromString([[AdaptyUnityPlugin shared] getApnsToken])); +} + +void AdaptyUnity_handlePushNotification( const char * userInfo, UnityAction callback) { + [[AdaptyUnityPlugin shared] + handlePushNotification:cstringToString(userInfo) + completion:^(NSString * _Nullable response) { + SendCallbackToUnity(callback, response); + }]; +} + +void AdaptyUnity_presentCodeRedemptionSheet() { + [[AdaptyUnityPlugin shared] + presentCodeRedemptionSheet]; +} +} diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginBridge.mm.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginBridge.mm.meta new file mode 100644 index 0000000..65eb5ba --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginBridge.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 7f4abd41f13e242768b277feb05aa290 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginCallback.h b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginCallback.h new file mode 100644 index 0000000..2a8dad5 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginCallback.h @@ -0,0 +1,10 @@ +#ifndef AdaptyUnityPluginCallback_h +#define AdaptyUnityPluginCallback_h + +typedef const void* UnityAction; + +void SendMessageToUnity(NSString* type, NSString* data); + +void SendCallbackToUnity(UnityAction action, NSString* data); + +#endif /* AdaptyUnityPluginCallback_h */ diff --git a/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginCallback.h.meta b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginCallback.h.meta new file mode 100644 index 0000000..eb5ee63 --- /dev/null +++ b/Assets/AdaptySDK/Plugins/iOS/Source/AdaptyUnityPluginCallback.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 0dc58198ec958482aa9fa9d0c74812e2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Respones.meta b/Assets/AdaptySDK/Respones.meta new file mode 100644 index 0000000..36376d7 --- /dev/null +++ b/Assets/AdaptySDK/Respones.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a041577102854e15af7d9367b1f1118 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Respones/GetPaywallsResponse.cs b/Assets/AdaptySDK/Respones/GetPaywallsResponse.cs new file mode 100644 index 0000000..a14459d --- /dev/null +++ b/Assets/AdaptySDK/Respones/GetPaywallsResponse.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using AdaptySDK.SimpleJSON; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class GetPaywallsResponse + { + public readonly Paywall[] Paywalls; + public readonly Product[] Products; + + public GetPaywallsResponse(JSONNode response) + { + var paywalls = new List(); + var products = new List(); + + + var paywallsArray = response["paywalls"]; + if (paywallsArray != null && !paywallsArray.IsNull && paywallsArray.IsArray) + { + foreach (var item in paywallsArray) + { + var value = PaywallFromJSON(item); + if (value != null) paywalls.Add(value); + + } + this.Paywalls = paywalls.ToArray(); + } + + + var productsArray = response["products"]; + if (productsArray != null && !productsArray.IsNull && productsArray.IsArray) + { + foreach (var item in productsArray) + { + var product = ProductFromJSON(item); + if (product != null) products.Add(product); + } + this.Products = products.ToArray(); + } + } + + public override string ToString() + { + return $"{nameof(Paywalls)}: {Paywalls}, " + + $"{nameof(Products)}: {Products}"; + } + } + + } +} diff --git a/Assets/AdaptySDK/Respones/GetPaywallsResponse.cs.meta b/Assets/AdaptySDK/Respones/GetPaywallsResponse.cs.meta new file mode 100644 index 0000000..1b8a1ad --- /dev/null +++ b/Assets/AdaptySDK/Respones/GetPaywallsResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65f963c20b7b24ef297c32ae848f0a00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Respones/MakePurchaseResponse.cs b/Assets/AdaptySDK/Respones/MakePurchaseResponse.cs new file mode 100644 index 0000000..c909102 --- /dev/null +++ b/Assets/AdaptySDK/Respones/MakePurchaseResponse.cs @@ -0,0 +1,34 @@ +using AdaptySDK.SimpleJSON; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class MakePurchaseResponse + { + public readonly PurchaserInfo PurchaserInfo; + /// iOS specific + public readonly string Receipt; + /// Android specific + public readonly string PurchaseToken; + public readonly Product Product; + + public MakePurchaseResponse(JSONNode response) + { + PurchaserInfo = PurchaserInfoFromJSON(response["purchaser_info"]); + Receipt = response["receipt"]; + PurchaseToken = response["purchase_token"]; + Product = ProductFromJSON(response["product"]); + } + + public override string ToString() + { + return $"{nameof(PurchaserInfo)}: {PurchaserInfo}, " + + $"{nameof(Receipt)}: {Receipt}, " + + $"{nameof(PurchaseToken)}: {PurchaseToken}, " + + $"{nameof(Product)}: {Product}"; + } + } + + } +} diff --git a/Assets/AdaptySDK/Respones/MakePurchaseResponse.cs.meta b/Assets/AdaptySDK/Respones/MakePurchaseResponse.cs.meta new file mode 100644 index 0000000..e700e72 --- /dev/null +++ b/Assets/AdaptySDK/Respones/MakePurchaseResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 928395e41b3964eebba0489766a273f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/Respones/RestorePurchasesResponse.cs b/Assets/AdaptySDK/Respones/RestorePurchasesResponse.cs new file mode 100644 index 0000000..5afb1f6 --- /dev/null +++ b/Assets/AdaptySDK/Respones/RestorePurchasesResponse.cs @@ -0,0 +1,26 @@ +using AdaptySDK.SimpleJSON; + +namespace AdaptySDK +{ + public static partial class Adapty + { + public class RestorePurchasesResponse + { + public readonly PurchaserInfo PurchaserInfo; + /// iOS specific + public readonly string Receipt; + public RestorePurchasesResponse(JSONNode response) + { + PurchaserInfo = PurchaserInfoFromJSON(response["purchaser_info"]); + Receipt = response["receipt"]; + } + + public override string ToString() + { + return $"{nameof(PurchaserInfo)}: {PurchaserInfo}, " + + $"{nameof(Receipt)}: {Receipt}"; + } + + } + } +} diff --git a/Assets/AdaptySDK/Respones/RestorePurchasesResponse.cs.meta b/Assets/AdaptySDK/Respones/RestorePurchasesResponse.cs.meta new file mode 100644 index 0000000..2f008ed --- /dev/null +++ b/Assets/AdaptySDK/Respones/RestorePurchasesResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bf5225937c144016aff5abf8502cb30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/SimpleJSON+Dictionary.cs b/Assets/AdaptySDK/SimpleJSON+Dictionary.cs new file mode 100644 index 0000000..d80e37c --- /dev/null +++ b/Assets/AdaptySDK/SimpleJSON+Dictionary.cs @@ -0,0 +1,163 @@ +using System.Collections.Generic; +using System; + +namespace AdaptySDK.SimpleJSON +{ + public static class DictionaryExtensions + { + + public static JSONNode ToJSON(this Dictionary obj) + { + var result = new JSONObject(); + + foreach (var item in obj) + { + if (item.Value is JSONNode) + { + result.Add(item.Key, item.Value as JSONNode); + } + else if (item.Value is Dictionary) + { + result.Add(item.Key, ToJSON(item.Value as Dictionary)); + } + else if (item.Value is IList) + { + result.Add(item.Key, ToJSON(item.Value as IList)); + } + else if (item.Value is null) + { + result.Add(item.Key, JSONNull.CreateOrGet()); + } + else if (item.Value is string) + { + result.Add(item.Key, new JSONString(item.Value as string)); + } + else if (item.Value is int || item.Value is uint + || item.Value is long || item.Value is ulong + || item.Value is short || item.Value is ushort + || item.Value is sbyte || item.Value is byte) + { + result.Add(item.Key, new JSONNumber(Convert.ToInt64((object)item.Value))); + } + else if (item.Value is float || item.Value is double || item.Value is decimal) + { + result.Add(item.Key, new JSONNumber(Convert.ToDouble((object)item.Value))); + } + } + + return result; + } + + public static JSONNode ToJSON(this IList obj) + { + var result = new JSONArray(); + + foreach (var item in obj) + { + if (item is JSONNode) + { + result.Add(item as JSONNode); + } + else if (item is Dictionary) + { + result.Add(ToJSON(item as Dictionary)); + } + else if (item is IList) + { + result.Add(ToJSON(item as IList)); + } + else if (item is null) + { + result.Add(JSONNull.CreateOrGet()); + } + else if (item is string) + { + result.Add(new JSONString(item as string)); + } + else if (item is int || item is uint + || item is long || item is ulong + || item is short || item is ushort + || item is sbyte || item is byte) + { + result.Add(new JSONNumber(Convert.ToInt64((object)item))); + } + else if (item is float || item is double || item is decimal) + { + result.Add( new JSONNumber(Convert.ToDouble((object)item))); + } + } + + return result; + } + + public static Dictionary ToDictionary(this JSONNode node) + { + JSONObject obj = node as JSONObject; + if (obj == null) return null; + + var result = new Dictionary(); + + foreach ( var item in obj) + { + switch (item.Value.Tag) + { + case JSONNodeType.Array: + result.Add(item.Key, ToArray(item.Value)); + break; + case JSONNodeType.Object: + result.Add(item.Key, ToDictionary(item.Value)); + break; + case JSONNodeType.Boolean: + result.Add(item.Key, item.Value.AsBool); + break; + case JSONNodeType.String: + result.Add(item.Key, item.Value.Value); + break; + case JSONNodeType.Number: + result.Add(item.Key, item.Value.AsDouble); + break; + case JSONNodeType.NullValue: + result.Add(item.Key, null); + break; + } + } + + return result; + } + + public static dynamic[] ToArray(this JSONNode node) + { + JSONArray obj = node as JSONArray; + if (obj == null) return null; + + var result = new List(); + + foreach (var item in obj.Children) + { + switch (item.Tag) + { + case JSONNodeType.Array: + result.Add(ToArray(item.Value)); + break; + case JSONNodeType.Object: + result.Add(ToDictionary(item)); + break; + case JSONNodeType.Boolean: + result.Add(item.AsBool); + break; + case JSONNodeType.String: + result.Add(item.Value); + break; + case JSONNodeType.Number: + result.Add(item.AsDouble); + break; + case JSONNodeType.NullValue: + result.Add(null); + break; + } + } + + return result.ToArray(); + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/SimpleJSON+Dictionary.cs.meta b/Assets/AdaptySDK/SimpleJSON+Dictionary.cs.meta new file mode 100644 index 0000000..dabc0d9 --- /dev/null +++ b/Assets/AdaptySDK/SimpleJSON+Dictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1a6d2ebcd82045aab05beec62db0f0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AdaptySDK/SimpleJSON.cs b/Assets/AdaptySDK/SimpleJSON.cs new file mode 100644 index 0000000..f7f7b6a --- /dev/null +++ b/Assets/AdaptySDK/SimpleJSON.cs @@ -0,0 +1,1352 @@ +/* * * * * + * A simple JSON Parser / builder + * ------------------------------ + * + * It mainly has been written as a simple JSON parser. It can build a JSON string + * from the node-tree, or generate a node tree from any valid JSON string. + * + * Written by Bunny83 + * 2012-06-09 + * + * Changelog now external. See Changelog.txt + * + * The MIT License (MIT) + * + * Copyright (c) 2012-2019 Markus Göbel (Bunny83) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * * * * */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; + +namespace AdaptySDK.SimpleJSON +{ + public enum JSONNodeType + { + Array = 1, + Object = 2, + String = 3, + Number = 4, + NullValue = 5, + Boolean = 6, + None = 7, + Custom = 0xFF, + } + public enum JSONTextMode + { + Compact, + Indent + } + + public abstract partial class JSONNode + { + #region Enumerators + public struct Enumerator + { + private enum Type { None, Array, Object } + private Type type; + private Dictionary.Enumerator m_Object; + private List.Enumerator m_Array; + public bool IsValid { get { return type != Type.None; } } + public Enumerator(List.Enumerator aArrayEnum) + { + type = Type.Array; + m_Object = default(Dictionary.Enumerator); + m_Array = aArrayEnum; + } + public Enumerator(Dictionary.Enumerator aDictEnum) + { + type = Type.Object; + m_Object = aDictEnum; + m_Array = default(List.Enumerator); + } + public KeyValuePair Current + { + get + { + if (type == Type.Array) + return new KeyValuePair(string.Empty, m_Array.Current); + else if (type == Type.Object) + return m_Object.Current; + return new KeyValuePair(string.Empty, null); + } + } + public bool MoveNext() + { + if (type == Type.Array) + return m_Array.MoveNext(); + else if (type == Type.Object) + return m_Object.MoveNext(); + return false; + } + } + public struct ValueEnumerator + { + private Enumerator m_Enumerator; + public ValueEnumerator(List.Enumerator aArrayEnum) : this(new Enumerator(aArrayEnum)) { } + public ValueEnumerator(Dictionary.Enumerator aDictEnum) : this(new Enumerator(aDictEnum)) { } + public ValueEnumerator(Enumerator aEnumerator) { m_Enumerator = aEnumerator; } + public JSONNode Current { get { return m_Enumerator.Current.Value; } } + public bool MoveNext() { return m_Enumerator.MoveNext(); } + public ValueEnumerator GetEnumerator() { return this; } + } + public struct KeyEnumerator + { + private Enumerator m_Enumerator; + public KeyEnumerator(List.Enumerator aArrayEnum) : this(new Enumerator(aArrayEnum)) { } + public KeyEnumerator(Dictionary.Enumerator aDictEnum) : this(new Enumerator(aDictEnum)) { } + public KeyEnumerator(Enumerator aEnumerator) { m_Enumerator = aEnumerator; } + public string Current { get { return m_Enumerator.Current.Key; } } + public bool MoveNext() { return m_Enumerator.MoveNext(); } + public KeyEnumerator GetEnumerator() { return this; } + } + + public class LinqEnumerator : IEnumerator>, IEnumerable> + { + private JSONNode m_Node; + private Enumerator m_Enumerator; + internal LinqEnumerator(JSONNode aNode) + { + m_Node = aNode; + if (m_Node != null) + m_Enumerator = m_Node.GetEnumerator(); + } + public KeyValuePair Current { get { return m_Enumerator.Current; } } + object IEnumerator.Current { get { return m_Enumerator.Current; } } + public bool MoveNext() { return m_Enumerator.MoveNext(); } + + public void Dispose() + { + m_Node = null; + m_Enumerator = new Enumerator(); + } + + public IEnumerator> GetEnumerator() + { + return new LinqEnumerator(m_Node); + } + + public void Reset() + { + if (m_Node != null) + m_Enumerator = m_Node.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new LinqEnumerator(m_Node); + } + } + + #endregion Enumerators + + #region common interface + + public static bool forceASCII = false; // Use Unicode by default + public static bool longAsString = false; // lazy creator creates a JSONString instead of JSONNumber + public static bool allowLineComments = true; // allow "//"-style comments at the end of a line + + public abstract JSONNodeType Tag { get; } + + public virtual JSONNode this[int aIndex] { get { return null; } set { } } + + public virtual JSONNode this[string aKey] { get { return null; } set { } } + + public virtual string Value { get { return ""; } set { } } + + public virtual int Count { get { return 0; } } + + public virtual bool IsNumber { get { return false; } } + public virtual bool IsString { get { return false; } } + public virtual bool IsBoolean { get { return false; } } + public virtual bool IsNull { get { return false; } } + public virtual bool IsArray { get { return false; } } + public virtual bool IsObject { get { return false; } } + + public virtual bool Inline { get { return false; } set { } } + + public virtual void Add(string aKey, JSONNode aItem) + { + } + public virtual void Add(JSONNode aItem) + { + Add("", aItem); + } + + public virtual JSONNode Remove(string aKey) + { + return null; + } + + public virtual JSONNode Remove(int aIndex) + { + return null; + } + + public virtual JSONNode Remove(JSONNode aNode) + { + return aNode; + } + + public virtual JSONNode Clone() + { + return null; + } + + public virtual IEnumerable Children + { + get + { + yield break; + } + } + + public IEnumerable DeepChildren + { + get + { + foreach (var C in Children) + foreach (var D in C.DeepChildren) + yield return D; + } + } + + public virtual bool HasKey(string aKey) + { + return false; + } + + public virtual JSONNode GetValueOrDefault(string aKey, JSONNode aDefault) + { + return aDefault; + } + + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + WriteToStringBuilder(sb, 0, 0, JSONTextMode.Compact); + return sb.ToString(); + } + + public virtual string ToString(int aIndent) + { + StringBuilder sb = new StringBuilder(); + WriteToStringBuilder(sb, 0, aIndent, JSONTextMode.Indent); + return sb.ToString(); + } + internal abstract void WriteToStringBuilder(StringBuilder aSB, int aIndent, int aIndentInc, JSONTextMode aMode); + + public abstract Enumerator GetEnumerator(); + public IEnumerable> Linq { get { return new LinqEnumerator(this); } } + public KeyEnumerator Keys { get { return new KeyEnumerator(GetEnumerator()); } } + public ValueEnumerator Values { get { return new ValueEnumerator(GetEnumerator()); } } + + #endregion common interface + + #region typecasting properties + + + public virtual double AsDouble + { + get + { + double v = 0.0; + if (double.TryParse(Value, NumberStyles.Float, CultureInfo.InvariantCulture, out v)) + return v; + return 0.0; + } + set + { + Value = value.ToString(CultureInfo.InvariantCulture); + } + } + + public virtual int AsInt + { + get { return (int)AsDouble; } + set { AsDouble = value; } + } + + public virtual float AsFloat + { + get { return (float)AsDouble; } + set { AsDouble = value; } + } + + public virtual bool AsBool + { + get + { + bool v = false; + if (bool.TryParse(Value, out v)) + return v; + return !string.IsNullOrEmpty(Value); + } + set + { + Value = (value) ? "true" : "false"; + } + } + + public virtual long AsLong + { + get + { + long val = 0; + if (long.TryParse(Value, out val)) + return val; + return 0L; + } + set + { + Value = value.ToString(); + } + } + + public virtual JSONArray AsArray + { + get + { + return this as JSONArray; + } + } + + public virtual JSONObject AsObject + { + get + { + return this as JSONObject; + } + } + + + #endregion typecasting properties + + #region operators + + public static implicit operator JSONNode(string s) + { + return new JSONString(s); + } + public static implicit operator string(JSONNode d) + { + return (d == null) ? null : d.Value; + } + + public static implicit operator JSONNode(double n) + { + return new JSONNumber(n); + } + public static implicit operator double(JSONNode d) + { + return (d == null) ? 0 : d.AsDouble; + } + + public static implicit operator JSONNode(float n) + { + return new JSONNumber(n); + } + public static implicit operator float(JSONNode d) + { + return (d == null) ? 0 : d.AsFloat; + } + + public static implicit operator JSONNode(int n) + { + return new JSONNumber(n); + } + public static implicit operator int(JSONNode d) + { + return (d == null) ? 0 : d.AsInt; + } + + public static implicit operator JSONNode(long n) + { + if (longAsString) + return new JSONString(n.ToString()); + return new JSONNumber(n); + } + public static implicit operator long(JSONNode d) + { + return (d == null) ? 0L : d.AsLong; + } + + public static implicit operator JSONNode(bool b) + { + return new JSONBool(b); + } + public static implicit operator bool(JSONNode d) + { + return (d == null) ? false : d.AsBool; + } + + public static implicit operator JSONNode(KeyValuePair aKeyValue) + { + return aKeyValue.Value; + } + + public static bool operator ==(JSONNode a, object b) + { + if (ReferenceEquals(a, b)) + return true; + bool aIsNull = a is JSONNull || ReferenceEquals(a, null) || a is JSONLazyCreator; + bool bIsNull = b is JSONNull || ReferenceEquals(b, null) || b is JSONLazyCreator; + if (aIsNull && bIsNull) + return true; + return !aIsNull && a.Equals(b); + } + + public static bool operator !=(JSONNode a, object b) + { + return !(a == b); + } + + public override bool Equals(object obj) + { + return ReferenceEquals(this, obj); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + #endregion operators + + [ThreadStatic] + private static StringBuilder m_EscapeBuilder; + internal static StringBuilder EscapeBuilder + { + get + { + if (m_EscapeBuilder == null) + m_EscapeBuilder = new StringBuilder(); + return m_EscapeBuilder; + } + } + internal static string Escape(string aText) + { + var sb = EscapeBuilder; + sb.Length = 0; + if (sb.Capacity < aText.Length + aText.Length / 10) + sb.Capacity = aText.Length + aText.Length / 10; + foreach (char c in aText) + { + switch (c) + { + case '\\': + sb.Append("\\\\"); + break; + case '\"': + sb.Append("\\\""); + break; + case '\n': + sb.Append("\\n"); + break; + case '\r': + sb.Append("\\r"); + break; + case '\t': + sb.Append("\\t"); + break; + case '\b': + sb.Append("\\b"); + break; + case '\f': + sb.Append("\\f"); + break; + default: + if (c < ' ' || (forceASCII && c > 127)) + { + ushort val = c; + sb.Append("\\u").Append(val.ToString("X4")); + } + else + sb.Append(c); + break; + } + } + string result = sb.ToString(); + sb.Length = 0; + return result; + } + + private static JSONNode ParseElement(string token, bool quoted) + { + if (quoted) + return token; + string tmp = token.ToLower(); + if (tmp == "false" || tmp == "true") + return tmp == "true"; + if (tmp == "null") + return JSONNull.CreateOrGet(); + double val; + if (double.TryParse(token, NumberStyles.Float, CultureInfo.InvariantCulture, out val)) + return val; + else + return token; + } + + public static JSONNode Parse(string aJSON) + { + Stack stack = new Stack(); + JSONNode ctx = null; + int i = 0; + StringBuilder Token = new StringBuilder(); + string TokenName = ""; + bool QuoteMode = false; + bool TokenIsQuoted = false; + while (i < aJSON.Length) + { + switch (aJSON[i]) + { + case '{': + if (QuoteMode) + { + Token.Append(aJSON[i]); + break; + } + stack.Push(new JSONObject()); + if (ctx != null) + { + ctx.Add(TokenName, stack.Peek()); + } + TokenName = ""; + Token.Length = 0; + ctx = stack.Peek(); + break; + + case '[': + if (QuoteMode) + { + Token.Append(aJSON[i]); + break; + } + + stack.Push(new JSONArray()); + if (ctx != null) + { + ctx.Add(TokenName, stack.Peek()); + } + TokenName = ""; + Token.Length = 0; + ctx = stack.Peek(); + break; + + case '}': + case ']': + if (QuoteMode) + { + + Token.Append(aJSON[i]); + break; + } + if (stack.Count == 0) + throw new Exception("JSON Parse: Too many closing brackets"); + + stack.Pop(); + if (Token.Length > 0 || TokenIsQuoted) + ctx.Add(TokenName, ParseElement(Token.ToString(), TokenIsQuoted)); + TokenIsQuoted = false; + TokenName = ""; + Token.Length = 0; + if (stack.Count > 0) + ctx = stack.Peek(); + break; + + case ':': + if (QuoteMode) + { + Token.Append(aJSON[i]); + break; + } + TokenName = Token.ToString(); + Token.Length = 0; + TokenIsQuoted = false; + break; + + case '"': + QuoteMode ^= true; + TokenIsQuoted |= QuoteMode; + break; + + case ',': + if (QuoteMode) + { + Token.Append(aJSON[i]); + break; + } + if (Token.Length > 0 || TokenIsQuoted) + ctx.Add(TokenName, ParseElement(Token.ToString(), TokenIsQuoted)); + TokenIsQuoted = false; + TokenName = ""; + Token.Length = 0; + TokenIsQuoted = false; + break; + + case '\r': + case '\n': + break; + + case ' ': + case '\t': + if (QuoteMode) + Token.Append(aJSON[i]); + break; + + case '\\': + ++i; + if (QuoteMode) + { + char C = aJSON[i]; + switch (C) + { + case 't': + Token.Append('\t'); + break; + case 'r': + Token.Append('\r'); + break; + case 'n': + Token.Append('\n'); + break; + case 'b': + Token.Append('\b'); + break; + case 'f': + Token.Append('\f'); + break; + case 'u': + { + string s = aJSON.Substring(i + 1, 4); + Token.Append((char)int.Parse( + s, + System.Globalization.NumberStyles.AllowHexSpecifier)); + i += 4; + break; + } + default: + Token.Append(C); + break; + } + } + break; + case '/': + if (allowLineComments && !QuoteMode && i + 1 < aJSON.Length && aJSON[i + 1] == '/') + { + while (++i < aJSON.Length && aJSON[i] != '\n' && aJSON[i] != '\r') ; + break; + } + Token.Append(aJSON[i]); + break; + case '\uFEFF': // remove / ignore BOM (Byte Order Mark) + break; + + default: + Token.Append(aJSON[i]); + break; + } + ++i; + } + if (QuoteMode) + { + throw new Exception("JSON Parse: Quotation marks seems to be messed up."); + } + if (ctx == null) + return ParseElement(Token.ToString(), TokenIsQuoted); + return ctx; + } + + } + // End of JSONNode + + public partial class JSONArray : JSONNode + { + private List m_List = new List(); + private bool inline = false; + public override bool Inline + { + get { return inline; } + set { inline = value; } + } + + public override JSONNodeType Tag { get { return JSONNodeType.Array; } } + public override bool IsArray { get { return true; } } + public override Enumerator GetEnumerator() { return new Enumerator(m_List.GetEnumerator()); } + + public override JSONNode this[int aIndex] + { + get + { + if (aIndex < 0 || aIndex >= m_List.Count) + return new JSONLazyCreator(this); + return m_List[aIndex]; + } + set + { + if (value == null) + value = JSONNull.CreateOrGet(); + if (aIndex < 0 || aIndex >= m_List.Count) + m_List.Add(value); + else + m_List[aIndex] = value; + } + } + + public override JSONNode this[string aKey] + { + get { return new JSONLazyCreator(this); } + set + { + if (value == null) + value = JSONNull.CreateOrGet(); + m_List.Add(value); + } + } + + public override int Count + { + get { return m_List.Count; } + } + + public override void Add(string aKey, JSONNode aItem) + { + if (aItem == null) + aItem = JSONNull.CreateOrGet(); + m_List.Add(aItem); + } + + public override JSONNode Remove(int aIndex) + { + if (aIndex < 0 || aIndex >= m_List.Count) + return null; + JSONNode tmp = m_List[aIndex]; + m_List.RemoveAt(aIndex); + return tmp; + } + + public override JSONNode Remove(JSONNode aNode) + { + m_List.Remove(aNode); + return aNode; + } + + public override JSONNode Clone() + { + var node = new JSONArray(); + node.m_List.Capacity = m_List.Capacity; + foreach(var n in m_List) + { + if (n != null) + node.Add(n.Clone()); + else + node.Add(null); + } + return node; + } + + public override IEnumerable Children + { + get + { + foreach (JSONNode N in m_List) + yield return N; + } + } + + + internal override void WriteToStringBuilder(StringBuilder aSB, int aIndent, int aIndentInc, JSONTextMode aMode) + { + aSB.Append('['); + int count = m_List.Count; + if (inline) + aMode = JSONTextMode.Compact; + for (int i = 0; i < count; i++) + { + if (i > 0) + aSB.Append(','); + if (aMode == JSONTextMode.Indent) + aSB.AppendLine(); + + if (aMode == JSONTextMode.Indent) + aSB.Append(' ', aIndent + aIndentInc); + m_List[i].WriteToStringBuilder(aSB, aIndent + aIndentInc, aIndentInc, aMode); + } + if (aMode == JSONTextMode.Indent) + aSB.AppendLine().Append(' ', aIndent); + aSB.Append(']'); + } + } + // End of JSONArray + + public partial class JSONObject : JSONNode + { + private Dictionary m_Dict = new Dictionary(); + + private bool inline = false; + public override bool Inline + { + get { return inline; } + set { inline = value; } + } + + public override JSONNodeType Tag { get { return JSONNodeType.Object; } } + public override bool IsObject { get { return true; } } + + public override Enumerator GetEnumerator() { return new Enumerator(m_Dict.GetEnumerator()); } + + + public override JSONNode this[string aKey] + { + get + { + if (m_Dict.ContainsKey(aKey)) + return m_Dict[aKey]; + else + return new JSONLazyCreator(this, aKey); + } + set + { + if (value == null) + value = JSONNull.CreateOrGet(); + if (m_Dict.ContainsKey(aKey)) + m_Dict[aKey] = value; + else + m_Dict.Add(aKey, value); + } + } + + public override JSONNode this[int aIndex] + { + get + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return null; + return m_Dict.ElementAt(aIndex).Value; + } + set + { + if (value == null) + value = JSONNull.CreateOrGet(); + if (aIndex < 0 || aIndex >= m_Dict.Count) + return; + string key = m_Dict.ElementAt(aIndex).Key; + m_Dict[key] = value; + } + } + + public override int Count + { + get { return m_Dict.Count; } + } + + public override void Add(string aKey, JSONNode aItem) + { + if (aItem == null) + aItem = JSONNull.CreateOrGet(); + + if (aKey != null) + { + if (m_Dict.ContainsKey(aKey)) + m_Dict[aKey] = aItem; + else + m_Dict.Add(aKey, aItem); + } + else + m_Dict.Add(Guid.NewGuid().ToString(), aItem); + } + + public override JSONNode Remove(string aKey) + { + if (!m_Dict.ContainsKey(aKey)) + return null; + JSONNode tmp = m_Dict[aKey]; + m_Dict.Remove(aKey); + return tmp; + } + + public override JSONNode Remove(int aIndex) + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return null; + var item = m_Dict.ElementAt(aIndex); + m_Dict.Remove(item.Key); + return item.Value; + } + + public override JSONNode Remove(JSONNode aNode) + { + try + { + var item = m_Dict.Where(k => k.Value == aNode).First(); + m_Dict.Remove(item.Key); + return aNode; + } + catch + { + return null; + } + } + + public override JSONNode Clone() + { + var node = new JSONObject(); + foreach (var n in m_Dict) + { + node.Add(n.Key, n.Value.Clone()); + } + return node; + } + + public override bool HasKey(string aKey) + { + return m_Dict.ContainsKey(aKey); + } + + public override JSONNode GetValueOrDefault(string aKey, JSONNode aDefault) + { + JSONNode res; + if (m_Dict.TryGetValue(aKey, out res)) + return res; + return aDefault; + } + + public override IEnumerable Children + { + get + { + foreach (KeyValuePair N in m_Dict) + yield return N.Value; + } + } + + internal override void WriteToStringBuilder(StringBuilder aSB, int aIndent, int aIndentInc, JSONTextMode aMode) + { + aSB.Append('{'); + bool first = true; + if (inline) + aMode = JSONTextMode.Compact; + foreach (var k in m_Dict) + { + if (!first) + aSB.Append(','); + first = false; + if (aMode == JSONTextMode.Indent) + aSB.AppendLine(); + if (aMode == JSONTextMode.Indent) + aSB.Append(' ', aIndent + aIndentInc); + aSB.Append('\"').Append(Escape(k.Key)).Append('\"'); + if (aMode == JSONTextMode.Compact) + aSB.Append(':'); + else + aSB.Append(" : "); + k.Value.WriteToStringBuilder(aSB, aIndent + aIndentInc, aIndentInc, aMode); + } + if (aMode == JSONTextMode.Indent) + aSB.AppendLine().Append(' ', aIndent); + aSB.Append('}'); + } + + } + // End of JSONObject + + public partial class JSONString : JSONNode + { + private string m_Data; + + public override JSONNodeType Tag { get { return JSONNodeType.String; } } + public override bool IsString { get { return true; } } + + public override Enumerator GetEnumerator() { return new Enumerator(); } + + + public override string Value + { + get { return m_Data; } + set + { + m_Data = value; + } + } + + public JSONString(string aData) + { + m_Data = aData; + } + public override JSONNode Clone() + { + return new JSONString(m_Data); + } + + internal override void WriteToStringBuilder(StringBuilder aSB, int aIndent, int aIndentInc, JSONTextMode aMode) + { + aSB.Append('\"').Append(Escape(m_Data)).Append('\"'); + } + public override bool Equals(object obj) + { + if (base.Equals(obj)) + return true; + string s = obj as string; + if (s != null) + return m_Data == s; + JSONString s2 = obj as JSONString; + if (s2 != null) + return m_Data == s2.m_Data; + return false; + } + public override int GetHashCode() + { + return m_Data.GetHashCode(); + } + } + // End of JSONString + + public partial class JSONNumber : JSONNode + { + private double m_Data; + + public override JSONNodeType Tag { get { return JSONNodeType.Number; } } + public override bool IsNumber { get { return true; } } + public override Enumerator GetEnumerator() { return new Enumerator(); } + + public override string Value + { + get { return m_Data.ToString(CultureInfo.InvariantCulture); } + set + { + double v; + if (double.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out v)) + m_Data = v; + } + } + + public override double AsDouble + { + get { return m_Data; } + set { m_Data = value; } + } + public override long AsLong + { + get { return (long)m_Data; } + set { m_Data = value; } + } + + public JSONNumber(double aData) + { + m_Data = aData; + } + + public JSONNumber(string aData) + { + Value = aData; + } + + public override JSONNode Clone() + { + return new JSONNumber(m_Data); + } + + internal override void WriteToStringBuilder(StringBuilder aSB, int aIndent, int aIndentInc, JSONTextMode aMode) + { + aSB.Append(Value); + } + private static bool IsNumeric(object value) + { + return value is int || value is uint + || value is float || value is double + || value is decimal + || value is long || value is ulong + || value is short || value is ushort + || value is sbyte || value is byte; + } + public override bool Equals(object obj) + { + if (obj == null) + return false; + if (base.Equals(obj)) + return true; + JSONNumber s2 = obj as JSONNumber; + if (s2 != null) + return m_Data == s2.m_Data; + if (IsNumeric(obj)) + return Convert.ToDouble(obj) == m_Data; + return false; + } + public override int GetHashCode() + { + return m_Data.GetHashCode(); + } + } + // End of JSONNumber + + public partial class JSONBool : JSONNode + { + private bool m_Data; + + public override JSONNodeType Tag { get { return JSONNodeType.Boolean; } } + public override bool IsBoolean { get { return true; } } + public override Enumerator GetEnumerator() { return new Enumerator(); } + + public override string Value + { + get { return m_Data.ToString(); } + set + { + bool v; + if (bool.TryParse(value, out v)) + m_Data = v; + } + } + public override bool AsBool + { + get { return m_Data; } + set { m_Data = value; } + } + + public JSONBool(bool aData) + { + m_Data = aData; + } + + public JSONBool(string aData) + { + Value = aData; + } + + public override JSONNode Clone() + { + return new JSONBool(m_Data); + } + + internal override void WriteToStringBuilder(StringBuilder aSB, int aIndent, int aIndentInc, JSONTextMode aMode) + { + aSB.Append((m_Data) ? "true" : "false"); + } + public override bool Equals(object obj) + { + if (obj == null) + return false; + if (obj is bool) + return m_Data == (bool)obj; + return false; + } + public override int GetHashCode() + { + return m_Data.GetHashCode(); + } + } + // End of JSONBool + + public partial class JSONNull : JSONNode + { + static JSONNull m_StaticInstance = new JSONNull(); + public static bool reuseSameInstance = true; + public static JSONNull CreateOrGet() + { + if (reuseSameInstance) + return m_StaticInstance; + return new JSONNull(); + } + private JSONNull() { } + + public override JSONNodeType Tag { get { return JSONNodeType.NullValue; } } + public override bool IsNull { get { return true; } } + public override Enumerator GetEnumerator() { return new Enumerator(); } + + public override string Value + { + get { return "null"; } + set { } + } + public override bool AsBool + { + get { return false; } + set { } + } + + public override JSONNode Clone() + { + return CreateOrGet(); + } + + public override bool Equals(object obj) + { + if (object.ReferenceEquals(this, obj)) + return true; + return (obj is JSONNull); + } + public override int GetHashCode() + { + return 0; + } + + internal override void WriteToStringBuilder(StringBuilder aSB, int aIndent, int aIndentInc, JSONTextMode aMode) + { + aSB.Append("null"); + } + } + // End of JSONNull + + internal partial class JSONLazyCreator : JSONNode + { + private JSONNode m_Node = null; + private string m_Key = null; + public override JSONNodeType Tag { get { return JSONNodeType.None; } } + public override Enumerator GetEnumerator() { return new Enumerator(); } + + public JSONLazyCreator(JSONNode aNode) + { + m_Node = aNode; + m_Key = null; + } + + public JSONLazyCreator(JSONNode aNode, string aKey) + { + m_Node = aNode; + m_Key = aKey; + } + + private T Set(T aVal) where T : JSONNode + { + if (m_Key == null) + m_Node.Add(aVal); + else + m_Node.Add(m_Key, aVal); + m_Node = null; // Be GC friendly. + return aVal; + } + + public override JSONNode this[int aIndex] + { + get { return new JSONLazyCreator(this); } + set { Set(new JSONArray()).Add(value); } + } + + public override JSONNode this[string aKey] + { + get { return new JSONLazyCreator(this, aKey); } + set { Set(new JSONObject()).Add(aKey, value); } + } + + public override void Add(JSONNode aItem) + { + Set(new JSONArray()).Add(aItem); + } + + public override void Add(string aKey, JSONNode aItem) + { + Set(new JSONObject()).Add(aKey, aItem); + } + + public static bool operator ==(JSONLazyCreator a, object b) + { + if (b == null) + return true; + return System.Object.ReferenceEquals(a, b); + } + + public static bool operator !=(JSONLazyCreator a, object b) + { + return !(a == b); + } + + public override bool Equals(object obj) + { + if (obj == null) + return true; + return System.Object.ReferenceEquals(this, obj); + } + + public override int GetHashCode() + { + return 0; + } + + public override int AsInt + { + get { Set(new JSONNumber(0)); return 0; } + set { Set(new JSONNumber(value)); } + } + + public override float AsFloat + { + get { Set(new JSONNumber(0.0f)); return 0.0f; } + set { Set(new JSONNumber(value)); } + } + + public override double AsDouble + { + get { Set(new JSONNumber(0.0)); return 0.0; } + set { Set(new JSONNumber(value)); } + } + + public override long AsLong + { + get + { + if (longAsString) + Set(new JSONString("0")); + else + Set(new JSONNumber(0.0)); + return 0L; + } + set + { + if (longAsString) + Set(new JSONString(value.ToString())); + else + Set(new JSONNumber(value)); + } + } + + public override bool AsBool + { + get { Set(new JSONBool(false)); return false; } + set { Set(new JSONBool(value)); } + } + + public override JSONArray AsArray + { + get { return Set(new JSONArray()); } + } + + public override JSONObject AsObject + { + get { return Set(new JSONObject()); } + } + internal override void WriteToStringBuilder(StringBuilder aSB, int aIndent, int aIndentInc, JSONTextMode aMode) + { + aSB.Append("null"); + } + } + // End of JSONLazyCreator + + public static class JSON + { + public static JSONNode Parse(string aJSON) + { + return JSONNode.Parse(aJSON); + } + } +} \ No newline at end of file diff --git a/Assets/AdaptySDK/SimpleJSON.cs.meta b/Assets/AdaptySDK/SimpleJSON.cs.meta new file mode 100644 index 0000000..8b3def5 --- /dev/null +++ b/Assets/AdaptySDK/SimpleJSON.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e80b8c7ccefdc4d87ade9cfd88440dc4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager.meta b/Assets/ExternalDependencyManager.meta similarity index 77% rename from AdaptyUnityProject/Assets/ExternalDependencyManager.meta rename to Assets/ExternalDependencyManager.meta index d51296e..4781bb6 100644 --- a/AdaptyUnityProject/Assets/ExternalDependencyManager.meta +++ b/Assets/ExternalDependencyManager.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e7f679112961a0f7f11fdb3f983aed77 +guid: 034880e87640f4dbd96d9eb6355d9022 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ExternalDependencyManager/Editor.meta b/Assets/ExternalDependencyManager/Editor.meta new file mode 100644 index 0000000..0ecb0e6 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0059872b1580843ecb31c5eae9f18196 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169.meta b/Assets/ExternalDependencyManager/Editor/1.2.169.meta new file mode 100644 index 0000000..a3cbe0b --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.169.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f6b8579bee554c7db4e8a13db998cfd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll new file mode 100755 index 0000000..214390d Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.mdb b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.mdb new file mode 100755 index 0000000..3b1af32 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.mdb differ diff --git a/AdaptyUnityProject/Assets/Adapty/Docs/API.pdf.meta b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.mdb.meta similarity index 74% rename from AdaptyUnityProject/Assets/Adapty/Docs/API.pdf.meta rename to Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.mdb.meta index 3678f1e..0719962 100644 --- a/AdaptyUnityProject/Assets/Adapty/Docs/API.pdf.meta +++ b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.mdb.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c6644b6a089714b9d9ab7c25e40e2c44 +guid: 832cc7ee0e7934649b56e87494d85ba0 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.meta b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.meta new file mode 100644 index 0000000..759baa8 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: f9b3ae5bda5be4dbb92051bf7f338312 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll similarity index 68% rename from Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll rename to Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll index fc672fd..4761399 100755 Binary files a/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll and b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.mdb b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.mdb new file mode 100755 index 0000000..40fa73e Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.mdb differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.mdb.meta b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.mdb.meta new file mode 100644 index 0000000..28d5368 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.mdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ea8ea2a534d804201ae2b73d5c1fe6e2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.meta b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.meta new file mode 100644 index 0000000..5c94117 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4a6895dfbb65447b797cfaaa2742e37c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll similarity index 99% rename from AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll rename to Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll index 39d497b..b23356b 100755 Binary files a/AdaptyUnityProject/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll and b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.mdb b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.mdb similarity index 95% rename from Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.mdb rename to Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.mdb index cfe8549..eba1506 100755 Binary files a/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.mdb and b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.mdb differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.mdb.meta b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.mdb.meta new file mode 100644 index 0000000..302606e --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.mdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d19b016f6a14c49ddb87abc0266ff99f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.meta b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.meta new file mode 100644 index 0000000..858df03 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: f99c334d56011440f954aa34f4b5e166 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll new file mode 100755 index 0000000..215b999 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.mdb b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.mdb new file mode 100755 index 0000000..266cfec Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.mdb differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.mdb.meta b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.mdb.meta new file mode 100644 index 0000000..4192c27 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.mdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4bda2ad7a6df749048d250abf0160437 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.meta b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.meta new file mode 100644 index 0000000..fbffcf8 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 105eb1a527a014b7780878f7f3496309 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/CHANGELOG.md b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md index fafaf22..79d7b94 100755 --- a/Assets/ExternalDependencyManager/Editor/CHANGELOG.md +++ b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md @@ -1,13 +1,69 @@ +# Version 1.2.169 - Jan 20, 2021 +* General - Fixes #425 - Change to save `GvhProjectSettings.xml` without + Unicode byte order mark (BoM). +* Android Resolver - Remove reference to `jcenter()` +* iOS Resolver - Force setting `LANG` when executing Cocoapods in shell mode on + Mac. + +# Version 1.2.168 - Dec 9, 2021 +* All - Fixes #472 by removing the use of `System.Diagnostics.Debug.Assert` +* All - Fixed #477 by properly enabling EDM4U libraries for Unity 2021.2+ when + the package is installed through `.tgz` + +# Version 1.2.167 - Oct 6, 2021 +* All - Moved versioned `.dll` in EDM4U to a versioned folder and remove their + version postfix in their filename. For instance, `IOSResolver.dll` will be + placed at `ExternalDependencyManager/Editor/1.2.167/Google.IOSResolver.dll`. +* Android Resolver - Fixed #243 by only using the highest version in + `mainTemplate.gradle` when duplicated dependencies are presented. +* Android Resolver - Added supports to x86_64 to ABI list for Android apps on + Chrome OS. + +# Version 1.2.166 - Jun 30, 2021 +* All - Fixed #440 and fixed #447 by specifying the parameter type while calling + `GetApplicationIdentifier()` Unity API using reflection, due to a new + overloaded method introduced in Unity 2021.2. +* Android Resolver - Fixed #442 by patching `Dependency.IsGreater()` when the + version strings end '+'. + +# Version 1.2.165 - Apr 28, 2021 +## Bug Fixes +* Version Handler - Fixed #431 by replacing the use of `HttpUtility.UrlEncode()` + which causes NullReferenceException in certain version of Unity. +* Android Resolver - Check that androidSdkRootPath directory exists before using + as sdkPath. +* Android Resolver - Fixed Android Resolver integration tests with Unity + 2019.3+. + +# Version 1.2.164 - Feb 4, 2021 +## New Features +* Android Resolver - Added support for Android packages with classifier in their + namespaces. +* iOS Resolver - Added new settings in iOS Resolver to configure generated + Podfile. +* iOS Resolver - Added a new attribute `addToAllTargets` in Dependencies.xml. + +## Bug Fixes +* iOS Resolver - Fixed XML parsing for `bitcodeEnabled` attribute in + Dependencies.xml. + +# Version 1.2.163 - Dec 15, 2020 +## Bug Fixes +* Version Handler - Fixed measurement reporting + # Version 1.2.162 - Nov 19, 2020 +## Bug Fixes * Version Handler - Improved #413 by preventing Version Handler from running from static constructor when it is disabled. * Package Manager Resolver - Remove GPR # Version 1.2.161 - Oct 12, 2020 +## Bug Fixes * Android Resolver - Fixed the issue that Android Resolver does not resolve again before build in Unity 2020 if it failed to resolve previously. # Version 1.2.160 - Sep 30, 2020 +## Bug Fixes * Android Resolver - Fixed a regression that gradleResolver can be null until Initialize() is called. * Android Resolver - Fixed a regression that Android Resolver failed in Unity @@ -15,6 +71,7 @@ `mainTemplate.gradle` is not enabled at all. # Version 1.2.159 - Sep 11, 2020 +## Bug Fixes * Android Resolver - Fixed #322 where the Unity editor will lose its target SDK setting between Unity restarts if `>28` is selected in 2019. This is due to Unity AndroidSdkVersions enum does not contain values above 28. @@ -25,6 +82,7 @@ `Player Settings > Settings for Android > Publishing Settings`. # Version 1.2.158 - Sep 3, 2020 +## Bug Fixes * Version Handler: Fixed editor freeze when `-executeMethod` is used in non-batch mode. * Android Resolver: Normalized file paths when generating local Maven repo @@ -33,6 +91,7 @@ Windows. # Version 1.2.157 - Aug 6, 2020 +## Bug Fixes * Android Resolver: Delay initialization until active build target is Android and the editor is not in play mode. * iOS Resolver: Delay initialization until active build target is iOS @@ -41,7 +100,7 @@ operations are spawned at the same time. # Version 1.2.156 - June 10, 2020 -* All: Described EDM4U analytics data usage in readme. +## Bug Fixes * Android Resolver: Fixed that the generated local repo assets contains redundent labels which are causing Version Handler to failed while uninstalling packages. @@ -50,24 +109,33 @@ * Android Resolver: Limited to only create local Maven repo when the source repo contains ".srcaar" file. +## Changes +* All: Described EDM4U analytics data usage in readme. + # Version 1.2.155 - May 14, 2020 +## Bug Fixes * All: Fixed compiler error when build with Unity 5.4 or below due to the usage of Rect.zero. * All: Ignore cases when checking command line arguments. # Version 1.2.154 - May 14, 2020 +## Bug Fixes * All: Make each MultiSelectWindow for different purposes to have its own unique window. + +## Changes * All: Replace all dialog with DialogWindow which is implemented from EditorWindow. * Package Manager Resolver: Clarify how manifest.json will be changed in Package Manager Resolver window. # Version 1.2.153 - Apr 24, 2020 +## Bug Fixes * Android Resolver: Fixed an exception when repainting the Android resolution window in Unity 2019.3.x. # Version 1.2.152 - Apr 17, 2020 +## Bug Fixes * Version Handler: Fixed exception when waiting for enabled editor DLLs to load. * Android Resolver: Fixed regression when using a Custom Gradle Template diff --git a/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta new file mode 100644 index 0000000..2a5ee7b --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9c7f9114fc0594ef18a57b97ba745bb0 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll b/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll deleted file mode 100755 index e33bd12..0000000 Binary files a/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll and /dev/null differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.mdb b/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.mdb deleted file mode 100755 index bbcb059..0000000 Binary files a/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.mdb and /dev/null differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.mdb b/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.mdb deleted file mode 100755 index 2645439..0000000 Binary files a/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.mdb and /dev/null differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll b/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll deleted file mode 100755 index 39d497b..0000000 Binary files a/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll and /dev/null differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll index 532642d..bcf0890 100755 Binary files a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll and b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb index 8eb1057..4c395a1 100755 Binary files a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb and b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb.meta b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb.meta new file mode 100644 index 0000000..753182b --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c1219a6614d9f4369852876de4be4b70 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta new file mode 100644 index 0000000..4f462b7 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 056d03785886d46ee8cbb7b391c51c02 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll b/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll deleted file mode 100755 index 8a7173f..0000000 Binary files a/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll and /dev/null differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.mdb b/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.mdb deleted file mode 100755 index ac20dc4..0000000 Binary files a/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.mdb and /dev/null differ diff --git a/Assets/ExternalDependencyManager/Editor/LICENSE.meta b/Assets/ExternalDependencyManager/Editor/LICENSE.meta new file mode 100644 index 0000000..8606315 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2503d45c9a4c24ee492279c18f380dec +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/README.md b/Assets/ExternalDependencyManager/Editor/README.md index 37b64e4..cbc98e1 100755 --- a/Assets/ExternalDependencyManager/Editor/README.md +++ b/Assets/ExternalDependencyManager/Editor/README.md @@ -432,7 +432,7 @@ For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled: + minTargetSdk="6.0" addToAllTargets="false" /> ``` diff --git a/Assets/ExternalDependencyManager/Editor/README.md.meta b/Assets/ExternalDependencyManager/Editor/README.md.meta new file mode 100644 index 0000000..d85e6e6 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 25f05492ddc6848a09e7da5d8e43150c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt deleted file mode 100755 index 17cb8ec..0000000 --- a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt +++ /dev/null @@ -1,13 +0,0 @@ -Assets/ExternalDependencyManager/Editor/CHANGELOG.md -Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll -Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.mdb -Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll -Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.mdb -Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll -Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.mdb -Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll -Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb -Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll -Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.mdb -Assets/ExternalDependencyManager/Editor/LICENSE -Assets/ExternalDependencyManager/Editor/README.md diff --git a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.169_manifest.txt b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.169_manifest.txt new file mode 100755 index 0000000..63e8150 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.169_manifest.txt @@ -0,0 +1,13 @@ +Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.169/Google.IOSResolver.dll.mdb +Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.169/Google.JarResolver.dll.mdb +Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.169/Google.PackageManagerResolver.dll.mdb +Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll +Assets/ExternalDependencyManager/Editor/1.2.169/Google.VersionHandlerImpl.dll.mdb +Assets/ExternalDependencyManager/Editor/CHANGELOG.md +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb +Assets/ExternalDependencyManager/Editor/LICENSE +Assets/ExternalDependencyManager/Editor/README.md diff --git a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.169_manifest.txt.meta b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.169_manifest.txt.meta new file mode 100644 index 0000000..b462289 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.169_manifest.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 536778bbc17d04189be5b74286b6932e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Icon.png b/Assets/Icon.png similarity index 100% rename from AdaptyUnityProject/Assets/Icon.png rename to Assets/Icon.png diff --git a/AdaptyUnityProject/Assets/Icon.png.meta b/Assets/Icon.png.meta similarity index 94% rename from AdaptyUnityProject/Assets/Icon.png.meta rename to Assets/Icon.png.meta index eb76fde..cc4d003 100644 --- a/AdaptyUnityProject/Assets/Icon.png.meta +++ b/Assets/Icon.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e821f2fa23a0c4971aa11b57e68f00c1 +guid: ad436d68c69b445e89b5c932bd6294fd TextureImporter: internalIDToNameTable: [] externalObjects: {} @@ -23,7 +23,6 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 - vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,9 +31,9 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 + filterMode: 1 + aniso: 1 + mipBias: 0 wrapU: 1 wrapV: 1 wrapW: 1 @@ -58,7 +57,6 @@ TextureImporter: maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 - ignorePngGamma: 0 applyGammaDecoding: 0 platformSettings: - serializedVersion: 3 diff --git a/Assets/Icons.meta b/Assets/Icons.meta new file mode 100644 index 0000000..4d3f703 --- /dev/null +++ b/Assets/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa62ae81271f7436abf2e9c0a7e0110c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS.meta b/Assets/Icons/iOS.meta new file mode 100644 index 0000000..e8ea2eb --- /dev/null +++ b/Assets/Icons/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02466f350031344ab8f66c5844ee22ea +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-20x20@1x.png b/Assets/Icons/iOS/Icon-App-20x20@1x.png new file mode 100644 index 0000000..6bbb54f Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-20x20@1x.png differ diff --git a/AdaptyUnityProject/Assets/Adapty/Editor/logo.png.meta b/Assets/Icons/iOS/Icon-App-20x20@1x.png.meta similarity index 94% rename from AdaptyUnityProject/Assets/Adapty/Editor/logo.png.meta rename to Assets/Icons/iOS/Icon-App-20x20@1x.png.meta index ae460a0..95051a6 100644 --- a/AdaptyUnityProject/Assets/Adapty/Editor/logo.png.meta +++ b/Assets/Icons/iOS/Icon-App-20x20@1x.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fe4bb56840113499b86b2f7fb46e3d91 +guid: 72fe61be828c24a5cb7efe04bfb65f1f TextureImporter: internalIDToNameTable: [] externalObjects: {} @@ -23,7 +23,6 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 - vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,9 +31,9 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 + filterMode: 1 + aniso: 1 + mipBias: 0 wrapU: 1 wrapV: 1 wrapW: 1 @@ -58,7 +57,6 @@ TextureImporter: maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 - ignorePngGamma: 0 applyGammaDecoding: 0 platformSettings: - serializedVersion: 3 diff --git a/Assets/Icons/iOS/Icon-App-20x20@2x.png b/Assets/Icons/iOS/Icon-App-20x20@2x.png new file mode 100644 index 0000000..48c6de7 Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-20x20@2x.png differ diff --git a/Assets/Icons/iOS/Icon-App-20x20@2x.png.meta b/Assets/Icons/iOS/Icon-App-20x20@2x.png.meta new file mode 100644 index 0000000..84a0eab --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-20x20@2x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 3f4e8f1737d97461999315e6305cbd83 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-20x20@3x.png b/Assets/Icons/iOS/Icon-App-20x20@3x.png new file mode 100644 index 0000000..67330ee Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-20x20@3x.png differ diff --git a/Assets/Icons/iOS/Icon-App-20x20@3x.png.meta b/Assets/Icons/iOS/Icon-App-20x20@3x.png.meta new file mode 100644 index 0000000..f9ab20d --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-20x20@3x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 29455e90612e447f099b5b37ea01e357 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-29x29@1x.png b/Assets/Icons/iOS/Icon-App-29x29@1x.png new file mode 100644 index 0000000..dbfabee Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-29x29@1x.png differ diff --git a/Assets/Icons/iOS/Icon-App-29x29@1x.png.meta b/Assets/Icons/iOS/Icon-App-29x29@1x.png.meta new file mode 100644 index 0000000..9db4089 --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-29x29@1x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 49acc0250bc3340d3a641cc9541c024b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-29x29@2x.png b/Assets/Icons/iOS/Icon-App-29x29@2x.png new file mode 100644 index 0000000..762acdc Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-29x29@2x.png differ diff --git a/Assets/Icons/iOS/Icon-App-29x29@2x.png.meta b/Assets/Icons/iOS/Icon-App-29x29@2x.png.meta new file mode 100644 index 0000000..6d343a1 --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-29x29@2x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 556856fe8e0cb46a1930fa054c32cc83 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-29x29@3x.png b/Assets/Icons/iOS/Icon-App-29x29@3x.png new file mode 100644 index 0000000..9af5bb6 Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-29x29@3x.png differ diff --git a/Assets/Icons/iOS/Icon-App-29x29@3x.png.meta b/Assets/Icons/iOS/Icon-App-29x29@3x.png.meta new file mode 100644 index 0000000..ff4781b --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-29x29@3x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 108ce06f7768d4160ba2b30f50990075 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-40x40@1x.png b/Assets/Icons/iOS/Icon-App-40x40@1x.png new file mode 100644 index 0000000..48c6de7 Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-40x40@1x.png differ diff --git a/Assets/Icons/iOS/Icon-App-40x40@1x.png.meta b/Assets/Icons/iOS/Icon-App-40x40@1x.png.meta new file mode 100644 index 0000000..81eb6ff --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-40x40@1x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: a281f72ce00204e9190a6bfcc4dedb41 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-40x40@2x.png b/Assets/Icons/iOS/Icon-App-40x40@2x.png new file mode 100644 index 0000000..b12ee8f Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-40x40@2x.png differ diff --git a/Assets/Icons/iOS/Icon-App-40x40@2x.png.meta b/Assets/Icons/iOS/Icon-App-40x40@2x.png.meta new file mode 100644 index 0000000..c4507e8 --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-40x40@2x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: a3aa0a832f2ee4f368804ed3c28252db +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-40x40@3x.png b/Assets/Icons/iOS/Icon-App-40x40@3x.png new file mode 100644 index 0000000..b4f6f50 Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-40x40@3x.png differ diff --git a/Assets/Icons/iOS/Icon-App-40x40@3x.png.meta b/Assets/Icons/iOS/Icon-App-40x40@3x.png.meta new file mode 100644 index 0000000..7c30f2d --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-40x40@3x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: ef2982e0a480e4b1b9531f6af0221c4b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-60x60@2x.png b/Assets/Icons/iOS/Icon-App-60x60@2x.png new file mode 100644 index 0000000..b4f6f50 Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-60x60@2x.png differ diff --git a/Assets/Icons/iOS/Icon-App-60x60@2x.png.meta b/Assets/Icons/iOS/Icon-App-60x60@2x.png.meta new file mode 100644 index 0000000..332579e --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-60x60@2x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: c901d6b457b3f4a3aa5aef951ce98171 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-60x60@3x.png b/Assets/Icons/iOS/Icon-App-60x60@3x.png new file mode 100644 index 0000000..929a70a Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-60x60@3x.png differ diff --git a/Assets/Icons/iOS/Icon-App-60x60@3x.png.meta b/Assets/Icons/iOS/Icon-App-60x60@3x.png.meta new file mode 100644 index 0000000..c850ef6 --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-60x60@3x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 4ca45485e07854c47943331e097722f3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-76x76@1x.png b/Assets/Icons/iOS/Icon-App-76x76@1x.png new file mode 100644 index 0000000..61cf1f2 Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-76x76@1x.png differ diff --git a/Assets/Icons/iOS/Icon-App-76x76@1x.png.meta b/Assets/Icons/iOS/Icon-App-76x76@1x.png.meta new file mode 100644 index 0000000..0f5867e --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-76x76@1x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: f2108181284ba486aba9a6230f38be1c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-76x76@2x.png b/Assets/Icons/iOS/Icon-App-76x76@2x.png new file mode 100644 index 0000000..85f16c0 Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-76x76@2x.png differ diff --git a/Assets/Icons/iOS/Icon-App-76x76@2x.png.meta b/Assets/Icons/iOS/Icon-App-76x76@2x.png.meta new file mode 100644 index 0000000..dab4f49 --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-76x76@2x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: f0368083c6f624bf89a56990358f168e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/Icon-App-83.5x83.5@2x.png b/Assets/Icons/iOS/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..0f84d70 Binary files /dev/null and b/Assets/Icons/iOS/Icon-App-83.5x83.5@2x.png differ diff --git a/Assets/Icons/iOS/Icon-App-83.5x83.5@2x.png.meta b/Assets/Icons/iOS/Icon-App-83.5x83.5@2x.png.meta new file mode 100644 index 0000000..92052ef --- /dev/null +++ b/Assets/Icons/iOS/Icon-App-83.5x83.5@2x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 29d08cea9bb9b4137b3520dcc0803a4f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/iOS/ItunesArtwork@2x.png b/Assets/Icons/iOS/ItunesArtwork@2x.png new file mode 100644 index 0000000..8de3ffc Binary files /dev/null and b/Assets/Icons/iOS/ItunesArtwork@2x.png differ diff --git a/Assets/Icons/iOS/ItunesArtwork@2x.png.meta b/Assets/Icons/iOS/ItunesArtwork@2x.png.meta new file mode 100644 index 0000000..4ff8707 --- /dev/null +++ b/Assets/Icons/iOS/ItunesArtwork@2x.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: ad474d9dd3e5d455bafd06be6184c10e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PlayServicesResolver.meta b/Assets/PlayServicesResolver.meta new file mode 100644 index 0000000..4735742 --- /dev/null +++ b/Assets/PlayServicesResolver.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0333d98f44f5491ca781ed530e18fd8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PlayServicesResolver/Editor.meta b/Assets/PlayServicesResolver/Editor.meta new file mode 100644 index 0000000..d5eec54 --- /dev/null +++ b/Assets/PlayServicesResolver/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 39da72d23ea194cf5b6a887c1230e566 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PlayServicesResolver/Editor/play-services-resolver_v1.2.137.0.txt b/Assets/PlayServicesResolver/Editor/play-services-resolver_v1.2.137.0.txt new file mode 100755 index 0000000..a0268fc --- /dev/null +++ b/Assets/PlayServicesResolver/Editor/play-services-resolver_v1.2.137.0.txt @@ -0,0 +1,2 @@ +Assets/PlayServicesResolver/Editor/Google.VersionHandler.dll +Assets/PlayServicesResolver/Editor/Google.VersionHandler.dll.mdb diff --git a/Assets/PlayServicesResolver/Editor/play-services-resolver_v1.2.137.0.txt.meta b/Assets/PlayServicesResolver/Editor/play-services-resolver_v1.2.137.0.txt.meta new file mode 100644 index 0000000..1e51a5b --- /dev/null +++ b/Assets/PlayServicesResolver/Editor/play-services-resolver_v1.2.137.0.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d058b5f8bbafc42e9a79ec7fcf4b6429 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Adapty/Plugins.meta b/Assets/Plugins.meta similarity index 77% rename from AdaptyUnityProject/Assets/Adapty/Plugins.meta rename to Assets/Plugins.meta index 51c1b7d..d4a57ae 100644 --- a/AdaptyUnityProject/Assets/Adapty/Plugins.meta +++ b/Assets/Plugins.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e263599b1988049baac431c815b4bd78 +guid: eef7d55875e4c46a499370f0f6ba4ab3 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/AdaptyUnityProject/Assets/Plugins/Android.meta b/Assets/Plugins/Android.meta similarity index 77% rename from AdaptyUnityProject/Assets/Plugins/Android.meta rename to Assets/Plugins/Android.meta index 0286fae..70d518f 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android.meta +++ b/Assets/Plugins/Android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 91ad067f9aaec49fc9213e7c2d7e4524 +guid: cdd983c3b8ae54a47aa1565c7e78406e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Plugins/Android/AndroidManifest.xml b/Assets/Plugins/Android/AndroidManifest.xml new file mode 100644 index 0000000..731fd23 --- /dev/null +++ b/Assets/Plugins/Android/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/Assets/Plugins/Android/AndroidManifest.xml.meta b/Assets/Plugins/Android/AndroidManifest.xml.meta new file mode 100644 index 0000000..c81448b --- /dev/null +++ b/Assets/Plugins/Android/AndroidManifest.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ee57a240a3d164986bd535470b0673e1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/LauncherManifest.xml.DISABLED b/Assets/Plugins/Android/LauncherManifest.xml.DISABLED new file mode 100644 index 0000000..4b22eb9 --- /dev/null +++ b/Assets/Plugins/Android/LauncherManifest.xml.DISABLED @@ -0,0 +1,17 @@ + + + + + + + diff --git a/Assets/Plugins/Android/LauncherManifest.xml.DISABLED.meta b/Assets/Plugins/Android/LauncherManifest.xml.DISABLED.meta new file mode 100644 index 0000000..092dc33 --- /dev/null +++ b/Assets/Plugins/Android/LauncherManifest.xml.DISABLED.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1d31020cbc5d44942880177800250d0a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.activity.activity-1.2.3.aar b/Assets/Plugins/Android/androidx.activity.activity-1.2.3.aar new file mode 100644 index 0000000..2f6f136 Binary files /dev/null and b/Assets/Plugins/Android/androidx.activity.activity-1.2.3.aar differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.annotation.annotation-1.0.0.jar.meta b/Assets/Plugins/Android/androidx.activity.activity-1.2.3.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.annotation.annotation-1.0.0.jar.meta rename to Assets/Plugins/Android/androidx.activity.activity-1.2.3.aar.meta index 5770bac..8c37d93 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.annotation.annotation-1.0.0.jar.meta +++ b/Assets/Plugins/Android/androidx.activity.activity-1.2.3.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2e66b6db16f4c4e2787ff7ef6dce2097 +guid: 21870b0b4d6e74a29bba2a980e6cc452 labels: - gpsr PluginImporter: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.annotation.annotation-1.0.0.jar b/Assets/Plugins/Android/androidx.annotation.annotation-1.2.0.jar similarity index 57% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.annotation.annotation-1.0.0.jar rename to Assets/Plugins/Android/androidx.annotation.annotation-1.2.0.jar index 124f128..7c49e1c 100644 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.annotation.annotation-1.0.0.jar and b/Assets/Plugins/Android/androidx.annotation.annotation-1.2.0.jar differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-common-2.0.0.jar.meta b/Assets/Plugins/Android/androidx.annotation.annotation-1.2.0.jar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-common-2.0.0.jar.meta rename to Assets/Plugins/Android/androidx.annotation.annotation-1.2.0.jar.meta index d232be0..2562b70 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-common-2.0.0.jar.meta +++ b/Assets/Plugins/Android/androidx.annotation.annotation-1.2.0.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3fd2bbf87596e4ceb8b17a90ee5b728a +guid: 771f36c7867e242a48dda94a86b67574 labels: - gpsr PluginImporter: diff --git a/Assets/Plugins/Android/androidx.annotation.annotation-experimental-1.0.0.aar b/Assets/Plugins/Android/androidx.annotation.annotation-experimental-1.0.0.aar new file mode 100644 index 0000000..179daf4 Binary files /dev/null and b/Assets/Plugins/Android/androidx.annotation.annotation-experimental-1.0.0.aar differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.0.0.aar.meta b/Assets/Plugins/Android/androidx.annotation.annotation-experimental-1.0.0.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.0.0.aar.meta rename to Assets/Plugins/Android/androidx.annotation.annotation-experimental-1.0.0.aar.meta index 57f0350..ea23d31 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.0.0.aar.meta +++ b/Assets/Plugins/Android/androidx.annotation.annotation-experimental-1.0.0.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 53b977ce993a4492fb33f72bfbe85783 +guid: 4f76ac36fdf42497fadd30ae2992789b labels: - gpsr PluginImporter: diff --git a/Assets/Plugins/Android/androidx.appcompat.appcompat-1.3.0.aar b/Assets/Plugins/Android/androidx.appcompat.appcompat-1.3.0.aar new file mode 100644 index 0000000..e0f4128 Binary files /dev/null and b/Assets/Plugins/Android/androidx.appcompat.appcompat-1.3.0.aar differ diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.asynclayoutinflater.asynclayoutinflater-1.0.0.aar.meta b/Assets/Plugins/Android/androidx.appcompat.appcompat-1.3.0.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.asynclayoutinflater.asynclayoutinflater-1.0.0.aar.meta rename to Assets/Plugins/Android/androidx.appcompat.appcompat-1.3.0.aar.meta index 18f3d01..918df10 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.asynclayoutinflater.asynclayoutinflater-1.0.0.aar.meta +++ b/Assets/Plugins/Android/androidx.appcompat.appcompat-1.3.0.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a959f63c43d9345fcbd62255e309cb6b +guid: ef979be74e45f432ba1a8dec4b7e46f2 labels: - gpsr PluginImporter: diff --git a/Assets/Plugins/Android/androidx.appcompat.appcompat-resources-1.3.0.aar b/Assets/Plugins/Android/androidx.appcompat.appcompat-resources-1.3.0.aar new file mode 100644 index 0000000..3f8dc6c Binary files /dev/null and b/Assets/Plugins/Android/androidx.appcompat.appcompat-resources-1.3.0.aar differ diff --git a/Assets/Plugins/Android/androidx.appcompat.appcompat-resources-1.3.0.aar.meta b/Assets/Plugins/Android/androidx.appcompat.appcompat-resources-1.3.0.aar.meta new file mode 100644 index 0000000..44e09bb --- /dev/null +++ b/Assets/Plugins/Android/androidx.appcompat.appcompat-resources-1.3.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 3840b919b58bb48b481cf9c599e2b0b5 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-common-2.0.0.jar b/Assets/Plugins/Android/androidx.arch.core.core-common-2.1.0.jar similarity index 57% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-common-2.0.0.jar rename to Assets/Plugins/Android/androidx.arch.core.core-common-2.1.0.jar index 98ec886..5dd6acd 100644 Binary files a/AdaptyUnityProject/Assets/Plugins/Android/androidx.arch.core.core-common-2.0.0.jar and b/Assets/Plugins/Android/androidx.arch.core.core-common-2.1.0.jar differ diff --git a/Assets/Plugins/Android/androidx.arch.core.core-common-2.1.0.jar.meta b/Assets/Plugins/Android/androidx.arch.core.core-common-2.1.0.jar.meta new file mode 100644 index 0000000..17ce59e --- /dev/null +++ b/Assets/Plugins/Android/androidx.arch.core.core-common-2.1.0.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: a82dc257c9db3496ca059a24ad6057b5 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.1.0.aar b/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.1.0.aar new file mode 100644 index 0000000..c31d5c3 Binary files /dev/null and b/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.1.0.aar differ diff --git a/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.1.0.aar.meta b/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.1.0.aar.meta new file mode 100644 index 0000000..c6d0bde --- /dev/null +++ b/Assets/Plugins/Android/androidx.arch.core.core-runtime-2.1.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 9eb00ef3d4da241b9a0ee10c6a165882 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.collection.collection-1.1.0.jar b/Assets/Plugins/Android/androidx.collection.collection-1.1.0.jar new file mode 100644 index 0000000..761fe3b Binary files /dev/null and b/Assets/Plugins/Android/androidx.collection.collection-1.1.0.jar differ diff --git a/Assets/Plugins/Android/androidx.collection.collection-1.1.0.jar.meta b/Assets/Plugins/Android/androidx.collection.collection-1.1.0.jar.meta new file mode 100644 index 0000000..f0df9e1 --- /dev/null +++ b/Assets/Plugins/Android/androidx.collection.collection-1.1.0.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: a22644cd6545746299412c626b3a139e +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.core.core-1.5.0.aar b/Assets/Plugins/Android/androidx.core.core-1.5.0.aar new file mode 100644 index 0000000..b813beb Binary files /dev/null and b/Assets/Plugins/Android/androidx.core.core-1.5.0.aar differ diff --git a/Assets/Plugins/Android/androidx.core.core-1.5.0.aar.meta b/Assets/Plugins/Android/androidx.core.core-1.5.0.aar.meta new file mode 100644 index 0000000..34366c3 --- /dev/null +++ b/Assets/Plugins/Android/androidx.core.core-1.5.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 2b983a658fdde49aeb7b2bf019e0c823 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar b/Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar similarity index 100% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar rename to Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar.meta b/Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar.meta rename to Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar.meta index 3d9112e..ffdcfd0 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar.meta +++ b/Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1a1adc0e7d3d64edaa1b706b93164cc2 +guid: 3d2d106e315e0438b905a83dbdf801c1 labels: - gpsr PluginImporter: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar b/Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar similarity index 100% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar rename to Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar.meta b/Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar.meta rename to Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar.meta index 6e5540a..272356c 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar.meta +++ b/Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 660ee0cc7c206489bb07a67fbb36db3a +guid: 8c9b490dca9da438ea6a939bb5e58a22 labels: - gpsr PluginImporter: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar b/Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar similarity index 100% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar rename to Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar.meta b/Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar.meta rename to Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar.meta index a8ace06..8a7ca21 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar.meta +++ b/Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c7cf5bca651914ff79861d07b1750662 +guid: d42f6e561aa3a43d6ad3d15fcf2ba71d labels: - gpsr PluginImporter: diff --git a/Assets/Plugins/Android/androidx.fragment.fragment-1.3.4.aar b/Assets/Plugins/Android/androidx.fragment.fragment-1.3.4.aar new file mode 100644 index 0000000..7a0965d Binary files /dev/null and b/Assets/Plugins/Android/androidx.fragment.fragment-1.3.4.aar differ diff --git a/Assets/Plugins/Android/androidx.fragment.fragment-1.3.4.aar.meta b/Assets/Plugins/Android/androidx.fragment.fragment-1.3.4.aar.meta new file mode 100644 index 0000000..aa87659 --- /dev/null +++ b/Assets/Plugins/Android/androidx.fragment.fragment-1.3.4.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 98df60cd37ea841c29d013f263f99742 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar b/Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar similarity index 100% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar rename to Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar.meta b/Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar.meta rename to Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar.meta index 2b20bf7..407517a 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar.meta +++ b/Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b83bf09f7fbeb46129737f789ded5737 +guid: 7f704e9242cd34b7bb521ca580f7c464 labels: - gpsr PluginImporter: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.3.1.jar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.3.1.jar new file mode 100644 index 0000000..db85be6 Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.3.1.jar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.3.1.jar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.3.1.jar.meta new file mode 100644 index 0000000..8203d11 --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.3.1.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: eb8d48a1631f34ea9813991a946c0eb1 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-extensions-2.2.0.aar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-extensions-2.2.0.aar new file mode 100644 index 0000000..8c737e3 Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-extensions-2.2.0.aar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-extensions-2.2.0.aar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-extensions-2.2.0.aar.meta new file mode 100644 index 0000000..ab5dc37 --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-extensions-2.2.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: f06c3a2cda6e144bb959a92536a0800f +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.2.0.aar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.2.0.aar new file mode 100644 index 0000000..3dbe2e4 Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.2.0.aar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.2.0.aar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.2.0.aar.meta new file mode 100644 index 0000000..5d962e9 --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.2.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: f3a6c59bc7d0d4dd299499594672ce30 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.3.1.aar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.3.1.aar new file mode 100644 index 0000000..93d4a3b Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.3.1.aar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.3.1.aar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.3.1.aar.meta new file mode 100644 index 0000000..d1c2c9f --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.3.1.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: cc643d1c551f04a66b7d127a25c959f2 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-process-2.2.0.aar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-process-2.2.0.aar new file mode 100644 index 0000000..ba8139a Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-process-2.2.0.aar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-process-2.2.0.aar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-process-2.2.0.aar.meta new file mode 100644 index 0000000..c5afc56 --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-process-2.2.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: de7ebb4dfdef64458a78286e61a6fc97 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.3.1.aar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.3.1.aar new file mode 100644 index 0000000..79c9fe4 Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.3.1.aar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.3.1.aar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.3.1.aar.meta new file mode 100644 index 0000000..c779f65 --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.3.1.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 1dc9ba0174d734d2aa6bdba003f27ac2 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-service-2.2.0.aar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-service-2.2.0.aar new file mode 100644 index 0000000..f7853e7 Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-service-2.2.0.aar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-service-2.2.0.aar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-service-2.2.0.aar.meta new file mode 100644 index 0000000..aa9fbed --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-service-2.2.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 0568a06a1970140bb92e666ce5464d88 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.3.1.aar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.3.1.aar new file mode 100644 index 0000000..9a9ccc3 Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.3.1.aar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.3.1.aar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.3.1.aar.meta new file mode 100644 index 0000000..68a31fc --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.3.1.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 38fcfbf95388340be91f5b9b882d4514 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-savedstate-2.3.1.aar b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-savedstate-2.3.1.aar new file mode 100644 index 0000000..8482ecb Binary files /dev/null and b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-savedstate-2.3.1.aar differ diff --git a/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-savedstate-2.3.1.aar.meta b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-savedstate-2.3.1.aar.meta new file mode 100644 index 0000000..7a6b2c1 --- /dev/null +++ b/Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-savedstate-2.3.1.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: a0064788509c74fcd800d5555bb8cd02 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar b/Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar similarity index 100% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar rename to Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar.meta b/Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar.meta rename to Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar.meta index 406e11f..bc919e6 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar.meta +++ b/Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 93a9a6d3a27eb42718998588f2d7b564 +guid: e88ac583704794e7e9ed0f0f4b734a56 labels: - gpsr PluginImporter: diff --git a/Assets/Plugins/Android/androidx.savedstate.savedstate-1.1.0.aar b/Assets/Plugins/Android/androidx.savedstate.savedstate-1.1.0.aar new file mode 100644 index 0000000..c655c8e Binary files /dev/null and b/Assets/Plugins/Android/androidx.savedstate.savedstate-1.1.0.aar differ diff --git a/Assets/Plugins/Android/androidx.savedstate.savedstate-1.1.0.aar.meta b/Assets/Plugins/Android/androidx.savedstate.savedstate-1.1.0.aar.meta new file mode 100644 index 0000000..4b432b8 --- /dev/null +++ b/Assets/Plugins/Android/androidx.savedstate.savedstate-1.1.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 5375441202f2241bbad1bdb9b087e1aa +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.tracing.tracing-1.0.0.aar b/Assets/Plugins/Android/androidx.tracing.tracing-1.0.0.aar new file mode 100644 index 0000000..daec68b Binary files /dev/null and b/Assets/Plugins/Android/androidx.tracing.tracing-1.0.0.aar differ diff --git a/Assets/Plugins/Android/androidx.tracing.tracing-1.0.0.aar.meta b/Assets/Plugins/Android/androidx.tracing.tracing-1.0.0.aar.meta new file mode 100644 index 0000000..6d315f5 --- /dev/null +++ b/Assets/Plugins/Android/androidx.tracing.tracing-1.0.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 2c20984d77f874b5c99d6f5f601623f3 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-1.1.0.aar b/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-1.1.0.aar new file mode 100644 index 0000000..0746c62 Binary files /dev/null and b/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-1.1.0.aar differ diff --git a/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-1.1.0.aar.meta b/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-1.1.0.aar.meta new file mode 100644 index 0000000..8528bb1 --- /dev/null +++ b/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-1.1.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: a209b19971aae460d9baa627d9393f6b +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-animated-1.1.0.aar b/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-animated-1.1.0.aar new file mode 100644 index 0000000..bf88577 Binary files /dev/null and b/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-animated-1.1.0.aar differ diff --git a/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-animated-1.1.0.aar.meta b/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-animated-1.1.0.aar.meta new file mode 100644 index 0000000..4526e96 --- /dev/null +++ b/Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-animated-1.1.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: b7e84273277de4cf7a8eb6f090bd6a86 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.1.1.aar b/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.1.1.aar new file mode 100644 index 0000000..4f5acaa Binary files /dev/null and b/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.1.1.aar differ diff --git a/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.1.1.aar.meta b/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.1.1.aar.meta new file mode 100644 index 0000000..3fbbc27 --- /dev/null +++ b/Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.1.1.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: a105a56b08ea64920a89d3ff16cf6b8a +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar b/Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar similarity index 100% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar rename to Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar diff --git a/AdaptyUnityProject/Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar.meta b/Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar.meta rename to Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar.meta index f01fe3a..456da82 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar.meta +++ b/Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5a3711730ab7540808c951cee25a9672 +guid: 04eec7f5a50c74630a9c4d3408018276 labels: - gpsr PluginImporter: diff --git a/Assets/Plugins/Android/androidx.webkit.webkit-1.4.0.aar b/Assets/Plugins/Android/androidx.webkit.webkit-1.4.0.aar new file mode 100644 index 0000000..c3597db Binary files /dev/null and b/Assets/Plugins/Android/androidx.webkit.webkit-1.4.0.aar differ diff --git a/Assets/Plugins/Android/androidx.webkit.webkit-1.4.0.aar.meta b/Assets/Plugins/Android/androidx.webkit.webkit-1.4.0.aar.meta new file mode 100644 index 0000000..d149b66 --- /dev/null +++ b/Assets/Plugins/Android/androidx.webkit.webkit-1.4.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 8d89a7b8276694df8a1dc4f0e4ab77d0 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/com.android.billingclient.billing-4.0.0.aar b/Assets/Plugins/Android/com.android.billingclient.billing-4.0.0.aar new file mode 100644 index 0000000..5d41dba Binary files /dev/null and b/Assets/Plugins/Android/com.android.billingclient.billing-4.0.0.aar differ diff --git a/Assets/Plugins/Android/com.android.billingclient.billing-4.0.0.aar.meta b/Assets/Plugins/Android/com.android.billingclient.billing-4.0.0.aar.meta new file mode 100644 index 0000000..30ab74a --- /dev/null +++ b/Assets/Plugins/Android/com.android.billingclient.billing-4.0.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 616d2e841f6eb40968585a727afcd49b +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/com.android.billingclient.billing-ktx-4.0.0.aar b/Assets/Plugins/Android/com.android.billingclient.billing-ktx-4.0.0.aar new file mode 100644 index 0000000..ce73728 Binary files /dev/null and b/Assets/Plugins/Android/com.android.billingclient.billing-ktx-4.0.0.aar differ diff --git a/Assets/Plugins/Android/com.android.billingclient.billing-ktx-4.0.0.aar.meta b/Assets/Plugins/Android/com.android.billingclient.billing-ktx-4.0.0.aar.meta new file mode 100644 index 0000000..15e2a89 --- /dev/null +++ b/Assets/Plugins/Android/com.android.billingclient.billing-ktx-4.0.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: e188bdc36ce144fcd947fdd48a2902a3 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-1.10.0.aar b/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-1.10.0.aar new file mode 100644 index 0000000..b6c98af Binary files /dev/null and b/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-1.10.0.aar differ diff --git a/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-1.10.0.aar.meta b/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-1.10.0.aar.meta new file mode 100644 index 0000000..9dda498 --- /dev/null +++ b/Assets/Plugins/Android/com.github.adaptyteam.AdaptySDK-Android-1.10.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 6e6e06e26db144b04be14c906e8c2f93 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-18.0.1.aar b/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-18.0.1.aar new file mode 100644 index 0000000..697ec08 Binary files /dev/null and b/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-18.0.1.aar differ diff --git a/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-18.0.1.aar.meta b/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-18.0.1.aar.meta new file mode 100644 index 0000000..aa4b6a5 --- /dev/null +++ b/Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-18.0.1.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 3722047ee768948c4a0370ab8e09214d +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/com.google.android.gms.play-services-basement-18.0.0.aar b/Assets/Plugins/Android/com.google.android.gms.play-services-basement-18.0.0.aar new file mode 100644 index 0000000..f5da36f Binary files /dev/null and b/Assets/Plugins/Android/com.google.android.gms.play-services-basement-18.0.0.aar differ diff --git a/Assets/Plugins/Android/com.google.android.gms.play-services-basement-18.0.0.aar.meta b/Assets/Plugins/Android/com.google.android.gms.play-services-basement-18.0.0.aar.meta new file mode 100644 index 0000000..4d15a14 --- /dev/null +++ b/Assets/Plugins/Android/com.google.android.gms.play-services-basement-18.0.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 547e741cc373d450d9d8d712c9cadf88 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/com.google.code.gson.gson-2.9.0.jar b/Assets/Plugins/Android/com.google.code.gson.gson-2.9.0.jar new file mode 100644 index 0000000..fb62e05 Binary files /dev/null and b/Assets/Plugins/Android/com.google.code.gson.gson-2.9.0.jar differ diff --git a/Assets/Plugins/Android/com.google.code.gson.gson-2.9.0.jar.meta b/Assets/Plugins/Android/com.google.code.gson.gson-2.9.0.jar.meta new file mode 100644 index 0000000..f7aebc9 --- /dev/null +++ b/Assets/Plugins/Android/com.google.code.gson.gson-2.9.0.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 068c67549689b4f2094a29372582f29f +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar b/Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar similarity index 100% rename from AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar rename to Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar diff --git a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar.meta b/Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar.meta similarity index 93% rename from AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar.meta rename to Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar.meta index eefbb24..6cb11f3 100644 --- a/AdaptyUnityProject/Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar.meta +++ b/Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6d1b181d7377e4a27a05c7d7909b0555 +guid: 1a9f2e1545748401a882d8b155627790 labels: - gpsr PluginImporter: diff --git a/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.4.32.jar b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.4.32.jar new file mode 100644 index 0000000..0e6b3a6 Binary files /dev/null and b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.4.32.jar differ diff --git a/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.4.32.jar.meta b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.4.32.jar.meta new file mode 100644 index 0000000..694ab3e --- /dev/null +++ b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.4.32.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 38c447798a0794527a54b9d0915200ba +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.4.32.jar b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.4.32.jar new file mode 100644 index 0000000..79891a0 Binary files /dev/null and b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.4.32.jar differ diff --git a/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.4.32.jar.meta b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.4.32.jar.meta new file mode 100644 index 0000000..d77f6bb --- /dev/null +++ b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.4.32.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: cca6a27e91609401d88f7fad1eda8170 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.4.32.jar b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.4.32.jar new file mode 100644 index 0000000..85f0a1f Binary files /dev/null and b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.4.32.jar differ diff --git a/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.4.32.jar.meta b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.4.32.jar.meta new file mode 100644 index 0000000..d9a4ec5 --- /dev/null +++ b/Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.4.32.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 96b504234a2014418a1f0ef557ba9d1a +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.4.3.jar b/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.4.3.jar new file mode 100644 index 0000000..626693f Binary files /dev/null and b/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.4.3.jar differ diff --git a/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.4.3.jar.meta b/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.4.3.jar.meta new file mode 100644 index 0000000..fd24382 --- /dev/null +++ b/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.4.3.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 9c97bfde04fe94dd88d19d161a512113 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.4.3.jar b/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.4.3.jar new file mode 100644 index 0000000..81e983b Binary files /dev/null and b/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.4.3.jar differ diff --git a/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.4.3.jar.meta b/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.4.3.jar.meta new file mode 100644 index 0000000..bbdd143 --- /dev/null +++ b/Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.4.3.jar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 1e2346ed14b6446c2a4d42805ba4e5df +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/unitywrapper.aar b/Assets/Plugins/Android/unitywrapper.aar new file mode 100644 index 0000000..ce2ead2 Binary files /dev/null and b/Assets/Plugins/Android/unitywrapper.aar differ diff --git a/Assets/Plugins/Android/unitywrapper.aar.meta b/Assets/Plugins/Android/unitywrapper.aar.meta new file mode 100644 index 0000000..f6ebd06 --- /dev/null +++ b/Assets/Plugins/Android/unitywrapper.aar.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 5f5a4ff6834dd4fa397c46d5fdafcb95 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs.meta b/Assets/Prefabs.meta new file mode 100644 index 0000000..575afd8 --- /dev/null +++ b/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8fbfccb21d4f944f299df39791e221c6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/InfoPanel.prefab b/Assets/Prefabs/InfoPanel.prefab new file mode 100644 index 0000000..ca7cf13 --- /dev/null +++ b/Assets/Prefabs/InfoPanel.prefab @@ -0,0 +1,387 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3432600451375088108 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3432600451375088109} + - component: {fileID: 3432600451375088111} + - component: {fileID: 3432600451375088110} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3432600451375088109 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451375088108} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3432600451854569933} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 20, y: -20} + m_SizeDelta: {x: 810, y: -30} + m_Pivot: {x: 0, y: 1} +--- !u!222 &3432600451375088111 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451375088108} + m_CullTransparentMesh: 1 +--- !u!114 &3432600451375088110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451375088108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 64 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Purchaser Info: + + Access Levels: + + Subscriptions: + + Non Subscriptions: + +' +--- !u!1 &3432600451628076197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3432600451628076198} + - component: {fileID: 3432600451628076217} + - component: {fileID: 3432600451628076216} + - component: {fileID: 3432600451628076199} + m_Layer: 5 + m_Name: Update + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3432600451628076198 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451628076197} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3432600452422232070} + m_Father: {fileID: 3432600451854569933} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -20} + m_SizeDelta: {x: 160, y: 100} + m_Pivot: {x: 1, y: 1} +--- !u!222 &3432600451628076217 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451628076197} + m_CullTransparentMesh: 1 +--- !u!114 &3432600451628076216 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451628076197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3432600451628076199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451628076197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3432600451628076216} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: GetPurchaserInfoButtonClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &3432600451854569932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3432600451854569933} + - component: {fileID: 7035266913337380895} + - component: {fileID: 3432600451854569935} + - component: {fileID: 3432600451854569934} + m_Layer: 5 + m_Name: InfoPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3432600451854569933 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451854569932} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3432600451375088109} + - {fileID: 3432600451628076198} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -280} + m_SizeDelta: {x: -40, y: 260} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &7035266913337380895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451854569932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3279ab4dae5fb4267b647475c18a073a, type: 3} + m_Name: + m_EditorClassIdentifier: + InfoText: {fileID: 3432600451375088110} + backgroundImage: {fileID: 3432600451854569934} +--- !u!222 &3432600451854569935 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451854569932} + m_CullTransparentMesh: 1 +--- !u!114 &3432600451854569934 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600451854569932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.47873783, g: 1, b: 0.34509802, a: 0.7294118} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &3432600452422232069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3432600452422232070} + - component: {fileID: 3432600452422232088} + - component: {fileID: 3432600452422232071} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3432600452422232070 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600452422232069} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3432600451628076198} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3432600452422232088 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600452422232069} + m_CullTransparentMesh: 1 +--- !u!114 &3432600452422232071 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3432600452422232069} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 44 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Update diff --git a/AdaptyUnityProject/Assets/Adapty/AdaptyObject.prefab.meta b/Assets/Prefabs/InfoPanel.prefab.meta similarity index 74% rename from AdaptyUnityProject/Assets/Adapty/AdaptyObject.prefab.meta rename to Assets/Prefabs/InfoPanel.prefab.meta index c88caac..bf62203 100644 --- a/AdaptyUnityProject/Assets/Adapty/AdaptyObject.prefab.meta +++ b/Assets/Prefabs/InfoPanel.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 34ae3a8e91b764680a786e55274b9d3e +guid: cf9b25e069a8e455dbfc610339568346 PrefabImporter: externalObjects: {} userData: diff --git a/Assets/Prefabs/Loading Panel.prefab b/Assets/Prefabs/Loading Panel.prefab new file mode 100644 index 0000000..e4d0976 --- /dev/null +++ b/Assets/Prefabs/Loading Panel.prefab @@ -0,0 +1,157 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3386625881107713892 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7986467022371497679} + - component: {fileID: 382119532654729874} + - component: {fileID: 9115983258841566776} + m_Layer: 5 + m_Name: Loading Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7986467022371497679 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3386625881107713892} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8378751120979891326} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &382119532654729874 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3386625881107713892} + m_CullTransparentMesh: 1 +--- !u!114 &9115983258841566776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3386625881107713892} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.64705884} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6373129699823693092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8378751120979891326} + - component: {fileID: 6121165771812121313} + - component: {fileID: 6792374265041054138} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8378751120979891326 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373129699823693092} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7986467022371497679} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 552.2437, y: 190.7556} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6121165771812121313 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373129699823693092} + m_CullTransparentMesh: 1 +--- !u!114 &6792374265041054138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373129699823693092} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.6117647} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 62 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 62 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Loading... diff --git a/Assets/Prefabs/Loading Panel.prefab.meta b/Assets/Prefabs/Loading Panel.prefab.meta new file mode 100644 index 0000000..737886e --- /dev/null +++ b/Assets/Prefabs/Loading Panel.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5ce068072ec324ea190f78ce1bdeac8e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/NavigationPanel.prefab b/Assets/Prefabs/NavigationPanel.prefab new file mode 100644 index 0000000..ce5f672 --- /dev/null +++ b/Assets/Prefabs/NavigationPanel.prefab @@ -0,0 +1,369 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &651685839196891464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6672612837550060450} + - component: {fileID: 161897073056543841} + - component: {fileID: 3039824850149255836} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6672612837550060450 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651685839196891464} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8705325237504604490} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &161897073056543841 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651685839196891464} + m_CullTransparentMesh: 1 +--- !u!114 &3039824850149255836 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651685839196891464} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Back +--- !u!1 &1230341487918107075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8705325237504604490} + - component: {fileID: 5388143132029082091} + - component: {fileID: 288169644834004959} + - component: {fileID: 2154118777423210315} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8705325237504604490 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230341487918107075} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6672612837550060450} + m_Father: {fileID: 674620221056677642} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 30, y: 10} + m_SizeDelta: {x: 150, y: 100} + m_Pivot: {x: 0, y: 0} +--- !u!222 &5388143132029082091 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230341487918107075} + m_CullTransparentMesh: 1 +--- !u!114 &288169644834004959 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230341487918107075} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2154118777423210315 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230341487918107075} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 288169644834004959} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &6697603007269364343 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 674620221056677642} + - component: {fileID: 7072468570304428540} + - component: {fileID: 254573256221312091} + - component: {fileID: 8506978676214840676} + m_Layer: 5 + m_Name: NavigationPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &674620221056677642 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697603007269364343} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8705325237504604490} + - {fileID: 8581943474919559941} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 209.54488} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &7072468570304428540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697603007269364343} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 750e709fbc58a4ecf89565f8666fd73f, type: 3} + m_Name: + m_EditorClassIdentifier: + BackButtonText: {fileID: 3039824850149255836} + BackButton: {fileID: 2154118777423210315} + TitleText: {fileID: 4689266646989925367} +--- !u!222 &254573256221312091 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697603007269364343} + m_CullTransparentMesh: 1 +--- !u!114 &8506978676214840676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697603007269364343} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8879725475656064101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8581943474919559941} + - component: {fileID: 3669632523831656730} + - component: {fileID: 4689266646989925367} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8581943474919559941 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8879725475656064101} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 674620221056677642} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 10} + m_SizeDelta: {x: -360, y: 100} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &3669632523831656730 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8879725475656064101} + m_CullTransparentMesh: 1 +--- !u!114 &4689266646989925367 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8879725475656064101} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Welcome to Adapty! diff --git a/Assets/Prefabs/NavigationPanel.prefab.meta b/Assets/Prefabs/NavigationPanel.prefab.meta new file mode 100644 index 0000000..03efb21 --- /dev/null +++ b/Assets/Prefabs/NavigationPanel.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a45a90aeb26f34c7587f44db6a38edf7 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/ProductItemButton.prefab b/Assets/Prefabs/ProductItemButton.prefab new file mode 100644 index 0000000..f046d74 --- /dev/null +++ b/Assets/Prefabs/ProductItemButton.prefab @@ -0,0 +1,228 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6513817498086454937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6020002456607245801} + - component: {fileID: 3624226113992601820} + - component: {fileID: 6339250396010131262} + m_Layer: 5 + m_Name: ProductId Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6020002456607245801 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6513817498086454937} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 780248583422457137} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -10} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3624226113992601820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6513817498086454937} + m_CullTransparentMesh: 0 +--- !u!114 &6339250396010131262 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6513817498086454937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 44 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Id: 123 + + Price: 123 + + Period: 123' +--- !u!1 &7988979639684680476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 780248583422457137} + - component: {fileID: 8180053005353928257} + - component: {fileID: 8778839814356919105} + - component: {fileID: 1690460150230895470} + - component: {fileID: 386732154168467417} + m_Layer: 5 + m_Name: ProductItemButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &780248583422457137 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7988979639684680476} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6020002456607245801} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -40, y: 200} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &8180053005353928257 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7988979639684680476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7d44a52cd6cb0497f808afc0aa25feeb, type: 3} + m_Name: + m_EditorClassIdentifier: + DescriptionText: {fileID: 6339250396010131262} +--- !u!222 &8778839814356919105 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7988979639684680476} + m_CullTransparentMesh: 0 +--- !u!114 &1690460150230895470 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7988979639684680476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &386732154168467417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7988979639684680476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1690460150230895470} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: GetPaywallsButtonClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 diff --git a/Assets/Prefabs/ProductItemButton.prefab.meta b/Assets/Prefabs/ProductItemButton.prefab.meta new file mode 100644 index 0000000..8924709 --- /dev/null +++ b/Assets/Prefabs/ProductItemButton.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 41d13de4923244d1981940c6e95d06a7 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/ProductsListHeader.prefab b/Assets/Prefabs/ProductsListHeader.prefab new file mode 100644 index 0000000..093207d --- /dev/null +++ b/Assets/Prefabs/ProductsListHeader.prefab @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2004783120646228741 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1047877558695824635} + - component: {fileID: 9127924487565738822} + - component: {fileID: 8167448425298271509} + m_Layer: 5 + m_Name: ProductsListHeader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1047877558695824635 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2004783120646228741} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 1167} + m_SizeDelta: {x: 1113, y: 70.2903} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9127924487565738822 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2004783120646228741} + m_CullTransparentMesh: 1 +--- !u!114 &8167448425298271509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2004783120646228741} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 44 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 47 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Paywalls diff --git a/Assets/Prefabs/ProductsListHeader.prefab.meta b/Assets/Prefabs/ProductsListHeader.prefab.meta new file mode 100644 index 0000000..dcbd6f4 --- /dev/null +++ b/Assets/Prefabs/ProductsListHeader.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 74be98c605642487db8e8d5063dd967a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AdaptyUnityProject/Assets/Scenes.meta b/Assets/Scenes.meta similarity index 77% rename from AdaptyUnityProject/Assets/Scenes.meta rename to Assets/Scenes.meta index eba6d6d..caab500 100644 --- a/AdaptyUnityProject/Assets/Scenes.meta +++ b/Assets/Scenes.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e68dcc7b223f04b7ca9f134ddd03a0a6 +guid: 8661c5e21b6864c318b1887715e6db4e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..4123eed --- /dev/null +++ b/Assets/Scenes/SampleScene.unity @@ -0,0 +1,6768 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &32794383 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1516264451} + m_Modifications: + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_SizeDelta.x + value: 1113 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_SizeDelta.y + value: 100.230225 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 1057.4 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2004783120646228741, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_Name + value: ProductsListHeader + objectReference: {fileID: 0} + - target: {fileID: 8167448425298271509, guid: 7018bb608ec2042f5841301579530887, + type: 3} + propertyPath: m_FontData.m_Alignment + value: 3 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 7018bb608ec2042f5841301579530887, type: 3} +--- !u!4 &32794384 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 32794383} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2074563426} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 433507327} + m_Father: {fileID: 1516264451} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &45796915 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 45796916} + - component: {fileID: 45796919} + - component: {fileID: 45796918} + - component: {fileID: 45796917} + m_Layer: 5 + m_Name: GetPaywallsButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &45796916 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 45796915} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1537428262} + m_Father: {fileID: 58639464} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -580} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &45796917 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 45796915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 45796918} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: GetPaywallsButtonClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &45796918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 45796915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &45796919 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 45796915} + m_CullTransparentMesh: 0 +--- !u!1 &58639463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 58639464} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &58639464 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58639463} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2010238340} + - {fileID: 1703070635} + - {fileID: 45796916} + - {fileID: 964878295} + - {fileID: 1110559016} + - {fileID: 1265290870} + - {fileID: 1694214603} + - {fileID: 172307472} + - {fileID: 671291678} + - {fileID: 1001429163} + - {fileID: 1263459622} + - {fileID: 1083035121} + - {fileID: 1879336351} + - {fileID: 1095805353} + - {fileID: 1877776784} + - {fileID: 519703537} + - {fileID: 1201380754} + - {fileID: 955066275} + - {fileID: 1924504975} + - {fileID: 320842397} + - {fileID: 625121604} + m_Father: {fileID: 1052019799} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 3258.2476} + m_Pivot: {x: 0, y: 1} +--- !u!1001 &61718940 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1516264451} + m_Modifications: + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_SizeDelta.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_SizeDelta.y + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100.22 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7988979639684680476, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + propertyPath: m_Name + value: ProductItemButton + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 77c4ba203494f46fe8f59f6cc3e903ec, type: 3} +--- !u!4 &61718941 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 61718940} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1642871924} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 396731691} + m_Father: {fileID: 1516264451} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &82667269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 82667270} + - component: {fileID: 82667272} + - component: {fileID: 82667271} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &82667270 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82667269} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1083035121} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &82667271 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82667269} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: UpdateAttribution +--- !u!222 &82667272 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82667269} + m_CullTransparentMesh: 0 +--- !u!1 &108327411 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 108327412} + - component: {fileID: 108327414} + - component: {fileID: 108327413} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &108327412 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108327411} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 964878295} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &108327413 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108327411} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Restore Purchases +--- !u!222 &108327414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108327411} + m_CullTransparentMesh: 0 +--- !u!1 &172307471 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 172307472} + - component: {fileID: 172307475} + - component: {fileID: 172307474} + - component: {fileID: 172307473} + m_Layer: 5 + m_Name: Identify + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &172307472 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 172307471} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1245534358} + m_Father: {fileID: 58639464} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -1280} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &172307473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 172307471} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 172307474} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: IdentifyClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &172307474 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 172307471} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &172307475 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 172307471} + m_CullTransparentMesh: 0 +--- !u!1 &181360418 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 181360419} + - component: {fileID: 181360421} + - component: {fileID: 181360420} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &181360419 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181360418} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 320842397} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &181360420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181360418} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'PushReceivedClicked (Android) + +' +--- !u!222 &181360421 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181360418} + m_CullTransparentMesh: 0 +--- !u!1 &201397758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 201397759} + - component: {fileID: 201397761} + - component: {fileID: 201397760} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &201397759 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 201397758} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1007457570} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -41} + m_SizeDelta: {x: -40, y: -121.941956} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &201397760 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 201397758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 43 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 43 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: New Text +--- !u!222 &201397761 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 201397758} + m_CullTransparentMesh: 0 +--- !u!1 &210421459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 210421460} + - component: {fileID: 210421463} + - component: {fileID: 210421462} + - component: {fileID: 210421461} + m_Layer: 5 + m_Name: Copy Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &210421460 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210421459} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1839522426} + m_Father: {fileID: 1007457570} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -20} + m_SizeDelta: {x: 192.57092, y: 79.40192} + m_Pivot: {x: 1, y: 1} +--- !u!114 &210421461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210421459} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 210421462} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 765529410} + m_MethodName: CopyLogToClipBoard + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &210421462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210421459} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &210421463 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210421459} + m_CullTransparentMesh: 0 +--- !u!1 &291795764 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 291795765} + - component: {fileID: 291795767} + - component: {fileID: 291795766} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &291795765 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 291795764} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 625121604} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &291795766 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 291795764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.8679245, g: 0, b: 0.09299487, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Logout +--- !u!222 &291795767 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 291795764} + m_CullTransparentMesh: 0 +--- !u!1 &320842396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 320842397} + - component: {fileID: 320842400} + - component: {fileID: 320842399} + - component: {fileID: 320842398} + m_Layer: 5 + m_Name: PushReceivedClicked (Android) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &320842397 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320842396} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 181360419} + m_Father: {fileID: 58639464} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -2960} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &320842398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320842396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 320842399} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: PushReceivedClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &320842399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320842396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &320842400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320842396} + m_CullTransparentMesh: 0 +--- !u!1 &396731690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 61718940} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 396731691} + m_Layer: 0 + m_Name: Missing Prefab (Dummy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &396731691 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 780248583422457137, guid: 77c4ba203494f46fe8f59f6cc3e903ec, + type: 3} + m_PrefabInstance: {fileID: 61718940} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 396731690} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 61718941} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &401154086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 401154087} + - component: {fileID: 401154089} + - component: {fileID: 401154088} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &401154087 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 401154086} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1877776784} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &401154088 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 401154086} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: GetApnsToken (iOS) +--- !u!222 &401154089 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 401154086} + m_CullTransparentMesh: 0 +--- !u!1 &433507326 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 32794383} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 433507327} + m_Layer: 0 + m_Name: Missing Prefab (Dummy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &433507327 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1047877558695824635, guid: 7018bb608ec2042f5841301579530887, + type: 3} + m_PrefabInstance: {fileID: 32794383} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 433507326} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 32794384} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &519420028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519420032} + - component: {fileID: 519420031} + - component: {fileID: 519420029} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &519420029 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 +--- !u!20 &519420031 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.6462264, g: 0.783805, b: 1, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &519420032 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &519703536 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519703537} + - component: {fileID: 519703540} + - component: {fileID: 519703539} + - component: {fileID: 519703538} + m_Layer: 5 + m_Name: SetApnsToken + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &519703537 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519703536} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1895812343} + m_Father: {fileID: 58639464} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -2400} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &519703538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519703536} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 519703539} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: SetApnsToken + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &519703539 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519703536} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &519703540 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519703536} + m_CullTransparentMesh: 0 +--- !u!1 &557200897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 557200898} + - component: {fileID: 557200900} + - component: {fileID: 557200899} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &557200898 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557200897} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 955066275} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &557200899 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557200897} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: PresentCodeRedemptionSheet (iOS) +--- !u!222 &557200900 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557200897} + m_CullTransparentMesh: 0 +--- !u!1001 &604195882 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 961621172} + m_Modifications: + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_SizeDelta.y + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2154118777423210315, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2154118777423210315, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2154118777423210315, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 765529412} + - target: {fileID: 2154118777423210315, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2154118777423210315, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: ShowRootView + objectReference: {fileID: 0} + - target: {fileID: 2154118777423210315, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6697603007269364343, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_Name + value: NavigationPanel + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a45a90aeb26f34c7587f44db6a38edf7, type: 3} +--- !u!224 &604195883 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + m_PrefabInstance: {fileID: 604195882} + m_PrefabAsset: {fileID: 0} +--- !u!114 &604195884 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7072468570304428540, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + m_PrefabInstance: {fileID: 604195882} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 750e709fbc58a4ecf89565f8666fd73f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &607767608 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 607767609} + - component: {fileID: 607767612} + - component: {fileID: 607767611} + - component: {fileID: 607767610} + m_Layer: 5 + m_Name: Root Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &607767609 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 607767608} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1699734709} + - {fileID: 889108851} + - {fileID: 1007457570} + m_Father: {fileID: 1340054225} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &607767610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 607767608} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &607767611 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 607767608} + m_CullTransparentMesh: 1 +--- !u!114 &607767612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 607767608} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b797ac4c82801414d9cf481693c28d7d, type: 3} + m_Name: + m_EditorClassIdentifier: + Router: {fileID: 765529412} + Manager: {fileID: 765529410} + NavigationView: {fileID: 889108852} + PurchaserInfoView: {fileID: 2010238341} + PromoInfoView: {fileID: 1703070634} + IDFACollectionButtonText: {fileID: 869982442} + ExternalAnalyticsButtonText: {fileID: 821150022} +--- !u!1 &622530826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 622530827} + - component: {fileID: 622530829} + - component: {fileID: 622530828} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &622530827 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622530826} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1924504975} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &622530828 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622530826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: NewPushToken (Android) +--- !u!222 &622530829 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622530826} + m_CullTransparentMesh: 0 +--- !u!1 &625121603 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 625121604} + - component: {fileID: 625121607} + - component: {fileID: 625121606} + - component: {fileID: 625121605} + m_Layer: 5 + m_Name: LogoutButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &625121604 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 625121603} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 291795765} + m_Father: {fileID: 58639464} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -3100} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &625121605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 625121603} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 625121606} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: LogoutButtonClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &625121606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 625121603} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &625121607 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 625121603} + m_CullTransparentMesh: 0 +--- !u!1 &671291677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 671291678} + - component: {fileID: 671291681} + - component: {fileID: 671291680} + - component: {fileID: 671291679} + m_Layer: 5 + m_Name: SetFallbackPaywalls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &671291678 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671291677} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1206313848} + m_Father: {fileID: 58639464} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -1420} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &671291679 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671291677} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 671291680} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: SetFallbackPaywallsClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &671291680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671291677} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &671291681 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671291677} + m_CullTransparentMesh: 0 +--- !u!1 &765529409 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 765529411} + - component: {fileID: 765529410} + - component: {fileID: 765529412} + m_Layer: 0 + m_Name: AdaptyExample + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &765529410 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765529409} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67e12ead55f824d1eaa34b98617a1475, type: 3} + m_Name: + m_EditorClassIdentifier: + Router: {fileID: 765529412} + LoggerText: {fileID: 201397760} +--- !u!4 &765529411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765529409} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &765529412 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765529409} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9c25fd271b05e4dbdacb154bddb85821, type: 3} + m_Name: + m_EditorClassIdentifier: + RootPanel: {fileID: 607767612} + ProductsPanel: {fileID: 961621175} + LoadingView: {fileID: 1975529334} +--- !u!1 &821150021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 821150024} + - component: {fileID: 821150023} + - component: {fileID: 821150022} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &821150022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 821150021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SetExternalAnalytics enabled +--- !u!222 &821150023 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 821150021} + m_CullTransparentMesh: 0 +--- !u!224 &821150024 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 821150021} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1879336351} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &869982440 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 869982441} + - component: {fileID: 869982443} + - component: {fileID: 869982442} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &869982441 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 869982440} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1110559016} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &869982442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 869982440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Set IDFA Collection enabled +--- !u!222 &869982443 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 869982440} + m_CullTransparentMesh: 0 +--- !u!1 &888218441 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 888218442} + - component: {fileID: 888218444} + - component: {fileID: 888218443} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &888218442 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888218441} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1201380754} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &888218443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888218441} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HandlePushNotification (iOS) +--- !u!222 &888218444 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888218441} + m_CullTransparentMesh: 0 +--- !u!1001 &889108850 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 607767609} + m_Modifications: + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_SizeDelta.y + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6697603007269364343, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + propertyPath: m_Name + value: NavigationPanel + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a45a90aeb26f34c7587f44db6a38edf7, type: 3} +--- !u!224 &889108851 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 674620221056677642, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + m_PrefabInstance: {fileID: 889108850} + m_PrefabAsset: {fileID: 0} +--- !u!114 &889108852 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7072468570304428540, guid: a45a90aeb26f34c7587f44db6a38edf7, + type: 3} + m_PrefabInstance: {fileID: 889108850} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 750e709fbc58a4ecf89565f8666fd73f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &955066274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 955066275} + - component: {fileID: 955066278} + - component: {fileID: 955066277} + - component: {fileID: 955066276} + m_Layer: 5 + m_Name: PresentCodeRedemptionSheet + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &955066275 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955066274} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 557200898} + m_Father: {fileID: 58639464} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -2680} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &955066276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955066274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 955066277} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: PresentCodeRedemptionSheet + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &955066277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955066274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &955066278 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955066274} + m_CullTransparentMesh: 0 +--- !u!1 &961621171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 961621172} + - component: {fileID: 961621175} + - component: {fileID: 961621174} + - component: {fileID: 961621173} + m_Layer: 5 + m_Name: Products List Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &961621172 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961621171} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2006234571} + - {fileID: 1506069818} + - {fileID: 604195883} + m_Father: {fileID: 1340054225} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &961621173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961621171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &961621174 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961621171} + m_CullTransparentMesh: 1 +--- !u!114 &961621175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961621171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6d61ea61fa5cc481ca7c3df22a26d076, type: 3} + m_Name: + m_EditorClassIdentifier: + Router: {fileID: 765529412} + ProductsListHeaderPrefab: {fileID: 2004783120646228741, guid: 74be98c605642487db8e8d5063dd967a, + type: 3} + ProductItemPrefab: {fileID: 7988979639684680476, guid: 41d13de4923244d1981940c6e95d06a7, + type: 3} + NavigationView: {fileID: 604195884} + ScrollViewContent: {fileID: 1516264451} + StateMessageText: {fileID: 2006234572} +--- !u!1 &964878294 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 964878295} + - component: {fileID: 964878298} + - component: {fileID: 964878297} + - component: {fileID: 964878296} + m_Layer: 5 + m_Name: RestorePurchasesButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &964878295 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964878294} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 108327412} + m_Father: {fileID: 58639464} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -720} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &964878296 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964878294} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 964878297} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: RestorePurchasesButtonClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &964878297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964878294} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &964878298 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964878294} + m_CullTransparentMesh: 0 +--- !u!1 &1001429162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1001429163} + - component: {fileID: 1001429166} + - component: {fileID: 1001429165} + - component: {fileID: 1001429164} + m_Layer: 5 + m_Name: MakeDeferredPurchase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1001429163 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001429162} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1882163501} + m_Father: {fileID: 58639464} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -1560} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1001429164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001429162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1001429165} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: MakeDeferredPurchaseClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1001429165 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001429162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1001429166 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001429162} + m_CullTransparentMesh: 0 +--- !u!1 &1007457569 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1007457570} + - component: {fileID: 1007457572} + - component: {fileID: 1007457571} + m_Layer: 5 + m_Name: LogPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1007457570 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007457569} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 201397759} + - {fileID: 210421460} + - {fileID: 1138184990} + m_Father: {fileID: 607767609} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 251.40002} + m_SizeDelta: {x: 0, y: 500} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1007457571 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007457569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1007457572 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007457569} + m_CullTransparentMesh: 0 +--- !u!1 &1052019798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1052019799} + - component: {fileID: 1052019802} + - component: {fileID: 1052019801} + - component: {fileID: 1052019800} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1052019799 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1052019798} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 58639464} + m_Father: {fileID: 1699734709} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: -17} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1052019800 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1052019798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &1052019801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1052019798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1052019802 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1052019798} + m_CullTransparentMesh: 1 +--- !u!1 &1072667535 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1072667536} + - component: {fileID: 1072667538} + - component: {fileID: 1072667537} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1072667536 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072667535} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1265290870} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1072667537 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072667535} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Set Log Level +--- !u!222 &1072667538 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072667535} + m_CullTransparentMesh: 0 +--- !u!1 &1083035120 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1083035121} + - component: {fileID: 1083035124} + - component: {fileID: 1083035123} + - component: {fileID: 1083035122} + m_Layer: 5 + m_Name: UpdateAttribution + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1083035121 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083035120} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 82667270} + m_Father: {fileID: 58639464} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -1840} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1083035122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083035120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1083035123} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: UpdateAttributionClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1083035123 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083035120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1083035124 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083035120} + m_CullTransparentMesh: 0 +--- !u!1 &1095805352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1095805353} + - component: {fileID: 1095805356} + - component: {fileID: 1095805355} + - component: {fileID: 1095805354} + m_Layer: 5 + m_Name: SetVariationForTransaction + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1095805353 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095805352} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1451123074} + m_Father: {fileID: 58639464} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -2120} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1095805354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095805352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1095805355} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: SetVariationForTransactionClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1095805355 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095805352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1095805356 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095805352} + m_CullTransparentMesh: 0 +--- !u!1 &1110559015 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1110559016} + - component: {fileID: 1110559019} + - component: {fileID: 1110559018} + - component: {fileID: 1110559017} + m_Layer: 5 + m_Name: IDFACollectionButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1110559016 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110559015} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 869982441} + m_Father: {fileID: 58639464} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -860} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1110559017 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110559015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1110559018} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: ToggleIDFACollectionClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1110559018 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110559015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1110559019 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1110559015} + m_CullTransparentMesh: 0 +--- !u!1 &1138184989 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1138184990} + - component: {fileID: 1138184993} + - component: {fileID: 1138184992} + - component: {fileID: 1138184991} + m_Layer: 5 + m_Name: Clear Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1138184990 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138184989} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1262838090} + m_Father: {fileID: 1007457570} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -237, y: -20} + m_SizeDelta: {x: 192.57092, y: 79.40192} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1138184991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138184989} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1138184992} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 765529410} + m_MethodName: ClearLog + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1138184992 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138184989} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1138184993 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138184989} + m_CullTransparentMesh: 0 +--- !u!1 &1201380753 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1201380754} + - component: {fileID: 1201380757} + - component: {fileID: 1201380756} + - component: {fileID: 1201380755} + m_Layer: 5 + m_Name: HandlePushNotification + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1201380754 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201380753} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 888218442} + m_Father: {fileID: 58639464} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -2540} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1201380755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201380753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1201380756} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: HandlePushNotification + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1201380756 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201380753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1201380757 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201380753} + m_CullTransparentMesh: 0 +--- !u!1 &1206313847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1206313848} + - component: {fileID: 1206313850} + - component: {fileID: 1206313849} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1206313848 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1206313847} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 671291678} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1206313849 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1206313847} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SetFallbackPaywalls +--- !u!222 &1206313850 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1206313847} + m_CullTransparentMesh: 0 +--- !u!1 &1245534357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1245534358} + - component: {fileID: 1245534360} + - component: {fileID: 1245534359} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1245534358 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1245534357} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 172307472} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1245534359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1245534357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Identify +--- !u!222 &1245534360 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1245534357} + m_CullTransparentMesh: 0 +--- !u!1 &1262838089 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1262838090} + - component: {fileID: 1262838092} + - component: {fileID: 1262838091} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1262838090 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1262838089} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1138184990} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1262838091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1262838089} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 152 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Clear +--- !u!222 &1262838092 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1262838089} + m_CullTransparentMesh: 0 +--- !u!1 &1263459621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1263459622} + - component: {fileID: 1263459625} + - component: {fileID: 1263459624} + - component: {fileID: 1263459623} + m_Layer: 5 + m_Name: UpdateProfile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1263459622 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263459621} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1576419708} + m_Father: {fileID: 58639464} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -1700} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1263459623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263459621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1263459624} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: UpdateProfileClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1263459624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263459621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1263459625 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263459621} + m_CullTransparentMesh: 0 +--- !u!1 &1265290869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1265290870} + - component: {fileID: 1265290873} + - component: {fileID: 1265290872} + - component: {fileID: 1265290871} + m_Layer: 5 + m_Name: SetLogLevel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1265290870 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265290869} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1072667536} + m_Father: {fileID: 58639464} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -1000} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1265290871 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265290869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1265290872} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: SetLogLevelClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1265290872 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265290869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1265290873 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265290869} + m_CullTransparentMesh: 0 +--- !u!1 &1340054224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1340054225} + - component: {fileID: 1340054228} + - component: {fileID: 1340054227} + - component: {fileID: 1340054226} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1340054225 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340054224} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 607767609} + - {fileID: 961621172} + - {fileID: 1975529333} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1340054226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340054224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1340054227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340054224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1340054228 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340054224} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1451123073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1451123074} + - component: {fileID: 1451123076} + - component: {fileID: 1451123075} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1451123074 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451123073} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1095805353} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1451123075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451123073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SetVariationForTransaction +--- !u!222 &1451123076 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451123073} + m_CullTransparentMesh: 0 +--- !u!1 &1506069817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1506069818} + - component: {fileID: 1506069820} + - component: {fileID: 1506069819} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1506069818 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506069817} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1782151172} + m_Father: {fileID: 961621172} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -100.08} + m_SizeDelta: {x: 0, y: -200.16602} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1506069819 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506069817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 1516264451} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 1782151172} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &1506069820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506069817} + m_CullTransparentMesh: 1 +--- !u!1 &1516264450 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1516264451} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1516264451 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1516264450} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 32794384} + - {fileID: 61718941} + m_Father: {fileID: 1782151172} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 2215} + m_Pivot: {x: 0, y: 1} +--- !u!1 &1537428261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1537428262} + - component: {fileID: 1537428264} + - component: {fileID: 1537428263} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1537428262 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537428261} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 45796916} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1537428263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537428261} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Get Paywalls +--- !u!222 &1537428264 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537428261} + m_CullTransparentMesh: 0 +--- !u!1 &1576419707 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1576419708} + - component: {fileID: 1576419710} + - component: {fileID: 1576419709} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1576419708 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576419707} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1263459622} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1576419709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576419707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: UpdateProfile +--- !u!222 &1576419710 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576419707} + m_CullTransparentMesh: 0 +--- !u!1 &1642871924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 61718940} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 61718941} + m_Layer: 0 + m_Name: ProductItemButton (Missing Prefab) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1694214602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1694214603} + - component: {fileID: 1694214606} + - component: {fileID: 1694214605} + - component: {fileID: 1694214604} + m_Layer: 5 + m_Name: GetLogLevel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1694214603 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694214602} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1774658260} + m_Father: {fileID: 58639464} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -1140} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1694214604 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694214602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1694214605} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: GetLogLevelClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1694214605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694214602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1694214606 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694214602} + m_CullTransparentMesh: 0 +--- !u!1 &1699734708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1699734709} + - component: {fileID: 1699734712} + - component: {fileID: 1699734710} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1699734709 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1699734708} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1052019799} + m_Father: {fileID: 607767609} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 150} + m_SizeDelta: {x: 0, y: -700} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1699734710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1699734708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 58639464} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 1052019799} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &1699734712 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1699734708} + m_CullTransparentMesh: 1 +--- !u!1001 &1703070633 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 58639464} + m_Modifications: + - target: {fileID: 3432600451628076199, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 607767612} + - target: {fileID: 3432600451628076199, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: GetPromoButtonClick + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569932, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_Name + value: PromoInfoPanel + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_SizeDelta.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_SizeDelta.y + value: 260 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -300 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cf9b25e069a8e455dbfc610339568346, type: 3} +--- !u!114 &1703070634 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7035266913337380895, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + m_PrefabInstance: {fileID: 1703070633} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3279ab4dae5fb4267b647475c18a073a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &1703070635 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + m_PrefabInstance: {fileID: 1703070633} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1774658259 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1774658260} + - component: {fileID: 1774658262} + - component: {fileID: 1774658261} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1774658260 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774658259} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1694214603} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1774658261 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774658259} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Get Log Level +--- !u!222 &1774658262 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774658259} + m_CullTransparentMesh: 0 +--- !u!1 &1782151171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1782151172} + - component: {fileID: 1782151175} + - component: {fileID: 1782151174} + - component: {fileID: 1782151173} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1782151172 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1782151171} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1516264451} + m_Father: {fileID: 1506069818} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -17, y: -17} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1782151173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1782151171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &1782151174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1782151171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1782151175 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1782151171} + m_CullTransparentMesh: 1 +--- !u!1 &1822099793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1822099796} + - component: {fileID: 1822099795} + - component: {fileID: 1822099794} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1822099794 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822099793} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1822099795 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822099793} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1822099796 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822099793} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1839522425 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1839522426} + - component: {fileID: 1839522428} + - component: {fileID: 1839522427} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1839522426 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839522425} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 210421460} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1839522427 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839522425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 152 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Copy +--- !u!222 &1839522428 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839522425} + m_CullTransparentMesh: 0 +--- !u!1 &1877776783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1877776784} + - component: {fileID: 1877776787} + - component: {fileID: 1877776786} + - component: {fileID: 1877776785} + m_Layer: 5 + m_Name: GetApnsToken + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1877776784 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877776783} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 401154087} + m_Father: {fileID: 58639464} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -2260} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1877776785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877776783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1877776786} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: GetApnsToken + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1877776786 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877776783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1877776787 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1877776783} + m_CullTransparentMesh: 0 +--- !u!1 &1879336350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1879336351} + - component: {fileID: 1879336354} + - component: {fileID: 1879336353} + - component: {fileID: 1879336352} + m_Layer: 5 + m_Name: SetExternalAnalytics + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1879336351 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1879336350} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 821150024} + m_Father: {fileID: 58639464} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -1980} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1879336352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1879336350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1879336353} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: ToggleExternalAnalyticsClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1879336353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1879336350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1879336354 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1879336350} + m_CullTransparentMesh: 0 +--- !u!1 &1882163500 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1882163501} + - component: {fileID: 1882163503} + - component: {fileID: 1882163502} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1882163501 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882163500} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1001429163} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1882163502 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882163500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: MakeDeferredPurchase (iOS) +--- !u!222 &1882163503 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882163500} + m_CullTransparentMesh: 0 +--- !u!1 &1895812342 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1895812343} + - component: {fileID: 1895812345} + - component: {fileID: 1895812344} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1895812343 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895812342} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 519703537} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: -110, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1895812344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895812342} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 96 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SetApnsToken (iOS) +--- !u!222 &1895812345 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895812342} + m_CullTransparentMesh: 0 +--- !u!1 &1924504974 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1924504975} + - component: {fileID: 1924504978} + - component: {fileID: 1924504977} + - component: {fileID: 1924504976} + m_Layer: 5 + m_Name: NewPushToken (Android) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1924504975 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924504974} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 622530827} + m_Father: {fileID: 58639464} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -2820} + m_SizeDelta: {x: -40, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1924504976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924504974} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1924504977} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 607767612} + m_MethodName: NewPushTokenClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1924504977 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924504974} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1924504978 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924504974} + m_CullTransparentMesh: 0 +--- !u!1001 &1975529332 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1340054225} + m_Modifications: + - target: {fileID: 3386625881107713892, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_Name + value: Loading Panel + objectReference: {fileID: 0} + - target: {fileID: 3386625881107713892, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_SizeDelta.x + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_SizeDelta.y + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5ce068072ec324ea190f78ce1bdeac8e, type: 3} +--- !u!224 &1975529333 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7986467022371497679, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + m_PrefabInstance: {fileID: 1975529332} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1975529334 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3386625881107713892, guid: 5ce068072ec324ea190f78ce1bdeac8e, + type: 3} + m_PrefabInstance: {fileID: 1975529332} + m_PrefabAsset: {fileID: 0} +--- !u!1 &2006234570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2006234571} + - component: {fileID: 2006234573} + - component: {fileID: 2006234572} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2006234571 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2006234570} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 961621172} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -40, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2006234572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2006234570} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 6 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Loading... + +' +--- !u!222 &2006234573 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2006234570} + m_CullTransparentMesh: 1 +--- !u!1001 &2010238339 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 58639464} + m_Modifications: + - target: {fileID: 3432600451628076199, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 607767612} + - target: {fileID: 3432600451628076199, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: GetPurchaserInfoButtonClick + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569932, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_Name + value: PurchaserInfoPanel + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_SizeDelta.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_SizeDelta.y + value: 260 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -20 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cf9b25e069a8e455dbfc610339568346, type: 3} +--- !u!224 &2010238340 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3432600451854569933, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + m_PrefabInstance: {fileID: 2010238339} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2010238341 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7035266913337380895, guid: cf9b25e069a8e455dbfc610339568346, + type: 3} + m_PrefabInstance: {fileID: 2010238339} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3279ab4dae5fb4267b647475c18a073a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &2074563426 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 32794383} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 32794384} + m_Layer: 0 + m_Name: ProductsListHeader (Missing Prefab) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 diff --git a/AdaptyUnityProject/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta similarity index 71% rename from AdaptyUnityProject/Assets/Scenes/SampleScene.unity.meta rename to Assets/Scenes/SampleScene.unity.meta index 8c7c4ee..4905cba 100644 --- a/AdaptyUnityProject/Assets/Scenes/SampleScene.unity.meta +++ b/Assets/Scenes/SampleScene.unity.meta @@ -1,7 +1,7 @@ -fileFormatVersion: 2 -guid: 2cda990e2423bbf4892e6590ba056729 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: c92ee7f5b4abd4cf8beea460f8ef7dcb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts.meta b/Assets/Scripts.meta new file mode 100644 index 0000000..b0b7bcf --- /dev/null +++ b/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3b84650afdf649a5b8ca6c7070584db +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AdaptyListener.cs b/Assets/Scripts/AdaptyListener.cs new file mode 100644 index 0000000..46fd544 --- /dev/null +++ b/Assets/Scripts/AdaptyListener.cs @@ -0,0 +1,61 @@ +using UnityEngine; +using UnityEngine.UI; +using AdaptySDK; + +namespace AdaptyExample { + public class AdaptyListener : MonoBehaviour, AdaptyEventListener { + + public AdaptyRouter Router; + public Text LoggerText; + + public void Log(string message) { + Debug.Log("#AdaptyListener# " + message); + } + + void Start() { + this.Router = GetComponent(); + Adapty.SetEventListener(this); + } + + public void Log(string message, bool clearLog = false) { + Debug.Log($"#AdaptyListener# {message}"); + + if (clearLog) { + LoggerText.text = message; + } else { + LoggerText.text = $"{LoggerText.text}\n{message}"; + } + } + + public void ClearLog() { + LoggerText.text = ""; + } + + public void CopyLogToClipBoard() { + GUIUtility.systemCopyBuffer = LoggerText.text; + } + + // – AdaptyEventListener + + public void OnReceiveUpdatedPurchaserInfo(Adapty.PurchaserInfo purchaserInfo) { + Debug.Log("#AdaptyListener# OnReceiveUpdatedPurchaserInfo called"); + + this.Router.RootPanel.UpdatePurchaserInfo(purchaserInfo); + } + + public void OnReceivePromo(Adapty.Promo promo) { + Debug.Log("#AdaptyListener# OnReceivePromo called"); + + this.Router.RootPanel.UpdatePromo(promo); + } + + public void OnDeferredPurchasesProduct(Adapty.Product product) { + Debug.Log("#AdaptyListener# OnDeferredPurchasesProduct called"); + } + + public void OnReceivePaywallsForConfig(Adapty.Paywall[] paywalls) { + Debug.Log("#AdaptyListener# OnReceivePaywallsForConfig called"); + } + } + +} \ No newline at end of file diff --git a/AdaptyUnityProject/Assets/AdaptyListener.cs.meta b/Assets/Scripts/AdaptyListener.cs.meta similarity index 83% rename from AdaptyUnityProject/Assets/AdaptyListener.cs.meta rename to Assets/Scripts/AdaptyListener.cs.meta index fe4bfbf..d4bbd9f 100644 --- a/AdaptyUnityProject/Assets/AdaptyListener.cs.meta +++ b/Assets/Scripts/AdaptyListener.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 26df785a6db174a7e8da152bc5157e7c +guid: 67e12ead55f824d1eaa34b98617a1475 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/AdaptyRouter.cs b/Assets/Scripts/AdaptyRouter.cs new file mode 100644 index 0000000..9cc9af0 --- /dev/null +++ b/Assets/Scripts/AdaptyRouter.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace AdaptyExample { + public class AdaptyRouter : MonoBehaviour { + public AdaptyRootPanelView RootPanel; + public AdaptyProductsListView ProductsPanel; + public GameObject LoadingView; + + void Start() { + this.ShowRootView(); + } + + public void SetIsLoading(bool isLoading) { + LoadingView.SetActive(isLoading); + } + + public void ShowRootView() { + RootPanel.gameObject.SetActive(true); + ProductsPanel.gameObject.SetActive(false); + } + + public void ShowProductsListView() { + RootPanel.gameObject.SetActive(false); + ProductsPanel.gameObject.SetActive(true); + } + } +} diff --git a/Assets/Scripts/AdaptyRouter.cs.meta b/Assets/Scripts/AdaptyRouter.cs.meta new file mode 100644 index 0000000..6e55037 --- /dev/null +++ b/Assets/Scripts/AdaptyRouter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c25fd271b05e4dbdacb154bddb85821 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Components.meta b/Assets/Scripts/Components.meta new file mode 100644 index 0000000..1ef2e02 --- /dev/null +++ b/Assets/Scripts/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f95b0b2956e75414d8759e2ed227bfe7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Components/AdaptyNavigationView.cs b/Assets/Scripts/Components/AdaptyNavigationView.cs new file mode 100644 index 0000000..f039d01 --- /dev/null +++ b/Assets/Scripts/Components/AdaptyNavigationView.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using UnityEngine.UI; + +public class AdaptyNavigationView : MonoBehaviour +{ + + public Text BackButtonText; + public Button BackButton; + public Text TitleText; + + + public void Configure(string title, bool showBackButton) + { + TitleText.text = title; + BackButton.gameObject.SetActive(showBackButton); + } +} diff --git a/Assets/Scripts/Components/AdaptyNavigationView.cs.meta b/Assets/Scripts/Components/AdaptyNavigationView.cs.meta new file mode 100644 index 0000000..b789841 --- /dev/null +++ b/Assets/Scripts/Components/AdaptyNavigationView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 750e709fbc58a4ecf89565f8666fd73f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Components/AdaptyProductItem.cs b/Assets/Scripts/Components/AdaptyProductItem.cs new file mode 100644 index 0000000..700d5ec --- /dev/null +++ b/Assets/Scripts/Components/AdaptyProductItem.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using UnityEngine.UI; +using AdaptySDK; + +public class AdaptyProductItem: MonoBehaviour { + + public Text DescriptionText; + + public void ConfigurePaywall(Adapty.Paywall paywall) { + DescriptionText.text = string.Format("Paywall Id: {0}\nProduts: {1}", paywall.DeveloperId, paywall.Products.Length); + } + + public void ConfigureProduct(Adapty.Product product) { + DescriptionText.text = string.Format("Product Id: {0}\nPrice: {1}\nPeriod: {2}", product.VendorProductId, product.LocalizedPrice, product.LocalizedSubscriptionPeriod); + } +} diff --git a/Assets/Scripts/Components/AdaptyProductItem.cs.meta b/Assets/Scripts/Components/AdaptyProductItem.cs.meta new file mode 100644 index 0000000..026252b --- /dev/null +++ b/Assets/Scripts/Components/AdaptyProductItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d44a52cd6cb0497f808afc0aa25feeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Components/AdaptyTextInfoView.cs b/Assets/Scripts/Components/AdaptyTextInfoView.cs new file mode 100644 index 0000000..82490c8 --- /dev/null +++ b/Assets/Scripts/Components/AdaptyTextInfoView.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using UnityEngine.UI; +using AdaptySDK; + +public class AdaptyTextInfoView : MonoBehaviour { + static Color green = new Color(109.0f / 255.0f, 255.0f / 255.0f, 88.0f / 255.0f, 0.5f); + static Color red = new Color(255.0f / 255.0f, 88.0f / 255.0f, 99.0f / 255.0f, 0.8f); + + public Text InfoText; + public Image backgroundImage; + + public void ConfigurePurchaserInfo(Adapty.PurchaserInfo info) { + if (info == null) { + InfoText.text = "Purchaser Info: null"; + backgroundImage.color = red; + return; + } + + var levels = ""; + var isActive = false; + var now = System.DateTime.Now; + + if (info.AccessLevels != null) { + foreach (var level in info.AccessLevels) { + levels += string.Format("{0} until {1}", level.Value.Id, level.Value.ExpiresAt); + isActive = isActive || level.Value.ExpiresAt > now; + } + } + + InfoText.text = string.Format("Purchaser Info:\nAccess Levels: {0}\nSubscriptions: {1}\nNon Subscriptions: {2}", levels, info.Subscriptions.Count, info.NonSubscriptions.Count); + backgroundImage.color = isActive ? green : red; + } + + public void ConfigurePromo(Adapty.Promo promo) { + if (promo == null) { + InfoText.text = "No promo found."; + backgroundImage.color = red; + return; + } + + InfoText.text = string.Format("Promo:\nVariation Id: {0}\nPaywall Id: {2}", promo.VariationId, promo.Paywall.DeveloperId); + } + + public void Configure(string text) { + InfoText.text = text; + } +} diff --git a/Assets/Scripts/Components/AdaptyTextInfoView.cs.meta b/Assets/Scripts/Components/AdaptyTextInfoView.cs.meta new file mode 100644 index 0000000..df2fc6b --- /dev/null +++ b/Assets/Scripts/Components/AdaptyTextInfoView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3279ab4dae5fb4267b647475c18a073a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Views.meta b/Assets/Scripts/Views.meta new file mode 100644 index 0000000..6122c20 --- /dev/null +++ b/Assets/Scripts/Views.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ca45f952edcd4603845fed010fd4ca3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Views/AdaptyProductsListView.cs b/Assets/Scripts/Views/AdaptyProductsListView.cs new file mode 100644 index 0000000..1b0e81d --- /dev/null +++ b/Assets/Scripts/Views/AdaptyProductsListView.cs @@ -0,0 +1,136 @@ +using UnityEngine; +using UnityEngine.UI; +using System.Collections.Generic; +using AdaptySDK; + +namespace AdaptyExample { + + public class AdaptyProductsListView : MonoBehaviour { + public AdaptyRouter Router; + + public GameObject ProductsListHeaderPrefab; + public GameObject ProductItemPrefab; + + public AdaptyNavigationView NavigationView; + public RectTransform ScrollViewContent; + public Text StateMessageText; + + private Adapty.Paywall[] _paywalls = null; + private Adapty.Product[] _products = null; + + void Start() { + NavigationView.Configure("Products", showBackButton: true); + } + + void SetIsLoading(bool isLoading) { + this.Router.SetIsLoading(isLoading); + } + + public void LoadProductsList() { + SetIsLoading(true); + + LayoutCleanUp(); + LayoutState(""); + + Adapty.GetPaywalls(true, (response, error) => { + this.SetIsLoading(false); + + if (error != null || response == null) { + this.LayoutState(string.Format("Error: {0}", error)); + return; + } + + this._paywalls = response.Paywalls; + this._products = response.Products; + + this.LayoutPaywallsAndProducts(); + }); + } + + + public void MakePurchaseButtonClick(Adapty.Product product) { + SetIsLoading(true); + Adapty.MakePurchase(product.VendorProductId, null, null, null, (result, error) => { + this.SetIsLoading(false); + }); + } + + void LayoutCleanUp() { + foreach (Transform t in ScrollViewContent) { + if (t.gameObject != ScrollViewContent.gameObject) { + GameObject.Destroy(t.gameObject); + } + } + } + + void LayoutState(string message) { + StateMessageText.text = message; + StateMessageText.gameObject.SetActive(true); + ScrollViewContent.gameObject.SetActive(false); + } + + float LayoutListHeader(string title, float offset) { + var headerObject = GameObject.Instantiate(ProductsListHeaderPrefab); + var headerText = headerObject.GetComponent(); + headerText.text = title; + + var rt = headerObject.GetComponent(); + + rt.SetParent(ScrollViewContent); + rt.anchoredPosition = new Vector2(0.0f, offset); + rt.sizeDelta = new Vector2(Mathf.Max(ScrollViewContent.sizeDelta.x - 40.0f, 100.0f), 70.0f); + + return -70.0f; + } + + void LayoutPaywallsAndProducts() { + LayoutCleanUp(); + + var offset = -30.0f; + + if (_paywalls.Length > 0) { + offset += LayoutListHeader("Paywalls", offset); + } + + foreach (Adapty.Paywall paywall in _paywalls) { + var productItemObject = GameObject.Instantiate(ProductItemPrefab); + var productItem = productItemObject.GetComponent(); + productItem.ConfigurePaywall(paywall); + + var rt = productItemObject.GetComponent(); + + rt.SetParent(ScrollViewContent); + rt.anchoredPosition = new Vector2(0.0f, offset); + rt.sizeDelta = new Vector2(ScrollViewContent.sizeDelta.x - 40.0f, 240.0f); + + offset -= 240.0f + 20.0f; + } + + if (_products.Length > 0) { + offset += LayoutListHeader("Products", offset); + } + + foreach (Adapty.Product product in _products) { + var productItemObject = GameObject.Instantiate(ProductItemPrefab); + var productItem = productItemObject.GetComponent(); + productItem.ConfigureProduct(product); + + var button = productItem.GetComponent