コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
Google.SignIn.SignIn.SharedInstance.SignedIn += (sender, e) => {
// サインイン成功時の処理
if (e.User != null && e.Error == null)
{
GoogleSignInService.MailAddress = e.User.Profile.Email;
GoogleSignInService.AccessToken = e.User.Authentication.AccessToken;
}
};
public void OnConnected(Bundle connectionHint)
{
//接続成功時の処理が必要であれば記述します。
Task.Run(() =>
{
try
{
GoogleSignInService.MailAddress = PlusClass.AccountApi.GetAccountName(GoogleSignInService.GoogleApiClient);
GoogleSignInService.AccessToken = Android.Gms.Auth.GoogleAuthUtil.GetToken(
this,
new Android.Accounts.Account(GoogleSignInService.MailAddress, "com.google"),
"oauth2:" + "https://www.googleapis.com/auth/calendar");
}
catch (Exception ex)
{
LogUtility.OutPutError(ex.Message + System.Environment.NewLine + ex.StackTrace);
}
}).ConfigureAwait(false);
}
using System.IO;
using System.Net;
using System.Net.Http;
async void OnGoogleCalendarClick(object sender, EventArgs e)
{
string email = DependencyService.Get<IGoogleSignInService>().GetSignInMailAddress();
string token = DependencyService.Get<IGoogleSignInService>().GetAccessToken();
//カレンダーを取得します。
string url = await this.GetGoogleCalendar(email, token);
}
private const string GoogleCalendarUrlHome = "https://www.googleapis.com/calendar/v3";
async Task<string> GetGoogleCalendar(string accountId, string token)
{
string result = String.Empty;
try
{
//URLを設定
string url = this.GoogleCalendarUrlHome +
this.GetCalendarEventUrl(accountId) +
this.GetApiKeyUrl());
/*******************************************************************/
//①HttpClientを用いた接続例
/*******************************************************************/
var client = new System.Net.Http.HttpClient();
//HTTPヘッダーに取得したトークンを設定
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
//URLを設定
result = await client.GetStringAsync(url);
/*******************************************************************/
//②HttpWebRequestを用いた接続例
/*******************************************************************/
var httpWebRequest = HttpWebRequest.Create(url) as HttpWebRequest;
httpWebRequest.Method = "GET";
httpWebRequest.Accept = "*/*";
httpWebRequest.CookieContainer = new CookieContainer();
httpWebRequest.Headers["Authorization"] = String.Format("Bearer {0}", token); //HTTPヘッダーに取得したトークンを設定
using (HttpWebResponse response = await httpWebRequest.GetResponseAsync() as HttpWebResponse)
{
Stream stream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
}
return Newtonsoft.Json.JsonConvert.DeserializeObject<EventInfo>(result).ToString();
}
catch (System.Net.Http.HttpRequestException hre)
{
//サインインしていないと認証エラーが発生する場合がある
return hre.Message;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + System.Environment.NewLine + ex.StackTrace);
return ex.Message;
}
}
//URLは以下を参照
//https://developers.google.com/google-apps/calendar/v3/reference/
//カレンダーを取得するURL
string GetCalendarUrl(string accountId)
{
const string url = "/users/me/calendarList/{0}";
return String.Format(url, accountId);
}
//イベントを取得するURL
string GetCalendarEventUrl(string accountId)
{
const string url = "/calendars/{0}/events";
return String.Format(url, accountId);
}
//URLにAPI_KEYを設定する
private static string GetApiKeyUrl()
{
if (Device.RuntimePlatform == Device.iOS)
{
//Google API Console でWebアプリケーションに設定したAPI_KEYをここに貼り付ける
return "?key=AIzaSyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
}
else if (Device.RuntimePlatform == Device.Android)
{
//Google API Console でWebアプリケーションに設定したAPI_KEYをここに貼り付ける
return "?key=AIzaSyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
}
return String.Empty;
}
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。