99 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
	
| //
 | |
| //  MaxIntegrationManager.cs
 | |
| //  AppLovin MAX Unity Plugin
 | |
| //
 | |
| //  Created by Santosh Bagadi on 8/29/19.
 | |
| //  Copyright © 2019 AppLovin. All rights reserved.
 | |
| //
 | |
| 
 | |
| #if UNITY_IOS || UNITY_IPHONE
 | |
| 
 | |
| using System.Text;
 | |
| using UnityEngine.Networking;
 | |
| using Debug = UnityEngine.Debug;
 | |
| using System.IO;
 | |
| using UnityEditor;
 | |
| using UnityEditor.Callbacks;
 | |
| 
 | |
| namespace AppLovinMax.Scripts.IntegrationManager.Editor
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Adds AppLovin Quality Service to the iOS project once the project has been exported.
 | |
|     ///
 | |
|     /// 1. Downloads the Quality Service ruby script.
 | |
|     /// 2. Runs the script using Ruby which integrates AppLovin Quality Service to the project.
 | |
|     /// </summary>
 | |
|     public class AppLovinPostProcessiOS
 | |
|     {
 | |
|         private const string OutputFileName = "AppLovinQualityServiceSetup.rb";
 | |
| 
 | |
|         [PostProcessBuild(int.MaxValue)] // We want to run Quality Service script last.
 | |
|         public static void OnPostProcessBuild(BuildTarget buildTarget, string buildPath)
 | |
|         {
 | |
|             if (!AppLovinSettings.Instance.QualityServiceEnabled) return;
 | |
| 
 | |
|             var sdkKey = AppLovinSettings.Instance.SdkKey;
 | |
|             if (string.IsNullOrEmpty(sdkKey))
 | |
|             {
 | |
|                 MaxSdkLogger.UserError("Failed to install AppLovin Quality Service plugin. SDK Key is empty. Please enter the AppLovin SDK Key in the Integration Manager.");
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             var outputFilePath = Path.Combine(buildPath, OutputFileName);
 | |
| 
 | |
|             // Check if Quality Service is already installed.
 | |
|             if (File.Exists(outputFilePath) && Directory.Exists(Path.Combine(buildPath, "AppLovinQualityService")))
 | |
|             {
 | |
|                 // TODO: Check if there is a way to validate if the SDK key matches the script. Else the pub can't use append when/if they change the SDK Key.
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             // Download the ruby script needed to install Quality Service
 | |
|             var downloadHandler = new DownloadHandlerFile(outputFilePath);
 | |
|             var postJson = string.Format("{{\"sdk_key\" : \"{0}\"}}", sdkKey);
 | |
|             var bodyRaw = Encoding.UTF8.GetBytes(postJson);
 | |
|             var uploadHandler = new UploadHandlerRaw(bodyRaw);
 | |
|             uploadHandler.contentType = "application/json";
 | |
| 
 | |
|             using (var unityWebRequest = new UnityWebRequest("https://api2.safedk.com/v1/build/ios_setup2"))
 | |
|             {
 | |
|                 unityWebRequest.method = UnityWebRequest.kHttpVerbPOST;
 | |
|                 unityWebRequest.downloadHandler = downloadHandler;
 | |
|                 unityWebRequest.uploadHandler = uploadHandler;
 | |
|                 var operation = unityWebRequest.SendWebRequest();
 | |
| 
 | |
|                 // Wait for the download to complete or the request to timeout.
 | |
|                 while (!operation.isDone) { }
 | |
| 
 | |
| #if UNITY_2020_1_OR_NEWER
 | |
|                 if (unityWebRequest.result != UnityWebRequest.Result.Success)
 | |
| #else
 | |
|                 if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
 | |
| #endif
 | |
|                 {
 | |
|                     MaxSdkLogger.UserError("AppLovin Quality Service installation failed. Failed to download script with error: " + unityWebRequest.error);
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 // Check if Ruby is installed
 | |
|                 var rubyVersion = AppLovinCommandLine.Run("ruby", "--version", buildPath);
 | |
|                 if (rubyVersion.ExitCode != 0)
 | |
|                 {
 | |
|                     MaxSdkLogger.UserError("AppLovin Quality Service installation requires Ruby. Please install Ruby, export it to your system PATH and re-export the project.");
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 // Ruby is installed, run `ruby AppLovinQualityServiceSetup.rb`
 | |
|                 var result = AppLovinCommandLine.Run("ruby", OutputFileName, buildPath);
 | |
| 
 | |
|                 // Check if we have an error.
 | |
|                 if (result.ExitCode != 0) MaxSdkLogger.UserError("Failed to set up AppLovin Quality Service");
 | |
| 
 | |
|                 MaxSdkLogger.UserDebug(result.Message);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| #endif
 |