You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

132 lines
4.3 KiB

#if ENABLE_CLOUD_SERVICES_ANALYTICS
using System;
using System.Text;
using UnityEngine.Networking;
namespace UnityEngine.Analytics
{
public class DataPrivacy
{
[Serializable]
internal struct UserPostData
{
public string appid;
public string userid;
public long sessionid;
public string platform;
public UInt32 platformid;
public string sdk_ver;
public bool debug_device;
public string deviceid;
public string plugin_ver;
}
[Serializable]
internal struct TokenData
{
public string url;
public string token;
}
const string kVersion = "3.0.0";
const string kVersionString = "DataPrivacyPackage/" + kVersion;
internal const string kBaseUrl = "https://data-optout-service.uca.cloud.unity3d.com";
const string kTokenUrl = kBaseUrl + "/token";
internal static UserPostData GetUserData()
{
var postData = new UserPostData
{
appid = Application.cloudProjectId,
userid = AnalyticsSessionInfo.userId,
sessionid = AnalyticsSessionInfo.sessionId,
platform = Application.platform.ToString(),
platformid = (UInt32)Application.platform,
sdk_ver = Application.unityVersion,
debug_device = Debug.isDebugBuild,
deviceid = SystemInfo.deviceUniqueIdentifier,
plugin_ver = kVersionString
};
return postData;
}
static string GetUserAgent()
{
var message = "UnityPlayer/{0} ({1}/{2}{3} {4})";
return String.Format(message,
Application.unityVersion,
Application.platform.ToString(),
(UInt32)Application.platform,
Debug.isDebugBuild ? "-dev" : "",
kVersionString);
}
static String getErrorString(UnityWebRequest www)
{
var json = www.downloadHandler.text;
var error = www.error;
if (String.IsNullOrEmpty(error))
{
// 5.5 sometimes fails to parse an error response, and the only clue will be
// in www.responseHeadersString, which isn't accessible.
error = "Empty response";
}
if (!String.IsNullOrEmpty(json))
{
error += ": " + json;
}
return error;
}
public static void FetchPrivacyUrl(Action<string> success, Action<string> failure = null)
{
string postJson = JsonUtility.ToJson(GetUserData());
byte[] bytes = Encoding.UTF8.GetBytes(postJson);
var uploadHandler = new UploadHandlerRaw(bytes);
uploadHandler.contentType = "application/json";
var www = UnityWebRequest.Post(kTokenUrl, "");
www.uploadHandler = uploadHandler;
#if !UNITY_WEBGL
www.SetRequestHeader("User-Agent", GetUserAgent());
#endif
var async = www.SendWebRequest();
async.completed += (AsyncOperation async2) =>
{
var json = www.downloadHandler.text;
if (!String.IsNullOrEmpty(www.error) || String.IsNullOrEmpty(json))
{
var error = getErrorString(www);
if (failure != null)
{
failure(error);
}
}
else
{
TokenData tokenData;
tokenData.url = ""; // Just to quell "possibly unassigned" error
try
{
tokenData = JsonUtility.FromJson<TokenData>(json);
}
catch (Exception e)
{
if (failure != null)
{
failure(e.ToString());
}
}
success(tokenData.url);
}
};
}
}
}
#endif //ENABLE_CLOUD_SERVICES_ANALYTICS