コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
namespace AppName.Services
{
//DependencyServiceから利用する
public interface IGoogleSignInService
{
void SignIn();
void SignOut();
void Disconnect();
}
}
using Android.Gms.Common.Apis;
using Android.Support.V7.App;
using Android.Gms.Common;
using Android.Util;
using Android.Gms.Plus;
using Xamarin.Forms;
using AppName.Droid.Services;
using AppName.Services;
[assembly: Dependency(typeof(GoogleSignInService))]
namespace AppName.Droid.Services
{
public class GoogleSignInService : IGoogleSignInService
{
public static GoogleApiClient GoogleApiClient;
//サインイン
public void SignIn()
{
try
{
if (GoogleSignInService.GoogleApiClient != null &&
!GoogleSignInService.GoogleApiClient.IsConnected)
{
GoogleSignInService.GoogleApiClient.Connect();
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + System.Environment.NewLine + ex.StackTrace);
}
}
//サインアウト
public void SignOut()
{
if (GoogleSignInService.GoogleApiClient != null &&
GoogleSignInService.GoogleApiClient.IsConnected)
{
PlusClass.AccountApi.ClearDefaultAccount(GoogleSignInService.GoogleApiClient);
PlusClass.AccountApi.RevokeAccessAndDisconnect(GoogleSignInService.GoogleApiClient);
}
}
//切断処理
public void Disconnect()
{
if (GoogleSignInService.GoogleApiClient != null &&
GoogleSignInService.GoogleApiClient.IsConnected)
{
PlusClass.AccountApi.ClearDefaultAccount(GoogleSignInService.GoogleApiClient);
PlusClass.AccountApi.RevokeAccessAndDisconnect(GoogleSignInService.GoogleApiClient);
GoogleSignInService.GoogleApiClient.Disconnect();
}
}
}
}
using Android.Gms.Common.Apis;
using Android.Gms.Common;
using Android.Gms.Plus;
namespace AppName.Droid
{
[Activity(Label = "AppName"]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity,
GoogleApiClient.IConnectionCallbacks, GoogleApiClient.IOnConnectionFailedListener
{
private const int RC_SIGN_IN = 9001;
protected override void OnCreate(Bundle bundle)
{
try
{
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
//Google SignIn
GoogleSignInService.GoogleApiClient = new GoogleApiClient.Builder(this)
.AddConnectionCallbacks(this)
.AddOnConnectionFailedListener(this)
.AddApi(PlusClass.API)
.AddScope(PlusClass.ScopePlusLogin)
.Build();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + System.Environment.NewLine + ex.StackTrace);
}
}
protected override void OnActivityResult(int requestCode, Result resultCode, global::Android.Content.Intent data)
{
// Ask the open service connection's billing handler to process this request
try
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN)
{
if (resultCode == Result.Ok)
{
GoogleSignInService.GoogleApiClient.Connect();
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + System.Environment.NewLine + ex.StackTrace);
}
}
protected override void OnStop()
{
base.OnStop();
//待機中の処理が必要であれば記述します。
}
public void OnConnected(Bundle connectionHint)
{
//接続成功時の処理が必要であれば記述します。
}
public void OnConnectionSuspended(int cause)
{
//接続中断時の処理が必要であれば記述します。
}
public void OnConnectionFailed(ConnectionResult result)
{
//接続失敗時の処理が必要であれば記述します。
if (!result.HasResolution)
{
// show the localized error dialog.
GoogleApiAvailability.Instance.GetErrorDialog(this, result.ErrorCode, 0).Show();
return;
}
//アカウントログインが必要な場合
try
{
result.StartResolutionForResult(this, RC_SIGN_IN);
}
catch (IntentSender.SendIntentException e)
{
System.Diagnostics.Debug.WriteLine(e.Message + System.Environment.NewLine + e.StackTrace);
}
}
}
}
void OnGoogleSignInClick(object sender, EventArgs e)
{
//サインイン
DependencyService.Get<IGoogleSignInService>().SignIn();
//サインアウト
DependencyService.Get<IGoogleSignInService>().SignOut();
//切断
DependencyService.Get<IGoogleSignInService>().Disconnect();
}
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。