#if UNITY_5_6_OR_NEWER && !UNITY_5_6_0 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEditor.Connect; using UnityEngine.Networking; using System.Text; using System.Threading; using System; using AppStoreModel; namespace AppStoresSupport { public class AppStoreOnboardApi { public const string oauthClientId = "channel_editor"; public const string oauthClientSecret = "B63AFB324DE3D12A13827340019D1EE3"; public const string oauthRedirectUri = "https://id.unity.com"; public const string url = "https://api.unity.com"; public const string xiaomiAppType = "xiaomi"; public const string tokenExpiredInfo = "Expired Access Token"; public static TokenInfo tokenInfo = new TokenInfo(); public static string userId; public static string orgId; public static string updateRev; public static bool loaded = false; public static UnityWebRequest asyncRequest(string method, string url, string api, string token, object postObject) { UnityWebRequest request = new UnityWebRequest(url + api, method); if (postObject != null) { string postData = JsonUtility.ToJson (postObject); byte[] postDataBytes = Encoding.UTF8.GetBytes (postData); request.uploadHandler = (UploadHandler)new UploadHandlerRaw (postDataBytes); } request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer(); // set content-type header request.SetRequestHeader ("Content-Type", "application/json"); // set auth header if (token != null) { request.SetRequestHeader ("Authorization", "Bearer " + token); } #if UNITY_2017_2_OR_NEWER request.SendWebRequest (); #else request.Send (); #endif return request; } public static UnityWebRequest RefreshToken() { TokenRequest req = new TokenRequest (); req.client_id = oauthClientId; req.client_secret = oauthClientSecret; req.grant_type = "refresh_token"; req.refresh_token = tokenInfo.refresh_token; return asyncRequest (UnityWebRequest.kHttpVerbPOST, url, "/v1/oauth2/token", null, req); } public static UnityWebRequest GetAccessToken(string authCode) { TokenRequest req = new TokenRequest (); req.code = authCode; req.client_id = oauthClientId; req.client_secret = oauthClientSecret; req.grant_type = "authorization_code"; req.redirect_uri = oauthRedirectUri; return asyncRequest (UnityWebRequest.kHttpVerbPOST, AppStoreOnboardApi.url, "/v1/oauth2/token", null, req); } public static UnityWebRequest GetUserId() { string token = tokenInfo.access_token; string api = "/v1/oauth2/tokeninfo?access_token=" + token; return asyncRequest(UnityWebRequest.kHttpVerbGET, url, api, token, null); } public static UnityWebRequest GetOrgId(string projectGuid) { string api = "/v1/core/api/projects/" + projectGuid; string token = tokenInfo.access_token; return asyncRequest(UnityWebRequest.kHttpVerbGET, url, api, token, null); } public static UnityWebRequest GetOrgRoles() { string api = "/v1/organizations/" + orgId + "/roles?userId=" + userId; string token = tokenInfo.access_token; return asyncRequest(UnityWebRequest.kHttpVerbGET, url, api, token, null); } public static UnityWebRequest GetUnityClientInfo(string projectGuid) { string api = "/v1/oauth2/user-clients?projectGuid=" + projectGuid; string token = tokenInfo.access_token; return asyncRequest(UnityWebRequest.kHttpVerbGET, url, api, token, null); } public static UnityWebRequest GenerateUnityClient(string projectGuid, UnityClientInfo unityClientInfo, XiaomiSettings xiaomi, string callbackUrl) { return generateOrUpdateUnityClient (projectGuid, UnityWebRequest.kHttpVerbPOST, unityClientInfo, xiaomi, callbackUrl); } public static UnityWebRequest UpdateUnityClient(string projectGuid, UnityClientInfo unityClientInfo, XiaomiSettings xiaomi, string callbackUrl) { return generateOrUpdateUnityClient (projectGuid, UnityWebRequest.kHttpVerbPUT, unityClientInfo, xiaomi, callbackUrl); } static UnityWebRequest generateOrUpdateUnityClient(string projectGuid, string method, UnityClientInfo unityClientInfo, XiaomiSettings xiaomi, string callbackUrl) { // TODO read xiaomi info from user input UnityChannel channel = new UnityChannel (); channel.xiaomi = xiaomi; channel.projectGuid = projectGuid; channel.callbackUrl = callbackUrl; // set necessary client post data UnityClient client = new UnityClient (); client.client_name = projectGuid; client.scopes.Add ("identity"); client.channel = channel; string api = null; if (method.Equals (UnityWebRequest.kHttpVerbPOST, StringComparison.InvariantCultureIgnoreCase)) { api = "/v1/oauth2/user-clients"; } else if (method.Equals (UnityWebRequest.kHttpVerbPUT, StringComparison.InvariantCultureIgnoreCase)) { // if client is not generated or loaded, directly ignore update if (unityClientInfo.ClientId == null) { Debug.LogError ("Please get/generate Unity Client first."); loaded = false; return null; } if (updateRev == null) { Debug.LogError ("Please get/generate Unity Client first."); loaded = false; return null; } client.rev = updateRev; if (orgId == null) { Debug.LogError ("Please get/generate Unity Client first."); loaded = false; return null; } client.owner = orgId; client.ownerType = "ORGANIZATION"; api = "/v1/oauth2/user-clients/" + unityClientInfo.ClientId; } else { return null; } string token = tokenInfo.access_token; return asyncRequest(method, url, api, token, client); } public static UnityWebRequest UpdateUnityClientSecret(string clientId) { if (clientId == null) { return null; } string token = tokenInfo.access_token; return asyncRequest(UnityWebRequest.kHttpVerbPUT, url, "/v1/oauth2/user-clients/channel-secret?clientId=" + clientId, token, null); } } } #endif