public void CreateManager(CASInitSettings initData) { _interstitialProxy = new AdEventsProxy(AdType.Interstitial); _interstitialProxy.OnAdLoaded += CallbackOnInterLoaded; _interstitialProxy.OnAdFailed += CallbackOnInterFailed; _rewardedProxy = new AdEventsProxy(AdType.Rewarded); _rewardedProxy.OnAdLoaded += CallbackOnRewardLoaded; _rewardedProxy.OnAdFailed += CallbackOnRewardFailed; _returnAdProxy = new AdEventsProxy(AdType.Interstitial); if (initData.initListener != null) { initializationListener = new InitializationListenerProxy(this, initData.initListener); } AndroidJavaObject activity = CASJavaProxy.GetUnityActivity(); _managerBridge = new AndroidJavaObject(CASJavaProxy.NativeBridgeClassName, activity); if (initData.extras != null && initData.extras.Count != 0) { AndroidJavaObject extraKeys = new AndroidJavaObject(CASJavaProxy.JavaUtilArrayList); AndroidJavaObject extraValues = new AndroidJavaObject(CASJavaProxy.JavaUtilArrayList); foreach (var extra in initData.extras) { extraKeys.Call <bool>("add", extra.Key); extraValues.Call <bool>("add", extra.Value); } _managerBridge.Call("createWithMeta", managerID, ( int )initData.allowedAdFlags, isTestAdMode, initializationListener, _interstitialProxy, _rewardedProxy, extraKeys, extraValues ); } else { _managerBridge.Call("createSimple", managerID, ( int )initData.allowedAdFlags, isTestAdMode, initializationListener, _interstitialProxy, _rewardedProxy); } }
private static void UpdateGADAppId(PlistDocument plist, CASInitSettings initSettings, DependencyManager deps) { if (!initSettings) { return; } #region Read Admob App ID from CAS Settings bool admobAppIdRequired = deps == null; if (deps != null) { var admobDep = deps.Find(AdNetwork.GoogleAds); if (admobDep != null) { admobAppIdRequired = admobDep.IsInstalled(); } } string admobAppId = null; if (initSettings.managersCount > 0) { string settingsPath = CASEditorUtils.GetNativeSettingsPath(BuildTarget.iOS, initSettings.GetManagerId(0)); if (File.Exists(settingsPath)) { try { admobAppId = CASEditorUtils.GetAdmobAppIdFromJson(File.ReadAllText(settingsPath)); } catch (Exception e) { if (!initSettings.IsTestAdMode() && admobAppIdRequired) { CASEditorUtils.StopBuildWithMessage(e.ToString(), BuildTarget.iOS); } } } } if (string.IsNullOrEmpty(admobAppId) && initSettings.IsTestAdMode()) { admobAppId = CASEditorUtils.iosAdmobSampleAppID; } #endregion if (!string.IsNullOrEmpty(admobAppId)) { plist.root.SetString("GADApplicationIdentifier", admobAppId); } }
#pragma warning restore 67 public static IMediationManager CreateManager(CASInitSettings initSettings) { var obj = new GameObject("CASMediationManager"); //obj.hideFlags = HideFlags.HideInHierarchy; DontDestroyOnLoad(obj); var manager = obj.AddComponent <CASMediationManager>(); // Set Settings before any other calls. manager._settings = CAS.MobileAds.settings as CASSettings; manager.Log("Initialized manager with id: " + initSettings.targetId); manager.managerID = initSettings.targetId; manager.enabledTypes = initSettings.allowedAdFlags; manager._initCompleteAction = initSettings.initListener; manager.viewFactory = new CASViewFactoryImpl(manager); manager._interstitial = new CASFullscreenView(manager, AdType.Interstitial); manager._rewarded = new CASFullscreenView(manager, AdType.Rewarded); return(manager); }
private static void ConfigureAndroid(CASInitSettings settings, CASEditorSettings editorSettings, string admobAppId) { #if UNITY_ANDROID || CASDeveloper EditorUtility.DisplayProgressBar(casTitle, "Validate CAS Android Build Settings", 0.8f); const string deprecatedPluginPath = "Assets/Plugins/CAS"; if (AssetDatabase.IsValidFolder(deprecatedPluginPath)) { AssetDatabase.DeleteAsset(deprecatedPluginPath); Debug.Log("Removed deprecated plugin: " + deprecatedPluginPath); } HashSet <string> promoAlias = new HashSet <string>(); if (editorSettings.generateAndroidQuerriesForPromo) { for (int i = 0; i < settings.managersCount; i++) { Utils.GetCrossPromoAlias(BuildTarget.Android, settings.GetManagerId(i), promoAlias); } } UpdateAndroidPluginManifest(admobAppId, promoAlias, editorSettings); CASPreprocessGradle.Configure(editorSettings); #if !UNITY_2021_2_OR_NEWER // 19 - AndroidSdkVersions.AndroidApiLevel19 // Deprecated in Unity 2021.2 if (PlayerSettings.Android.minSdkVersion < ( AndroidSdkVersions )19) { Utils.DialogOrCancelBuild("CAS required a higher minimum SDK API level. Set SDK level 19 (KitKat) and continue?", BuildTarget.NoTarget); PlayerSettings.Android.minSdkVersion = ( AndroidSdkVersions )19; } #endif #endif }
public CASMediationManager(CASInitSettings initData) { managerID = initData.targetId; isTestAdMode = initData.IsTestAdMode(); }
public void CreateManager(CASInitSettings initData) { _initCompleteAction = initData.initListener; CASExterns.CASUSetUnityVersion(Application.unityVersion); _managerClient = ( IntPtr )GCHandle.Alloc(this); if (initData.extras != null && initData.extras.Count != 0) { var extrasKeys = new string[initData.extras.Count]; var extrasValues = new string[initData.extras.Count]; int extraI = 0; foreach (var extra in initData.extras) { extrasKeys[extraI] = extra.Key; extrasValues[extraI] = extra.Value; extraI++; } _managerRef = CASExterns.CASUCreateManagerWithExtras( _managerClient, InitializationCompleteCallback, managerID, ( int )initData.allowedAdFlags, isTestAdMode, extrasKeys, extrasValues, initData.extras.Count ); } else { _managerRef = CASExterns.CASUCreateManager( _managerClient, InitializationCompleteCallback, managerID, ( int )initData.allowedAdFlags, isTestAdMode ); } CASExterns.CASUSetInterstitialDelegate(_managerRef, InterstitialLoadedAdCallback, InterstitialFailedAdCallback, InterstitialOpeningWithMetaCallback, InterstitialDidShowAdFailedWithErrorCallback, InterstitialDidClickedAdCallback, InterstitialDidClosedAdCallback); CASExterns.CASUSetRewardedDelegate(_managerRef, RewardedLoadedAdCallback, RewardedFailedAdCallback, RewardedOpeningWithAdCallbackAndMeta, RewardedDidShowAdFailedWithErrorCallback, RewardedDidClickedAdCallback, RewardedDidCompletedAdCallback, RewardedDidClosedAdCallback); CASExterns.CASUSetAppReturnDelegate(_managerRef, ReturnAdOpeningWithAdCallback, ReturnAdDidShowAdFailedWithErrorCallback, ReturnAdDidClickedAdCallback, ReturnAdDidClosedAdCallback); }
public static CASInitSettings WithUserConsent(this CASInitSettings builder) { return(builder); }
internal static string DownloadRemoteSettings(string managerID, BuildTarget platform, CASInitSettings settings, DependencyManager deps) { const string title = "Update CAS remote settings"; var editorSettings = CASEditorSettings.Load(); #region Create request URL #region Hash var managerIdBytes = new UTF8Encoding().GetBytes(managerID); var suffix = new byte[] { 48, 77, 101, 68, 105, 65, 116, 73, 111, 78, 104, 65, 115, 72 }; if (platform == BuildTarget.iOS) { suffix[0] = 49; } var sourceBytes = new byte[managerID.Length + suffix.Length]; Array.Copy(managerIdBytes, 0, sourceBytes, 0, managerIdBytes.Length); Array.Copy(suffix, 0, sourceBytes, managerIdBytes.Length, suffix.Length); var hashBytes = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(sourceBytes); StringBuilder hashBuilder = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { hashBuilder.Append(Convert.ToString(hashBytes[i], 16).PadLeft(2, '0')); } var hash = hashBuilder.ToString().PadLeft(32, '0'); #endregion var urlBuilder = new StringBuilder("https://psvpromo.psvgamestudio.com/Scr/cas.php?platform=") .Append(platform == BuildTarget.Android ? 0 : 1) .Append("&bundle=").Append(UnityWebRequest.EscapeURL(managerID)) .Append("&hash=").Append(hash) .Append("&lang=").Append(SystemLanguage.English) .Append("&appDev=2") .Append("&appV=").Append(PlayerSettings.bundleVersion) .Append("&coppa=").Append(( int )settings.defaultAudienceTagged) .Append("&adTypes=").Append(( int )settings.allowedAdFlags) .Append("&nets=").Append(DependencyManager.GetActiveMediationPattern(deps)) .Append("&orient=").Append(Utils.GetOrientationId()) .Append("&framework=Unity_").Append(Application.unityVersion); if (deps != null) { var buildCode = deps.GetInstalledBuildCode(); if (buildCode > 0) { urlBuilder.Append("&sdk=").Append(buildCode); } } if (string.IsNullOrEmpty(editorSettings.mostPopularCountryOfUsers)) { urlBuilder.Append("&country=").Append("US"); } else { urlBuilder.Append("&country=").Append(editorSettings.mostPopularCountryOfUsers); } if (platform == BuildTarget.Android) { urlBuilder.Append("&appVC=").Append(PlayerSettings.Android.bundleVersionCode); } #endregion using (var loader = UnityWebRequest.Get(urlBuilder.ToString())) { try { loader.SendWebRequest(); while (!loader.isDone) { if (EditorUtility.DisplayCancelableProgressBar(title, managerID, Mathf.Repeat(( float )EditorApplication.timeSinceStartup * 0.2f, 1.0f))) { loader.Dispose(); throw new Exception("Update CAS Settings canceled"); } } if (string.IsNullOrEmpty(loader.error)) { var content = loader.downloadHandler.text.Trim(); if (string.IsNullOrEmpty(content)) { throw new Exception("ManagerID [" + managerID + "] is not registered in CAS."); } EditorUtility.DisplayProgressBar(title, "Write CAS settings", 0.7f); var data = JsonUtility.FromJson <AdmobAppIdData>(content); Utils.WriteToFile(content, Utils.GetNativeSettingsPath(platform, managerID)); return(data.admob_app_id); } throw new Exception("Server response " + loader.responseCode + ": " + loader.error); } finally { EditorUtility.ClearProgressBar(); } } }
private static string UpdateRemoteSettingsAndGetAppId(CASInitSettings settings, BuildTarget platform, DependencyManager deps) { string appId = null; string updateSettingsError = ""; for (int i = 0; i < settings.managersCount; i++) { var managerId = settings.GetManagerId(i); if (managerId == null || managerId.Length < 5) { continue; } try { string newAppId = DownloadRemoteSettings(managerId, platform, settings, deps); if (!string.IsNullOrEmpty(appId) || string.IsNullOrEmpty(newAppId)) { continue; } if (newAppId.Contains('~')) { appId = newAppId; continue; } if (i == 0) { Debug.LogError(Utils.logTag + "CAS id [" + managerId + "] has an error in server settings. Please contact support!"); } } catch (Exception e) { updateSettingsError = e.Message; } } if (!string.IsNullOrEmpty(appId) || settings.IsTestAdMode()) { return(appId); } const string title = "Update CAS remote settings"; int dialogResponse = 0; var targetId = settings.GetManagerId(0); var message = updateSettingsError + "\nPlease try using a real identifier in the first place else contact support." + "\n- Warning! -" + "\n1. Continue build the app for release with current settings can reduce monetization revenue." + "\n2. When build to testing your app, make sure you use Test Ads mode rather than live ads. " + "Failure to do so can lead to suspension of your account."; Debug.LogError(Utils.logTag + message); if (!Application.isBatchMode) { dialogResponse = EditorUtility.DisplayDialogComplex(title, message, "Continue", "Cancel Build", "Select settings file"); } if (dialogResponse == 0) { var cachePath = Utils.GetNativeSettingsPath(platform, targetId); if (File.Exists(cachePath)) { return(Utils.GetAdmobAppIdFromJson(File.ReadAllText(cachePath))); } return(null); } if (dialogResponse == 1) { Utils.StopBuildWithMessage("Build canceled", BuildTarget.NoTarget); return(null); } return(Utils.SelectSettingsFileAndGetAppId(targetId, platform)); }
private static void ApplyCrosspromoDynamicLinks(string buildPath, string targetGuid, CASInitSettings casSettings, DependencyManager deps) { if (!casSettings || casSettings.IsTestAdMode() || casSettings.managersCount == 0 || string.IsNullOrEmpty(casSettings.GetManagerId(0))) { return; } if (deps != null) { var crossPromoDependency = deps.FindCrossPromotion(); if (crossPromoDependency != null && !crossPromoDependency.IsInstalled()) { return; } } try { var identifier = Application.identifier; var productName = identifier.Substring(identifier.LastIndexOf(".") + 1); var projectPath = GetXCodeProjectPath(buildPath); var entitlements = new ProjectCapabilityManager(projectPath, productName + ".entitlements", #if UNITY_2019_3_OR_NEWER null, targetGuid); #else PBXProject.GetUnityTargetName()); #endif string link = "applinks:psvios" + casSettings.GetManagerId(0) + ".page.link"; entitlements.AddAssociatedDomains(new[] { link }); entitlements.WriteToFile(); Debug.Log(CASEditorUtils.logTag + "Apply application shame: " + link); } catch (Exception e) { Debug.LogError(CASEditorUtils.logTag + "Dynamic link creation fail: " + e.ToString()); } }
private static void CopyRawSettingsFile(string rootPath, PBXProject project, string target, CASInitSettings casSettings) { if (!casSettings) { return; } var resourcesBuildPhase = project.GetResourcesBuildPhaseByTarget(target); for (int i = 0; i < casSettings.managersCount; i++) { string managerId = casSettings.GetManagerId(i); int managerIdLength = managerId.Length; string suffixChar = char.ToLower(managerId[managerIdLength - 1]).ToString(); string fileName = "cas_settings" + managerIdLength.ToString() + suffixChar + ".json"; string pathInAssets = CASEditorUtils.GetNativeSettingsPath(BuildTarget.iOS, managerId); if (File.Exists(pathInAssets)) { try { File.Copy(pathInAssets, Path.Combine(rootPath, fileName), true); var fileGuid = project.AddFile(fileName, fileName, PBXSourceTree.Source); project.AddFileToBuildSection(target, resourcesBuildPhase, fileGuid); } catch (Exception e) { Debug.LogWarning(CASEditorUtils.logTag + "Copy Raw File To XCode Project failed: " + e.ToString()); } } else { Debug.Log(CASEditorUtils.logTag + "Not found Raw file: " + pathInAssets); } } }