diff --git a/Assets/GoogleSignIn.meta b/Assets/GoogleSignIn.meta
new file mode 100644
index 00000000..b61c9432
--- /dev/null
+++ b/Assets/GoogleSignIn.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a089c79cc334748a5a29c5f219b7cfd4
+folderAsset: yes
+timeCreated: 1490807626
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor.meta b/Assets/GoogleSignIn/Editor.meta
new file mode 100644
index 00000000..d55e3f7a
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a7e77ece57ef34772969fad4915b1a4c
+folderAsset: yes
+timeCreated: 1490978071
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml b/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml
new file mode 100644
index 00000000..625d2e51
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ extra-google-m2repository
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.meta b/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.meta
new file mode 100644
index 00000000..6493d604
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 938014c9994164100b26d82840a88fbb
+labels:
+- gvh
+- gvh_version-1.0.4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml b/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml
new file mode 100644
index 00000000..1ef90349
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+ Assets/GoogleSignIn/Editor/m2repository
+
+
+
+
diff --git a/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml.meta b/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml.meta
new file mode 100644
index 00000000..578e49d5
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e8689106c65f445c19cec6044d615c19
+labels:
+- gvh
+- gvh_version-1.0.4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt b/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt
new file mode 100644
index 00000000..a0e24547
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt
@@ -0,0 +1,33 @@
+Assets/PlayServicesResolver/Editor/Google.VersionHandlerImpl_v1.2.89.0.dll
+Assets/PlayServicesResolver/Editor/Google.IOSResolver_v1.2.89.0.dll
+Assets/PlayServicesResolver/Editor/Google.VersionHandler.dll
+Assets/PlayServicesResolver/Editor/Google.JarResolver_v1.2.89.0.dll
+Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm
+Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h
+Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h
+Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm
+Assets/Parse/LICENSE
+Assets/Parse/Plugins/Unity.Compat.dll
+Assets/Parse/Plugins/Unity.Tasks.dll
+Assets/SignInSample/MainScene.unity
+Assets/SignInSample/SigninSampleScript.cs
+Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs
+Assets/GoogleSignIn/Impl/SignInHelperObject.cs
+Assets/GoogleSignIn/Impl/NativeFuture.cs
+Assets/GoogleSignIn/Impl/BaseObject.cs
+Assets/GoogleSignIn/GoogleSignIn.cs
+Assets/GoogleSignIn/GoogleSignInConfiguration.cs
+Assets/GoogleSignIn/Future.cs
+Assets/GoogleSignIn/GoogleSignInUser.cs
+Assets/GoogleSignIn/GoogleSignInStatusCode.cs
+Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml
+Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5
diff --git a/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt.meta b/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt.meta
new file mode 100644
index 00000000..eb7a5d66
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a67d5f0cfc09749e6b1ce13e8b8e6e1d
+labels:
+- gvh
+- gvh_manifest
+- gvh_version-1.0.4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository.meta b/Assets/GoogleSignIn/Editor/m2repository.meta
new file mode 100644
index 00000000..26cfc222
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: eefc3dc8b56e545998952bd59ab36247
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com.meta b/Assets/GoogleSignIn/Editor/m2repository/com.meta
new file mode 100644
index 00000000..9372f2b8
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ade49ef91c70440a0baeac322ecaa2d7
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google.meta
new file mode 100644
index 00000000..a1cf31a7
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 707de6ade212a46b1ab4bf4d42325176
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin.meta
new file mode 100644
index 00000000..4a56a312
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 34b86fc2e934d482ea5f9d1f5354b0f9
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support.meta
new file mode 100644
index 00000000..1132fbfe
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e3becceb8680148d59e5bb93e5eb5a24
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4.meta
new file mode 100644
index 00000000..27236f59
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 001a15402063b4df983ba8bc4ddb269f
+folderAsset: yes
+timeCreated: 1537405253
+licenseType: Pro
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom
new file mode 100644
index 00000000..ce320d07
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom
@@ -0,0 +1,9 @@
+
+
+ 4.0.0
+ com.google.signin
+ google-signin-support
+ 1.0.4
+ srcaar
+
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5
new file mode 100644
index 00000000..a6bc0c50
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5
@@ -0,0 +1 @@
+7cd48eaf454469c04dae63043d467d69
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5.meta
new file mode 100644
index 00000000..8209b096
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 907bf7a19cd7848cabf1f641f61343ee
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.meta
new file mode 100644
index 00000000..94612747
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a3f74b3d329a24e81a6c6f9f1d2f46f1
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1
new file mode 100644
index 00000000..8721bf36
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1
@@ -0,0 +1 @@
+f30d09407a5b0e439bfc0e54e33f3a34f7c7d35c
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1.meta
new file mode 100644
index 00000000..df944c49
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e1a3ff77f802d43818521ff3db2bf944
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar
new file mode 100644
index 00000000..1ebd5a13
Binary files /dev/null and b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar differ
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5
new file mode 100644
index 00000000..f7df30ce
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5
@@ -0,0 +1 @@
+040097cf545e84135c0e4d783e3b1143
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5.meta
new file mode 100644
index 00000000..ee2f55dd
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 79f9d122dd99b483282294f3b1f1bd36
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.meta
new file mode 100644
index 00000000..4ae20ba3
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6eab7a3cbdbf34cffaf951dc9210a32c
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1
new file mode 100644
index 00000000..db669bff
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1
@@ -0,0 +1 @@
+632874f93336b4f05e15f55b63656dace924fa72
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1.meta
new file mode 100644
index 00000000..124743a3
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d508eb0e16bb14c8a962b343e755ef01
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml
new file mode 100644
index 00000000..c3049afe
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml
@@ -0,0 +1,12 @@
+
+
+ com.google.signin
+ google-signin-support
+
+ 1.0.4
+
+ 1.0.4
+
+ 20180920010048
+
+
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5
new file mode 100644
index 00000000..77f39ed2
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5
@@ -0,0 +1 @@
+e243363a85b4f7bd1170918ba674061b
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5.meta
new file mode 100644
index 00000000..49e3156c
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c020582c1a85d47c7934908f00a0bd37
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.meta
new file mode 100644
index 00000000..1236df6d
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f3911d467587242978192a8723c68395
+labels:
+- gvh
+- gvh_version-1.0.4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1
new file mode 100644
index 00000000..e1c0999f
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+43ebede449c3782df517a7156c18c28cde4fd4f4
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1.meta
new file mode 100644
index 00000000..63dc4be7
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 16b8065a143bb4277af08381a56157dd
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Future.cs b/Assets/GoogleSignIn/Future.cs
new file mode 100644
index 00000000..df469423
--- /dev/null
+++ b/Assets/GoogleSignIn/Future.cs
@@ -0,0 +1,84 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+namespace Google {
+ using System.Collections;
+ using System.Threading.Tasks;
+ using UnityEngine;
+
+ ///
+ /// Interface for implementations of the Future API.
+ ///
+ internal interface FutureAPIImpl {
+ bool Pending { get; }
+ GoogleSignInStatusCode Status { get; }
+ T Result { get; }
+ }
+
+ ///
+ /// Future return value.
+ ///
+ /// This class provides a promise of a result from a method call.
+ /// The typical usage is to check the Pending property until it is false.
+ /// At this time either the Status or Result will be available for use.
+ /// Result is only set if the operation was successful.
+ /// As a convience, a coroutine to complete a Task is provided.
+ ///
+ public class Future {
+
+ private FutureAPIImpl apiImpl;
+
+ internal Future(FutureAPIImpl impl) {
+ apiImpl = impl;
+ }
+
+ ///
+ /// Gets a value indicating whether this
+ /// is pending.
+ ///
+ /// true if pending; otherwise, false.
+ public bool Pending { get { return apiImpl.Pending; } }
+
+ ///
+ /// Gets the status.
+ ///
+ /// The status is set when Pending == false.
+ GoogleSignInStatusCode Status { get { return apiImpl.Status; } }
+
+ ///
+ /// Gets the result.
+ ///
+ /// The result is set when Pending == false and there is no error.
+ ///
+ T Result { get { return apiImpl.Result; } }
+
+ ///
+ /// Waits for result then completes the TaskCompleationSource.
+ ///
+ /// The for result.
+ /// Tcs.
+ internal IEnumerator WaitForResult(TaskCompletionSource tcs) {
+ yield return new WaitUntil(() => !Pending);
+ if (Status == GoogleSignInStatusCode.Canceled) {
+ tcs.SetCanceled();
+ } else if (Status == GoogleSignInStatusCode.Success ||
+ Status == GoogleSignInStatusCode.SuccessCached) {
+ tcs.SetResult(Result);
+ } else {
+ tcs.SetException(new GoogleSignIn.SignInException(Status));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Future.cs.meta b/Assets/GoogleSignIn/Future.cs.meta
new file mode 100644
index 00000000..75a7f224
--- /dev/null
+++ b/Assets/GoogleSignIn/Future.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: ad3b09fb652fb4ff0a68d1966f13160e
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/GoogleSignIn.cs b/Assets/GoogleSignIn/GoogleSignIn.cs
new file mode 100644
index 00000000..c59ced72
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignIn.cs
@@ -0,0 +1,202 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace Google {
+ using System;
+ using System.Runtime.Serialization;
+ using System.Threading.Tasks;
+ using Google.Impl;
+ using UnityEngine;
+
+ ///
+ /// Google sign in API.
+ ///
+ /// This class implements the GoogleSignInAPI for Unity.
+ /// Typical usage is to set the Configuration options as needed, then
+ /// get the DefaultInstance and call signIn or signInSilently. See
+ /// the
+ /// Google Sign-In API documentation for more details.
+ ///
+ ///
+ /// private static readonly GoogleSignInConfiguration configuration =
+ /// new GoogleSignInConfiguration {
+ /// WebClientId = "",
+ /// RequestIdToken = true
+ /// };
+ ///
+ /// public void OnSignIn() {
+ /// GoogleSignIn.Configuration = configuration;
+ /// GoogleSignIn.Configuration.UseGameSignIn = false;
+ /// GoogleSignIn.Configuration.RequestIdToken = true;
+ /// GoogleSignIn.DefaultInstance.SignIn().ContinueWith(
+ /// OnAuthenticationFinished);
+ /// }
+ ///
+ ///
+ ///
+ public class GoogleSignIn {
+
+#if !UNITY_ANDROID && !UNITY_IOS
+ static GoogleSignIn() {
+ Debug.LogError("This platform is not supported");
+ }
+#endif
+
+ private static GoogleSignIn theInstance = null;
+ private static GoogleSignInConfiguration theConfiguration = null;
+ private ISignInImpl impl;
+
+ /// The configuration settings for Google Sign-in.
+ /// The configuration should be set before calling the sign-in
+ /// methods. Once the configuration is set it cannot be changed.
+ ///
+ public static GoogleSignInConfiguration Configuration {
+ set {
+ // Can set the configuration until the singleton is created.
+ if (theInstance == null || theConfiguration == value || theConfiguration == null) {
+ theConfiguration = value;
+ } else {
+ throw new SignInException(GoogleSignInStatusCode.DeveloperError,
+ "DefaultInstance already created. " +
+ " Cannot change configuration after creation.");
+ }
+ }
+
+ get {
+ return theConfiguration;
+ }
+ }
+
+ ///
+ /// Singleton instance of this class.
+ ///
+ /// The instance.
+ public static GoogleSignIn DefaultInstance {
+ get {
+ if (theInstance == null) {
+#if UNITY_ANDROID || UNITY_IOS
+ theInstance = new GoogleSignIn(new GoogleSignInImpl(Configuration));
+#else
+ theInstance = new GoogleSignIn(null);
+ throw new SignInException(
+ GoogleSignInStatusCode.DeveloperError,
+ "This platform is not supported by GoogleSignIn");
+#endif
+ }
+ return theInstance;
+ }
+ }
+
+ internal GoogleSignIn(GoogleSignInImpl impl) {
+ this.impl = impl;
+ }
+
+ public void EnableDebugLogging(bool flag) {
+ impl.EnableDebugLogging(flag);
+ }
+
+ /// Starts the authentication process.
+ ///
+ /// The authenication process is started and may display account picker
+ /// popups and consent prompts based on the state of authentication and
+ /// the requested elements.
+ ///
+ public Task SignIn() {
+ var tcs = new TaskCompletionSource();
+ SignInHelperObject.Instance.StartCoroutine(
+ impl.SignIn().WaitForResult(tcs));
+ return tcs.Task;
+ }
+
+ /// Starts the silent authentication process.
+ ///
+ /// The authenication process is started and will attempt to sign in without
+ /// displaying any UI. If this cannot be done, the developer should call
+ /// SignIn().
+ ///
+ public Task SignInSilently() {
+ var tcs = new TaskCompletionSource();
+ SignInHelperObject.Instance.StartCoroutine(
+ impl.SignInSilently().WaitForResult(tcs));
+ return tcs.Task;
+ }
+
+ ///
+ /// Signs out the User.
+ ///
+ /// Future sign-in attempts will require the user to select the
+ /// account to use when signing in.
+ ///
+ public void SignOut() {
+ theConfiguration = null;
+ impl.SignOut();
+ }
+
+ ///
+ /// Disconnect this instance.
+ ///
+ /// When the user is disconnected, it revokes all access that may
+ /// have been granted to this application. This includes any server side
+ /// access tokens derived from server auth codes. As a result, future
+ /// sign-in attempts will require the user to re-consent to the requested
+ /// scopes.
+ ///
+ public void Disconnect() {
+ impl.Disconnect();
+ }
+
+ ///
+ /// Sign in exception. This is a checked exception for handling specific
+ /// errors during the sign-in process.
+ ///
+ [Serializable]
+ public class SignInException : Exception {
+ internal SignInException(GoogleSignInStatusCode status) {
+ Status = status;
+ }
+
+ public SignInException(GoogleSignInStatusCode status, string message) :
+ base(message) {
+ Status = status;
+ }
+
+ public SignInException(GoogleSignInStatusCode status, string message,
+ Exception innerException) : base(message, innerException) {
+ Status = status;
+ }
+
+ protected SignInException(GoogleSignInStatusCode status,
+ SerializationInfo info,
+ StreamingContext context) :
+ base(info, context) {
+ Status = status;
+ }
+
+ public GoogleSignInStatusCode Status {
+ get;
+ internal set;
+ }
+ }
+ }
+
+ internal interface ISignInImpl {
+ Future SignIn();
+ Future SignInSilently();
+ void EnableDebugLogging(bool flag);
+ void SignOut();
+ void Disconnect();
+ }
+} // namespace Google
diff --git a/Assets/GoogleSignIn/GoogleSignIn.cs.meta b/Assets/GoogleSignIn/GoogleSignIn.cs.meta
new file mode 100644
index 00000000..31609ffd
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignIn.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 138b984208e394be797ce8905a44fd54
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/GoogleSignInConfiguration.cs b/Assets/GoogleSignIn/GoogleSignInConfiguration.cs
new file mode 100644
index 00000000..d914c68d
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInConfiguration.cs
@@ -0,0 +1,63 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace Google {
+ using System.Collections.Generic;
+
+ ///
+ /// Configuration properties for Google Sign-In.
+ ///
+ public class GoogleSignInConfiguration {
+ /// Set to true to use games signin, false for default signin.
+ ///
+ /// Note: The Games configuration is not supported on non-Android
+ /// platforms.
+ /// If games configuration is used, you must also add the
+ /// play-services-games libraries and dependencies.
+ /// See the README for more details.
+ ///
+ public bool UseGameSignIn = false;
+ /// Web client id associated with this app.
+ /// Required for requesting auth code or id token.
+ public string WebClientId = null;
+ /// Set to true for getting an auth code when authenticating.
+ ///
+ public bool RequestAuthCode = false;
+ /// Set to true to request to reset the refresh token.
+ /// Causes re-consent.
+ ///
+ public bool ForceTokenRefresh = false;
+ /// Request email address, requires consent.
+ public bool RequestEmail = false;
+ /// Request id token, requires consent.
+ public bool RequestIdToken = false;
+ /// Request profile information, requires consent.
+ public bool RequestProfile = false;
+ /// Hides popup UIs from games services.
+ /// Used with games signin to show or hide the connecting popup UI
+ /// and to associate an invisible view for other popups. This is
+ /// recommended for VR applications. This has no effect if UseGameSignIn is
+ /// false.
+ ///
+ public bool HidePopups = false;
+ /// Account name to use when authenticating,
+ /// null indicates use default.
+ public string AccountName = null;
+ /// Additional scopes to request, requires consent.
+ public IEnumerable AdditionalScopes = null;
+ }
+}
+
diff --git a/Assets/GoogleSignIn/GoogleSignInConfiguration.cs.meta b/Assets/GoogleSignIn/GoogleSignInConfiguration.cs.meta
new file mode 100644
index 00000000..943644cc
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInConfiguration.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 0c3999c0f68f04ae08f04fb3bf2a2050
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/GoogleSignInStatusCode.cs b/Assets/GoogleSignIn/GoogleSignInStatusCode.cs
new file mode 100644
index 00000000..0719f2c2
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInStatusCode.cs
@@ -0,0 +1,72 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace Google {
+
+ ///
+ /// Status code for the SignIn operations.
+ ///
+ /// All successful status codes are less than or equal to 0.
+ ///
+ public enum GoogleSignInStatusCode {
+ /// The operation was successful, but used the device's cache.
+ ///
+ SuccessCached = -1,
+
+ /// The operation was successful.
+ Success = 0,
+
+ /// The client attempted to call a method from an API that
+ /// failed to connect.
+ ApiNotConnected = 1,
+
+ /// The result was canceled either due to client disconnect
+ /// or cancel().
+ Canceled = 2,
+
+ /// A blocking call was interrupted while waiting and did not
+ /// run to completion.
+ Interrupted = 3,
+
+ /// The client attempted to connect to the service with an
+ /// invalid account name specified.
+ InvalidAccount = 4,
+
+ /// Timed out while awaiting the result.
+ Timeout = 5,
+
+ /// The application is misconfigured.
+ /// This error is not recoverable.
+ ///
+ /// The developer should look at the logs after this to determine
+ /// more actionable information.
+ ///
+ DeveloperError = 6,
+
+ /// An internal error occurred. Retrying should resolve the
+ /// problem.
+ InternalError = 7,
+
+ /// A network error occurred. Retrying should resolve the problem.
+ ///
+ NetworkError = 8,
+
+ /// The operation failed with no more detailed information.
+ ///
+ Error = 9,
+ }
+} // namespace GoogleSignIn
+
diff --git a/Assets/GoogleSignIn/GoogleSignInStatusCode.cs.meta b/Assets/GoogleSignIn/GoogleSignInStatusCode.cs.meta
new file mode 100644
index 00000000..238e45f5
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInStatusCode.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 077933fcaedac412d9762bf3e0a3be68
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/GoogleSignInUser.cs b/Assets/GoogleSignIn/GoogleSignInUser.cs
new file mode 100644
index 00000000..a3ea8b3f
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInUser.cs
@@ -0,0 +1,76 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace Google {
+ using System;
+
+ /// Information for the authenticated user.
+ public class GoogleSignInUser {
+
+ /// Server AuthCode to be exchanged for an auth token.
+ /// null if not requested, or if there was an error.
+ public string AuthCode {
+ get;
+ internal set;
+ }
+
+ /// Email address.
+ /// null if not requested, or if there was an error.
+ public string Email {
+ get;
+ internal set;
+ }
+
+ /// Id token.
+ /// null if not requested, or if there was an error.
+ public string IdToken {
+ get;
+ internal set;
+ }
+
+ /// Display Name.
+ public string DisplayName {
+ get;
+ internal set;
+ }
+
+ /// Given Name.
+ public string GivenName {
+ get;
+ internal set;
+ }
+
+ /// Family Name.
+ public string FamilyName {
+ get;
+ internal set;
+ }
+
+ /// Profile photo
+ /// Can be null if the profile is not requested,
+ /// or none set.
+ public Uri ImageUrl {
+ get;
+ internal set;
+ }
+
+ /// User ID
+ public string UserId {
+ get;
+ internal set;
+ }
+ }
+}
diff --git a/Assets/GoogleSignIn/GoogleSignInUser.cs.meta b/Assets/GoogleSignIn/GoogleSignInUser.cs.meta
new file mode 100644
index 00000000..587c6861
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInUser.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: c56b92217d0144af5907627d1235e0a5
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Impl.meta b/Assets/GoogleSignIn/Impl.meta
new file mode 100644
index 00000000..de5f17f2
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 2fbe4f3ec9db4415e849f9bb89e63a92
+folderAsset: yes
+timeCreated: 1502761839
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Impl/BaseObject.cs b/Assets/GoogleSignIn/Impl/BaseObject.cs
new file mode 100644
index 00000000..44d65013
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/BaseObject.cs
@@ -0,0 +1,70 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace Google.Impl {
+ using System;
+ using System.Runtime.InteropServices;
+ using System.Text;
+ using UnityEngine;
+
+ ///
+ /// Base object manages the pointer to a native object which provides the
+ /// implementation of a C# object.
+ ///
+ internal abstract class BaseObject : IDisposable {
+ // handle to native object.
+ private HandleRef selfHandleRef;
+ private static HandleRef nullSelf = new HandleRef();
+
+ public BaseObject(IntPtr intPtr) {
+ selfHandleRef = new HandleRef(this, intPtr);
+ }
+
+ protected HandleRef SelfPtr() {
+ if (selfHandleRef.Equals(nullSelf)) {
+ throw new InvalidOperationException(
+ "Attempted to use object after it was cleaned up");
+ }
+ return selfHandleRef;
+ }
+
+ public virtual void Dispose() {
+ selfHandleRef = nullSelf;
+ }
+
+ internal delegate UIntPtr OutStringMethod([In, Out] byte[] out_bytes,
+ UIntPtr out_size);
+
+ internal static String OutParamsToString(OutStringMethod outStringMethod) {
+ UIntPtr requiredSize = outStringMethod(null, UIntPtr.Zero);
+ if (requiredSize.Equals(UIntPtr.Zero)) {
+ return null;
+ }
+
+ string str = null;
+ try {
+ byte[] array = new byte[requiredSize.ToUInt32()];
+ outStringMethod(array, requiredSize);
+ str = Encoding.UTF8.GetString(array, 0,
+ (int)requiredSize.ToUInt32() - 1);
+ } catch (Exception e) {
+ Debug.LogError("Exception creating string from char array: " + e);
+ str = string.Empty;
+ }
+ return str;
+ }
+ }
+}
diff --git a/Assets/GoogleSignIn/Impl/BaseObject.cs.meta b/Assets/GoogleSignIn/Impl/BaseObject.cs.meta
new file mode 100644
index 00000000..0e24225d
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/BaseObject.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: fe250cda690a44cb08f8f7d26c9723b4
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs b/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs
new file mode 100644
index 00000000..78c8081f
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs
@@ -0,0 +1,187 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace Google.Impl {
+ using System;
+ using System.Collections.Generic;
+ using System.Runtime.InteropServices;
+
+ internal class GoogleSignInImpl : BaseObject, ISignInImpl {
+
+#if UNITY_ANDROID
+ private const string DllName = "native-googlesignin";
+#else
+ private const string DllName = "__Internal";
+#endif
+
+ internal GoogleSignInImpl(GoogleSignInConfiguration configuration)
+ : base(GoogleSignIn_Create(GetPlayerActivity())) {
+
+ if (configuration != null) {
+ List scopes = new List();
+ if (configuration.AdditionalScopes != null) {
+ scopes.AddRange(configuration.AdditionalScopes);
+ }
+ GoogleSignIn_Configure(SelfPtr(), configuration.UseGameSignIn,
+ configuration.WebClientId,
+ configuration.RequestAuthCode,
+ configuration.ForceTokenRefresh,
+ configuration.RequestEmail,
+ configuration.RequestIdToken,
+ configuration.HidePopups,
+ scopes.ToArray(),
+ scopes.Count,
+ configuration.AccountName);
+ }
+ }
+
+ /// Enables/Disables verbose logging to help troubleshooting
+ public void EnableDebugLogging(bool flag) {
+ GoogleSignIn_EnableDebugLogging(SelfPtr(), flag);
+ }
+
+ ///
+ /// Starts the authentication process.
+ ///
+ ///
+ /// The authenication process is started and may display account picker
+ /// popups and consent prompts based on the state of authentication and
+ /// the requested elements.
+ ///
+ public Future SignIn() {
+ IntPtr nativeFuture = GoogleSignIn_SignIn(SelfPtr());
+ return new Future(new NativeFuture(nativeFuture));
+ }
+
+ ///
+ /// Starts the authentication process.
+ ///
+ ///
+ /// The authenication process is started and may display account picker
+ /// popups and consent prompts based on the state of authentication and
+ /// the requested elements.
+ ///
+ public Future SignInSilently() {
+ IntPtr nativeFuture = GoogleSignIn_SignInSilently(SelfPtr());
+ return new Future(new NativeFuture(nativeFuture));
+ }
+
+ ///
+ /// Signs out the User.
+ ///
+ public void SignOut() {
+ GoogleSignIn_Signout(SelfPtr());
+ }
+
+ ///
+ /// Disconnects the user from the application and revokes all consent.
+ ///
+ public void Disconnect() {
+ GoogleSignIn_Disconnect(SelfPtr());
+ }
+
+ ///
+ /// Creates an instance of the native Google Sign-In implementation.
+ ///
+ ///
+ /// For Android this must be the JNI raw object for the parentActivity.
+ /// For iOS it is ignored.
+ ///
+ /// The pointer to the instance.
+ /// Data used in creating the instance.
+ [DllImport(DllName)]
+ static extern IntPtr GoogleSignIn_Create(IntPtr data);
+
+ [DllImport(DllName)]
+ static extern void GoogleSignIn_EnableDebugLogging(HandleRef self, bool flag);
+
+ [DllImport(DllName)]
+ static extern bool GoogleSignIn_Configure(HandleRef self,
+ bool useGameSignIn, string webClientId,
+ bool requestAuthCode, bool forceTokenRefresh, bool requestEmail,
+ bool requestIdToken, bool hidePopups, string[] additionalScopes,
+ int scopeCount, string accountName);
+
+ [DllImport(DllName)]
+ static extern IntPtr GoogleSignIn_SignIn(HandleRef self);
+
+ [DllImport(DllName)]
+ static extern IntPtr GoogleSignIn_SignInSilently(HandleRef self);
+
+ [DllImport(DllName)]
+ static extern void GoogleSignIn_Signout(HandleRef self);
+
+ [DllImport(DllName)]
+ static extern void GoogleSignIn_Disconnect(HandleRef self);
+
+ [DllImport(DllName)]
+ internal static extern void GoogleSignIn_DisposeFuture(HandleRef self);
+
+ [DllImport(DllName)]
+ internal static extern bool GoogleSignIn_Pending(HandleRef self);
+
+ [DllImport(DllName)]
+ internal static extern IntPtr GoogleSignIn_Result(HandleRef self);
+
+ [DllImport(DllName)]
+ internal static extern int GoogleSignIn_Status(HandleRef self);
+
+ [DllImport(DllName)]
+ internal static extern UIntPtr GoogleSignIn_GetServerAuthCode(
+ HandleRef self, [In, Out] byte[] bytes, UIntPtr len);
+
+ [DllImport(DllName)]
+ internal static extern UIntPtr GoogleSignIn_GetDisplayName(HandleRef self,
+ [In, Out] byte[] bytes, UIntPtr len);
+
+ [DllImport(DllName)]
+ internal static extern UIntPtr GoogleSignIn_GetEmail(HandleRef self,
+ [In, Out] byte[] bytes, UIntPtr len);
+
+ [DllImport(DllName)]
+ internal static extern UIntPtr GoogleSignIn_GetFamilyName(HandleRef self,
+ [In, Out] byte[] bytes, UIntPtr len);
+
+ [DllImport(DllName)]
+ internal static extern UIntPtr GoogleSignIn_GetGivenName(HandleRef self,
+ [In, Out] byte[] bytes, UIntPtr len);
+
+ [DllImport(DllName)]
+ internal static extern UIntPtr GoogleSignIn_GetIdToken(HandleRef self,
+ [In, Out] byte[] bytes, UIntPtr len);
+
+ [DllImport(DllName)]
+ internal static extern UIntPtr GoogleSignIn_GetImageUrl(HandleRef self,
+ [In, Out] byte[] bytes, UIntPtr len);
+
+ [DllImport(DllName)]
+ internal static extern UIntPtr GoogleSignIn_GetUserId(HandleRef self,
+ [In, Out] byte[] bytes, UIntPtr len);
+
+ // Gets the Unity player activity.
+ // For iOS, this returns Zero.
+ private static IntPtr GetPlayerActivity() {
+#if UNITY_ANDROID
+ UnityEngine.AndroidJavaClass jc = new UnityEngine.AndroidJavaClass(
+ "com.unity3d.player.UnityPlayer");
+ return jc.GetStatic("currentActivity")
+ .GetRawObject();
+#else
+ return IntPtr.Zero;
+#endif
+ }
+ }
+}
diff --git a/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs.meta b/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs.meta
new file mode 100644
index 00000000..46c1d561
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 9ae1f008f9f994b9c96c1a14067d7b48
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Impl/NativeFuture.cs b/Assets/GoogleSignIn/Impl/NativeFuture.cs
new file mode 100644
index 00000000..6d460f22
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/NativeFuture.cs
@@ -0,0 +1,102 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace Google.Impl {
+ using System;
+ using System.Runtime.InteropServices;
+
+ ///
+ /// Native future is an interal class that implements the FutureAPIImpl
+ /// by calling native methods which are implemented in the native code.
+ ///
+ internal class NativeFuture : BaseObject, FutureAPIImpl {
+
+ internal NativeFuture(IntPtr ptr) : base(ptr) {
+ }
+
+ public override void Dispose() {
+ GoogleSignInImpl.GoogleSignIn_DisposeFuture(SelfPtr());
+ base.Dispose();
+ }
+
+ public bool Pending {
+ get {
+ return GoogleSignInImpl.GoogleSignIn_Pending(SelfPtr());
+ }
+ }
+
+ public GoogleSignInUser Result {
+ get {
+ IntPtr ptr = GoogleSignInImpl.GoogleSignIn_Result(SelfPtr());
+ if (ptr != IntPtr.Zero) {
+ GoogleSignInUser user = new GoogleSignInUser();
+ HandleRef userPtr = new HandleRef(user, ptr);
+
+ user.DisplayName = OutParamsToString((out_string, out_size) =>
+ GoogleSignInImpl.GoogleSignIn_GetDisplayName(userPtr,
+ out_string,
+ out_size));
+ user.Email = OutParamsToString((out_string, out_size) =>
+ GoogleSignInImpl.GoogleSignIn_GetEmail(userPtr, out_string,
+ out_size));
+
+ user.FamilyName = OutParamsToString((out_string, out_size) =>
+ GoogleSignInImpl.GoogleSignIn_GetFamilyName(userPtr, out_string,
+ out_size));
+
+ user.GivenName = OutParamsToString((out_string, out_size) =>
+ GoogleSignInImpl.GoogleSignIn_GetGivenName(userPtr, out_string,
+ out_size));
+
+ user.IdToken = OutParamsToString((out_string, out_size) =>
+ GoogleSignInImpl.GoogleSignIn_GetIdToken(userPtr, out_string,
+ out_size));
+
+ user.AuthCode = OutParamsToString((out_string, out_size) =>
+ GoogleSignInImpl.GoogleSignIn_GetServerAuthCode(userPtr, out_string,
+ out_size));
+
+ string url = OutParamsToString((out_string, out_size) =>
+ GoogleSignInImpl.GoogleSignIn_GetImageUrl(userPtr, out_string,
+ out_size));
+ if (url.Length > 0) {
+ user.ImageUrl = new System.Uri(url);
+ }
+
+ user.UserId = OutParamsToString((out_string, out_size) =>
+ GoogleSignInImpl.GoogleSignIn_GetUserId(userPtr, out_string,
+ out_size));
+ return user;
+ } else {
+ return null;
+ }
+ }
+ }
+
+ ///
+ /// Gets the status.
+ ///
+ /// The platform specific implementation maps the platform specific
+ /// code to one defined in GoogleSignStatusCode.
+ /// The status.
+ public GoogleSignInStatusCode Status {
+ get {
+ return (GoogleSignInStatusCode)GoogleSignInImpl.GoogleSignIn_Status(
+ SelfPtr());
+ }
+ }
+ }
+}
diff --git a/Assets/GoogleSignIn/Impl/NativeFuture.cs.meta b/Assets/GoogleSignIn/Impl/NativeFuture.cs.meta
new file mode 100644
index 00000000..0cb0bd1b
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/NativeFuture.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 5f1aae79b1ca4432d9d8ec382c54bf46
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleSignIn/Impl/SignInHelperObject.cs b/Assets/GoogleSignIn/Impl/SignInHelperObject.cs
new file mode 100644
index 00000000..6fbf3fe0
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/SignInHelperObject.cs
@@ -0,0 +1,42 @@
+//
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+namespace Google.Impl {
+ using UnityEngine;
+
+ ///Helper object to connect the Sign-in API to the Unity Game Scene.
+ ///
+ ///This class is added to the scene so that the Google Sign-in API
+ /// can start coroutines.
+ ///
+ public class SignInHelperObject : MonoBehaviour {
+
+ private static SignInHelperObject instance;
+
+ internal static SignInHelperObject Instance {
+ get {
+ if (Application.isPlaying) {
+ // add an invisible game object to the scene
+ GameObject obj = new GameObject("GoogleSignInHelperObject");
+ DontDestroyOnLoad(obj);
+ instance = obj.AddComponent();
+ } else {
+ instance = new SignInHelperObject();
+ }
+ return instance;
+ }
+ }
+ }
+}
diff --git a/Assets/GoogleSignIn/Impl/SignInHelperObject.cs.meta b/Assets/GoogleSignIn/Impl/SignInHelperObject.cs.meta
new file mode 100644
index 00000000..2dd5652c
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/SignInHelperObject.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: ad98e5b48888e44eb81dd5884d3a1754
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: