Ejemplo n.º 1
0
 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 });
         }
     }
 }
Ejemplo n.º 2
0
    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 });
                }
            }
        }
    }
Ejemplo n.º 3
0
 public void SetAppSecret(AppCenterSettings settings)
 {
     _loaderFileText = _loaderFileText.Replace(AppSecretSearchText, settings.iOSAppSecret);
 }
Ejemplo n.º 4
0
 private static void OnPostprocessCapabilities(ProjectCapabilityManagerWrapper capabilityManager, AppCenterSettings settings)
 {
     if (settings.UsePush && AppCenter.Push != null)
     {
         capabilityManager.AddPushNotifications();
         capabilityManager.AddRemoteNotificationsToBackgroundModes();
     }
 }
Ejemplo n.º 5
0
 public void SetAppSecret(AppCenterSettings settings)
 {
     _resourceValues[AppSecretKey] = settings.AndroidAppSecret;
 }
Ejemplo n.º 6
0
    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);
    }