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
|