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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
#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));
        }
예제 #10
0
        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());
            }
        }
예제 #11
0
        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);
                }
            }
        }