133 lines
4.3 KiB
C#
133 lines
4.3 KiB
C#
#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
|