using System.Collections; using System.Collections.Generic; using System.IO; using System; using UnityEngine; using UnityEditor; using System.Xml; using UnityEngine.Serialization; [HelpURL("https://www.yuque.com/books/share/83586259-ff00-4802-867f-bbefc3fe07c4/epesmt")] [Serializable /*, CreateAssetMenuAttribute(fileName = "AdManagerSettings", menuName = "AdManagerSettings", order = 0)*/] public class AdManagerSettings : ScriptableObject { #region Singleton private static AdManagerSettings instance; public static AdManagerSettings Instance { get { if (instance == null) { instance = Resources.Load("AdManagerSettings"); if (instance == null) { return null; } else { Debug.Log("AdManagerSettings Loaded"); } } return instance; } } #endregion #region Inspector Variables [SerializeField] public string[] iOSBannerID; [SerializeField] public string[] iOSInterstitialID; [SerializeField] public string[] iOSVideoID; [SerializeField] public string[] iOSOpenID; [SerializeField] public string[] iOSRewardedInterstitialID; [Space] [SerializeField] public string[] AndroidBannerID; [SerializeField] public string[] AndroidInterstitialID; [SerializeField] public string[] AndroidVideoID; [SerializeField] public string[] AndroidOpenID; [SerializeField] public string[] AndroidRewardedInterstitialID; [Tooltip("输入自动请求间隔时间,单位秒")] [SerializeField] public int RepeatTime = 120; [FormerlySerializedAs("YouIosAdmobId")] [Tooltip("输入你iOS应用的AdmobId")] [SerializeField] public string iOSAdmobId; [Tooltip("仅iOS需要,输入你应用的苹果appid")] [SerializeField] public string AppleID; [Tooltip("输入你应用的友盟 iOS appid")] [SerializeField] public string iOSUmengAppid; [Tooltip("输入你应用的iOS 穿山甲AppID")] [SerializeField] public string iOSPangleAppID; [Tooltip("输入你应用的iOS FacebookID")] [SerializeField] public string iOSFacebookID; [Tooltip("输入你应用的iOS Facebook名字")] [SerializeField] public string iOSFacebookDisplayname = "ios"; [Tooltip("输入你应用的iOS Facebook客户端口令(FacebookClientToken)")] [SerializeField] public string iOSFacebookClientToken; [Tooltip("输入你应用的iOS gameId")] [SerializeField] public string iOSGameId; [Tooltip("输入你应用的iOS Secret")] [SerializeField] public string iOSGameSecret; [FormerlySerializedAs("YouAndroidAdmobId")] [Tooltip("输入你Android应用的AdmobId")] [SerializeField] public string AndroidAdmobId; [Tooltip("输入你应用的友盟 Android appid")] [SerializeField] public string AndroidUmengAppid; [Tooltip("输入你应用的Android 穿山甲AppID")] [SerializeField] public string AndroidPangleAppID; [Tooltip("输入你应用的Android FacebookID")] [SerializeField] public string AndroidFacebookID; [Tooltip("输入你应用的Android Facebook客户端口令(FacebookClientToken)")] [SerializeField] public string AndroidFacebookClientToken; [Tooltip("输入你应用的Android Facebook名字")] [SerializeField] public string AndroidFacebookDisplayname = "Android"; [Tooltip("输入你应用的Android gameId")] [SerializeField] public string AndroidGameId; [Tooltip("输入你应用的Android gameSecret")] [SerializeField] public string AndroidGameSecret; [Space] [Tooltip("输入你应用的谷歌服务ID")] [SerializeField] public string GoogleGamesAppID; [Space] [Tooltip("输入你应用的Umeng渠道名字")] [SerializeField] public string umengChannel = "GooglePlay"; [Tooltip("防篡改")] [SerializeField] public bool isChcek = false; #endregion #if UNITY_EDITOR #region Editors. [MenuItem("PottingMob/Settings")] public static void SelectSettings() { var path = @"Assets/PottingMobileSDK/Resources/AdManagerSettings.asset"; AdManagerSettings obj = AssetDatabase.LoadAssetAtPath(path); Selection.instanceIDs = new int[] {obj.GetInstanceID()}; } [MenuItem("PottingMob/Regenerate Android Manifest")] public static void Regenerate() { string xmlPath = Application.dataPath + "/Plugins/Android/AndroidManifest.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlPath); XmlNode node = xmlDoc.SelectSingleNode("/manifest"); node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.facebook.sdk.ApplicationId"); node.Attributes["android:value"].Value = "fb" + AdManagerSettings.Instance.AndroidFacebookID; node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.facebook.sdk.ClientToken"); node.Attributes["android:value"].Value = AdManagerSettings.Instance.AndroidFacebookClientToken; node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "applovin.sdk.key"); node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.google.android.gms.ads.APPLICATION_ID"); node.Attributes["android:value"].Value = AdManagerSettings.Instance.AndroidAdmobId; Debug.Log(PottingMobileContent.Admob_appid); //node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.google.android.gms.games.APP_ID"); //node.Attributes["android:value"].Value = AdManagerSettings.Instance.GoogleGamesAppID; node = FindNode(xmlDoc, "/manifest/application/meta-data", "android:name", "com.google.android.gms.games.APP_ID"); node.Attributes["android:value"].Value = "\\u003"+AdManagerSettings.Instance.GoogleGamesAppID; // scheme XmlNodeList nodes = xmlDoc.SelectNodes("/manifest/application/activity/intent-filter/data"); node = nodes.Item(0); node.Attributes["android:scheme"].Value = "fb" + AdManagerSettings.Instance.AndroidFacebookID; //com.facebook.app.FacebookContentProvider{APP_ID} node = FindNode(xmlDoc, "/manifest/application/provider", "android:name", "com.facebook.FacebookContentProvider"); node.Attributes["android:authorities"].Value = "com.facebook.app.FacebookContentProvider" + AdManagerSettings.Instance.AndroidFacebookID; xmlDoc.Save(xmlPath); // syncResString(); AssetDatabase.Refresh(); } private static void syncResString() { string xmlPath = Application.dataPath + "/Plugins/Android/res/values/strings.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlPath); XmlNode node = xmlDoc.SelectSingleNode("/resources"); node = FindStringNode(xmlDoc, "/resources/string", "android:name", "google_game_app_id"); node.InnerXml = AdManagerSettings.Instance.GoogleGamesAppID; xmlDoc.Save(xmlPath); } static XmlNode FindNode(XmlDocument xmlDoc, string xpath, string attributeName, string attributeValue) { XmlNodeList nodes = xmlDoc.SelectNodes(xpath); for (int i = 0; i < nodes.Count; i++) { XmlNode node = nodes.Item(i); string _attributeValue = node.Attributes[attributeName].Value; if (_attributeValue == attributeValue) { return node; } } return null; } static XmlNode FindStringNode(XmlDocument xmlDoc, string xpath, string attributeName, string attributeValue) { XmlNodeList nodes = xmlDoc.SelectNodes(xpath); for (int i = 0; i < nodes.Count; i++) { XmlNode node = nodes.Item(i); string _attributeValue = node.Attributes[0].Value; if (_attributeValue == attributeValue) { return node; } } return null; } #endregion #endif }