# 谷歌登入
<!-- 頁首通用模組 -->
{%hackmd xcsnQTMQQ0SZQ9QF7YUp_g %}
---

[TOC]
---
> ~~***I never try it.***~~
> ~~***I am trying it.***~~
> ~~***I do not want to try it again.***~~
> ~~***FUCK UNITY.***~~
> [name=Mibudin]
---
## Google Sign-In in Unity
### Preparation Note *(Imagined)*
#### Unity Settings
- ***Package Name***
- Following the **[Java Package Naming Specification](https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html)**.
- *Setting Path*:
`Edit > Project Settings > Palyer > <Platform> > Other Settings > Identification > Package Name`
- ***Project Keystore***
- A **custom keystore** or a **debug keystore** *(in default)*.
- *Setting Path*:
`Edit > Project Settings > Palyer > <Platform> > Publishing Settings > Project Keystore`
#### Google Cloud Platform Project
- ***GCP Project***
> Following [this](https://developers.google.com/identity/sign-in/android/start) and [this](https://developers.google.com/identity/sign-in/ios/start).
- ***Project Generation Guide***
- It MAY be easier and less difficulties to follow the tutorials of the official websites step-by-step.
- For [**Android**](https://developers.google.com/identity/sign-in/android/start) / [**iOS**](https://developers.google.com/identity/sign-in/ios/start)
- ***Platforms***
- For each platform *(**Android** / **iOS**)*, the client IDs corresponding to them should be generated respectively.
- ***Package Name***
- The ***Package Name*** set in Unity.
- ***SHA-1 Signing Certificate***
- Generate **SHA-1** of the ***Project Keystore***.
**General Generation**:
> Following [this](https://docs.oracle.com/javase/9/tools/keytool.htm), [this](https://developers.google.com/android/guides/client-auth), [this](https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/keytoolDocs/supportedkeystoretypes.html), and [this](https://stackoverflow.com/questions/8576732/there-is-no-debug-keystore-in-android-folder).
- The **Keytool** to be used
- `<JDK> > bin > keytool.exe`
- Already in the environment paths generally.
- The **Command** to be run
```shell
keytool -list -v -alias <your-key-name> -keystore <path-to-production-keystore>
```
- The **Custom Keystore**
- `-alias <?>`: The alias of the keystore.
- `-keystore <?>`: The path of the keystore.
- The **Debug Keystore** *(defaultly)*
- `-alias <?>`: `androiddebugkey`
- `-keystore <?>`:
- *Mac/Linux*: `~/.android/debug.keystore`
- *Windows*: `%USERPROFILE%\.android\debug.keystore`
- Others
- `-list`: List entries *(showing more informations)*.
- `-v`: Target verbose output.
- Exception
- **[`Keystore file does not exist`](https://stackoverflow.com/questions/8576732/there-is-no-debug-keystore-in-android-folder)**:
- This exception occurs if the default debug keystore does not exist there *(**never generated**)*.
- You can run other associated program, software, or application to let them generate this file automatically.
- Or **generate one manually**:
```shell
keytool -genkey -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore -storepass android -keypass android -dname "C=US,O=Android,CN=Android Debug" -storetype PKCS12 -keyalg RSA -keysize 2048 -sigalg SHA1WithRSA -validity 10950
```
- `-genkey`: Generate a key pair.
- `-v`: Target verbose output.
- `-alias <?>`: The alias of the keystore.
*Default*: `androiddebugkey`
- `-keystore <?>`: The path of the keystore.
*Default*:
- *Mac/Linux*: `~/.android/debug.keystore`
- *Windows*: `%USERPROFILE%\.android\debug.keystore`
- `-storepass <?>`: The store password of a keystore.
*Default*: `android`
- `-keypass <?>`: The key password of an entry.
*Default*: `android`
- `-dname <?>`: The distinguished name.
*Default*: `"C=US,O=Android,CN=Android Debug"`
- `-storetype <?>`: The keystore type.
*Default*: `PKCS12`
- `-keyalg <?>`: The key algorithm name.
*Default*: `RSA`
- `-keysize <?>`: The key bit size.
*Default*: `2048`
- `-sigalg <?>`: The signature algorithm name.
*Default*: `SHA1WithRSA`
- `-validity <?>`: The validity number of days.
*Default*: `10950` (30 common years)
- Or WHY NOT **create a custom keystore** in Unity.
#### Google Sign-In Unity Plugin
- ***Plugins***
> Following [this](https://medium.com/@capcomin/unity3d-google-signin-for-android-ios-games-fd59e4b6f027).
- There are (maybe) two plugins to be needed
- **Play Services Resolver for Unity**
*(External Dependency Manager for Unity (EDM4U))*
- Hereinafter called the **pre-plugin**.
- *(MAYBE already in default Unity which installed all Android associated modules. Or...)*
- **Google Sign-In Unity Plugin**
- Hereinafter called the **plugin**.
- The **pre-plugin** file from [here](https://github.com/googlesamples/unity-jar-resolver).
- *(Download the Unity Package file in the root path of the source code.)*
- The **plugin** and sample releases from [here](https://github.com/googlesamples/google-signin-unity).
- *(Download the releases.)*
- ***Import Process***
> Following [this](https://medium.com/@capcomin/unity3d-google-signin-for-android-ios-games-fd59e4b6f027).
- *(If needed,)* Install the **Android Build Support**, **Android SDK & NDK Tools**, and **OpenJDK** modules of the Unity.
- *(If needed,)* Remember to check whether **the paths to these modules or tools** pointed to the correct places where these internal or external things should be.
- *Setting Path*:
`Edit > Preferences > External Tools > Android > ...`
- *(If needed(?),)* Switch the platform of Unity to **Android**.
- *(If needed,)* Remove **TextMesh Pro**.
- *(If needed to handle some weird exceptions; Or if this plugin is needed, it is a good attempt not to remove it.)*
- *(If needed(?),)* Import the **pre-plugin**.
- Import the **plugin** EXCEPT `./Parse/`.
- *(If needed,)* Handle the exception of duplicated files **`Google.VersionHandler.dll`**
- *(It MAY be better to delete the duplicated file in **plugin**)*.
- Synchronize the **gradle files** in the project.
- *Command Path*:
`Assets > Play Services Resolver > Android Resolver > Resolve`
and then
`Assets > Play Services Resolver > Android Resolver > Force Resolve`
- *Command Path*: *(alternative sometimes due to different versions maybe)*
`Assets > External Dependency Manager > Android Resolver > Resolve`
and then
`Assets > External Dependency Manager > Android Resolver > Force Resolve`
- *(If needed,)* Import the **sample scene**.
- ***Web Client ID***
- The Web Client ID provided by ***GCP Project***.
- This ID is needed to apply the main features of this **plugin**.
- ***USE IT***
- Try to follow the provided **sample scene**.
- It seems that there is no such an official document to this plugin. Maybe the **source codes** of the plugin and the **sample** help.
- Or visit the official **[Google Sing-In](https://developers.google.com/identity/sign-in/web/sign-in)** website to understand the basic conceptions, maybe useful *(or not)*.
### Implement Note
***[秘](https://hackmd.io/8WnQ1K-FQYScCfvMtnFKOg)***