private static void OnPostprocessInfo(PlistDocumentWrapper info, AppCenterSettings settings) { if ((settings.UseAuth && AppCenter.Auth != null) || (settings.UseDistribute && AppCenter.Distribute != null)) { // Add App Center URL sceme. var root = info.GetRoot(); var urlTypes = root.GetType().GetMethod("CreateArray").Invoke(root, new object[] { "CFBundleURLTypes" }); if (settings.UseAuth && AppCenter.Auth != null) { var urlType = urlTypes.GetType().GetMethod("AddDict").Invoke(urlTypes, null); var setStringMethod = urlType.GetType().GetMethod("SetString"); setStringMethod.Invoke(urlType, new object[] { "CFBundleTypeRole", "Editor" }); setStringMethod.Invoke(urlType, new object[] { "CFBundleURLName", "$(PRODUCT_BUNDLE_IDENTIFIER)" }); var urlSchemes = urlType.GetType().GetMethod("CreateArray").Invoke(urlType, new[] { "CFBundleURLSchemes" }); urlSchemes.GetType().GetMethod("AddString").Invoke(urlSchemes, new[] { "msal" + settings.iOSAppSecret }); } if (settings.UseDistribute && AppCenter.Distribute != null) { var urlType = urlTypes.GetType().GetMethod("AddDict").Invoke(urlTypes, null); var setStringMethod = urlType.GetType().GetMethod("SetString"); setStringMethod.Invoke(urlType, new object[] { "CFBundleTypeRole", "None" }); setStringMethod.Invoke(urlType, new object[] { "CFBundleURLName", ApplicationIdHelper.GetApplicationId() }); var urlSchemes = urlType.GetType().GetMethod("CreateArray").Invoke(urlType, new[] { "CFBundleURLSchemes" }); urlSchemes.GetType().GetMethod("AddString").Invoke(urlSchemes, new[] { "appcenter-" + settings.iOSAppSecret }); } } }
private static void OnPostprocessInfo(PlistDocumentWrapper info, AppCenterSettings settings) { if (settings.UseDistribute && AppCenter.Distribute != null) { // Add App Center URL scemes. var schemes = new List <string>() { "appcenter-" + settings.iOSAppSecret }; // Create a reflection call for getting custom schemes from iOS settings. var playerSettingsClass = typeof(PlayerSettings.iOS); var iOSURLSchemesMethod = playerSettingsClass.GetMethod("GetURLSchemes", BindingFlags.Static | BindingFlags.NonPublic); // Verify that method exists and call it for getting custom schemes. if (iOSURLSchemesMethod != null) { var schemesFromSettings = (string[])iOSURLSchemesMethod.Invoke(null, null); schemes.AddRange(schemesFromSettings.ToList <string>()); } // Generate scheme information. var root = info.GetRoot(); var urlTypes = root.GetType().GetMethod("CreateArray").Invoke(root, new object[] { "CFBundleURLTypes" }); if (settings.UseDistribute && AppCenter.Distribute != null) { var urlType = urlTypes.GetType().GetMethod("AddDict").Invoke(urlTypes, null); var setStringMethod = urlType.GetType().GetMethod("SetString"); setStringMethod.Invoke(urlType, new object[] { "CFBundleTypeRole", "None" }); setStringMethod.Invoke(urlType, new object[] { "CFBundleURLName", ApplicationIdHelper.GetApplicationId() }); var urlSchemes = urlType.GetType().GetMethod("CreateArray").Invoke(urlType, new[] { "CFBundleURLSchemes" }); // Add custom schemes defined in Unity players settings. foreach (var scheme in schemes) { urlSchemes.GetType().GetMethod("AddString").Invoke(urlSchemes, new[] { scheme }); } } } }
public void SetAppSecret(AppCenterSettings settings) { _loaderFileText = _loaderFileText.Replace(AppSecretSearchText, settings.iOSAppSecret); }
private static void OnPostprocessCapabilities(ProjectCapabilityManagerWrapper capabilityManager, AppCenterSettings settings) { if (settings.UsePush && AppCenter.Push != null) { capabilityManager.AddPushNotifications(); capabilityManager.AddRemoteNotificationsToBackgroundModes(); } }
public void SetAppSecret(AppCenterSettings settings) { _resourceValues[AppSecretKey] = settings.AndroidAppSecret; }
public static void Create(AppCenterSettings settings) { var loaderZipFile = AppCenterSettingsContext.AppCenterPath + "/AppCenter/Plugins/Android/appcenter-loader-release.aar"; var loaderFolder = "appcenter-loader-release"; var manifestPath = "appcenter-loader-release/AndroidManifest.xml"; var manifestMetafile = "appcenter-loader-release/AndroidManifest.xml.meta"; if (!File.Exists(loaderZipFile)) { UnityEngine.Debug.LogWarning("Failed to load dependency file appcenter-loader-release.aar"); return; } // Delete unzipeed directory if it already exists. if (Directory.Exists(loaderFolder)) { Directory.Delete(loaderFolder, true); } UnzipFile(loaderZipFile, loaderFolder); if (!Directory.Exists(loaderFolder)) { UnityEngine.Debug.LogWarning("Unzipping loader folder failed."); return; } var xmlFile = XDocument.Load(manifestPath); var applicationElements = xmlFile.Root.Elements().Where(element => element.Name.LocalName == "application").ToList(); if (applicationElements.Count == 0) { UnityEngine.Debug.LogWarning("Incorrect format of AndroidManifest.xml of AppCenterLoader"); Directory.Delete(loaderFolder, true); return; } var activityElements = applicationElements[0].Elements().Where(element => element.Name.LocalName == "activity").ToList(); // Delete the unzipped folder if the activity element already exists in the AndroidManifest.xml file if (activityElements.Count == 1) { Directory.Delete(loaderFolder, true); return; } var intentElement = new XElement("intent-filter"); XNamespace ns = "http://schemas.android.com/apk/res/android"; var activityElement = new XElement("activity"); activityElement.SetAttributeValue(ns + "name", "com.microsoft.identity.client.BrowserTabActivity"); var actionElement = new XElement("action"); actionElement.SetAttributeValue(ns + "name", "android.intent.action.VIEW"); var categoryElement1 = new XElement("category"); categoryElement1.SetAttributeValue(ns + "name", "android.intent.category.DEFAULT"); var categoryElement2 = new XElement("category"); categoryElement2.SetAttributeValue(ns + "name", "android.intent.category.BROWSABLE"); var dataElement = new XElement("data"); dataElement.SetAttributeValue(ns + "host", "auth"); dataElement.SetAttributeValue(ns + "scheme", "msal" + settings.AndroidAppSecret); intentElement.Add(actionElement); intentElement.Add(categoryElement1); intentElement.Add(categoryElement2); intentElement.Add(dataElement); activityElement.Add(intentElement); applicationElements[0].Add(activityElement); xmlFile.Save(manifestPath); // Delete the AndroidManifest.xml.meta file if generated if (File.Exists(manifestMetafile)) { File.Delete(manifestMetafile); } // Delete the original aar file and zipped the extracted folder to generate a new one. File.Delete(loaderZipFile); ZipFile(loaderFolder, loaderZipFile); Directory.Delete(loaderFolder, true); }