UnityでWindowsMobileアプリケーションのOAuth2認証といくつかの操作を実装する必要があります。コンソールアプリケーションとして機能させることができましたが(.NET 4.0以降を使用)、Unityは.NET 3.5までしかサポートしていないため、コードをコピーするだけでは機能しませんでした。Unityで動作させる方法はありますか?これが私の認証コードです:
private static async Task<string> GetAccessToken()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://someurl.com");
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("grant_type", "client_credentials"),
new KeyValuePair<string, string>("client_id", "login-secret"),
new KeyValuePair<string, string>("client_secret", "secretpassword")
});
var result = await client.PostAsync("/oauth/token", content);
string resultContent = await result.Content.ReadAsStringAsync();
var json = JObject.Parse(resultContent);
return json["access_token"].ToString();
}
}
そしてこれは私のOAuth2関数の1つです:
private static async Task<string> GetMeasurements(string id, DateTime from, DateTime to)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://someurl.com");
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("MeasurePoints", id),
new KeyValuePair<string, string>("Sampling", "Auto"),
new KeyValuePair<string, string>("From", from.ToString("yyyy-MM-ddTHH:mm:ssZ")),
new KeyValuePair<string, string>("To", to.ToString("yyyy-MM-ddTHH:mm:ssZ"))
});
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + GetAccessToken().Result);
var result = await client.PostAsync("/api/v2/Measurements", content);
string resultContent = await result.Content.ReadAsStringAsync();
var rootArray = JArray.Parse(resultContent);
string measurements = "";
foreach (JObject item in rootArray)
{
measurements = item.GetValue("Measurements").ToString();
}
return measurements;
}
}
何か提案があれば、永遠に感謝します。ありがとう!
古い.NETバージョンに変換するのはそれほど難しくありません。UnityWWW
またはUnityWebRequest
APIを使用できます。それらのいずれかがそれを行う必要があります。
1 .ReplaceHttpClient
とUnityWebRequest
。
2 .ReplaceKeyValuePair
と、Dictionary
。
3 .ReplaceDefaultRequestHeaders
とSetRequestHeader
。
4 .Replaceclient.PostAsync
とUnityWebRequest.Send
5 .FOR JSON、使用団結のJsonUtility
6.GetMeasurements
関数内のJson配列については、JsonHelper
この投稿のクラスを使用してください。
それでおしまい。簡単な移植ができました。テストしませんでしたが、コンパイルできたので、始めることができます。
GetAccessToken
機能:
[Serializable]
public class TokenClassName
{
public string access_token;
}
private static IEnumerator GetAccessToken(Action<string> result)
{
Dictionary<string, string> content = new Dictionary<string, string>();
//Fill key and value
content.Add("grant_type", "client_credentials");
content.Add("client_id", "login-secret");
content.Add("client_secret", "secretpassword");
UnityWebRequest www = UnityWebRequest.Post("https://someurl.com//oauth/token", content);
//Send request
yield return www.Send();
if (!www.isError)
{
string resultContent = www.downloadHandler.text;
TokenClassName json = JsonUtility.FromJson<TokenClassName>(resultContent);
//Return result
result(json.access_token);
}
else
{
//Return null
result("");
}
}
GetMeasurements
機能:
[Serializable]
public class MeasurementClassName
{
public string Measurements;
}
private static IEnumerator GetMeasurements(string id, DateTime from, DateTime to, Action<string> result)
{
Dictionary<string, string> content = new Dictionary<string, string>();
//Fill key and value
content.Add("MeasurePoints", id);
content.Add("Sampling", "Auto");
content.Add("From", from.ToString("yyyy-MM-ddTHH:mm:ssZ"));
content.Add("To", to.ToString("yyyy-MM-ddTHH:mm:ssZ"));
content.Add("client_secret", "secretpassword");
UnityWebRequest www = UnityWebRequest.Post("https://someurl.com/api/v2/Measurements", content);
string token = null;
yield return GetAccessToken((tokenResult) => { token = tokenResult; });
www.SetRequestHeader("Authorization", "Bearer " + token);
www.Send();
if (!www.isError)
{
string resultContent = www.downloadHandler.text;
MeasurementClassName[] rootArray = JsonHelper.FromJson<MeasurementClassName>(resultContent);
string measurements = "";
foreach (MeasurementClassName item in rootArray)
{
measurements = item.Measurements;
}
//Return result
result(measurements);
}
else
{
//Return null
result("");
}
}
使用法:
string id = "";
DateTime from = new DateTime();
DateTime to = new DateTime();
StartCoroutine(GetMeasurements(id, from, to, (measurementResult) =>
{
string measurement = measurementResult;
//Do something with measurement
UnityEngine.Debug.Log(measurement);
}));
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加