Unity 接入GooglePlay 登录,登出,获取ID Token

时间:2024-03-14 19:13:44

Unity 接入GooglePlay 登录,登出,获取ID Token

1.前言:
a.关于Unity接入GooglePlay的前期准备工作这里就不在详细说了,准备能和谐上网的电脑和带有Google 框架的手机以便测试。
b.Unity版本:Unity2018.2.9f1 配置JDK/Android SDK/Android NDK环境
这里可以直接下载Android Studio 配置Android SDK,他们都可以在Unity Preference里进行下载。
Unity 接入GooglePlay 登录,登出,获取ID Token

c.确保Android SDK 里带有正确的环境:
Android Studio ->Tools->Android->SDK Manager
①:Android SDK Platform 选择API Level 23及以上
Unity 接入GooglePlay 登录,登出,获取ID Token

②:SDK Tools 带有以下工具:
Android Support Repository
Google Play Services
GoogleRepository
Unity 接入GooglePlay 登录,登出,获取ID Token

③:为你的Unity项目创建一个keystore,并且在Unity里使用。具体创建方法请搜索。
Unity 接入GooglePlay 登录,登出,获取ID Token
④:为你的工程设置Company Name/Product Name/Package Name等信息。。

⑤:在BuildSetting->PlayerSetting里将Package Name\keystore等信息设置完成后,选择Build,先出一个包备用,后续步骤里将上传到Google Play Console后台的第一个包,用来生成App Signing!!

2.Google Play 后台准备
a.登录Google Play Console 创建游戏和游戏服务,有点像apple 的iTunes Connect后台系统一样。
https://play.google.com/apps/publish
b.左边的选项条,选择所有应用 再到右上角选择创建应用
Unity 接入GooglePlay 登录,登出,获取ID Token
Unity 接入GooglePlay 登录,登出,获取ID Token
根据步骤依次填写内容:
Unity 接入GooglePlay 登录,登出,获取ID Token

这里的默认语言和后续输入的文字内容必须匹配,否则会被警告不能进行下一步操作。

继续输入内容,描述,类型等信息后保存草稿。这时在所有游戏内就会创建一个游戏草稿:
Unity 接入GooglePlay 登录,登出,获取ID Token

选择刚刚创建的游戏,进入内部:
选择右侧条目内的应用版本,这里可以创建Alpha/Beta Test版本,我这里创建一个Alpha测试版本:
Unity 接入GooglePlay 登录,登出,获取ID Token
这里特别注意的是一个Google Play 应用签名的东西:
Unity 接入GooglePlay 登录,登出,获取ID Token
特别注意:

选择继续后,上传的第一个包除了包内的keystore信息外还会另外生成一个全新的签名信息,以后所有的从Google Play下载的包使用的签名信息均被这个全新的签名替换。

选择继续后继续进行下一步:
Unity 接入GooglePlay 登录,登出,获取ID Token

选择浏览文件,将刚刚出的包上传到后台,作为第一个包生成一个新的签名文件信息。
特别注意的是:
包大小不能超过100M否则就要使用OBB分包等其他手段将apk文件压缩到100M以内。

上传完成后,选择右侧的应用签名,这里可以查看包内keystore的签名信息和Google Play 为你重新生成的新签名信息:
Unity 接入GooglePlay 登录,登出,获取ID Token

注意的是:

这里的上传证书的签名就是最初在Unity创建工程后生成的keystore签名文件的信息,应用签名证书就是Google Play为你重新生成的签名证书,所有从后台下载的APP将使用这个新的签名证书。

题外话:关于如何查看keystore文件的MD5,SHA-1,SHA-256等信息,这里可以使用JDK提供的keytool.exe工具。
keytool.exe使用C:\Program Files\Java\jdk1.8.0_131\jre\bin\keytool.exe
在此目录下打开命令行,输入以下命令:keytool -v -list -keystore E:\WorkSpace\Project\user.keystore 回车后再输入keystore的密码(不可见)。
即可得到以下输出:

Unity 接入GooglePlay 登录,登出,获取ID Token

回到正题
回到Google Play Console后台的最外层,选择游戏服务,为你的游戏创建新的服务:
Unity 接入GooglePlay 登录,登出,获取ID Token

选择添加新游戏:
Unity 接入GooglePlay 登录,登出,获取ID Token

选择游戏详情,将内容完善,完善的内容右侧的将会出现绿色的勾:
Unity 接入GooglePlay 登录,登出,获取ID Token

重点来了:
在游戏详情页签中,拉到最下面有该游戏服务相关联的API控制台服务,点击链接后即可跳转到APIs控制台服务页签:
链接:https://console.developers.google.com/apis/
选择左上侧的工程按钮,选择需要关联到API服务的工程:
Unity 接入GooglePlay 登录,登出,获取ID Token
选择凭据按钮:
Unity 接入GooglePlay 登录,登出,获取ID Token

选择创建凭据,在下拉菜单中选择OAuth 客户端ID 创建凭据 即便是 OAuth 2.0 Client ID:
Unity 接入GooglePlay 登录,登出,获取ID Token

Unity 接入GooglePlay 登录,登出,获取ID Token

1.选择Android应用,为你的游戏创建凭证,这里我创建了两个Android凭证和一个Web凭证,Android凭证需要输入Android Package Name,和证书的SHA-1指纹签名。
我将自己在Unity内创建的keystore的SHA-1指纹签名和上传到Goog Play Console后台后自动生成的签名文件的SHA-1指纹签名同时创建了两个凭证。
这两个凭证GoogPlay Services用来验证玩家登陆SDK的身份信息。

并且创建了一个Web应用,网页应用不需要输入Package Name 信息 只需要输入名字即可,这个Web凭证用来获取玩家登陆后的ID Token文件。这里应当特别注意,我在这里搞了很久发现验证成功后一直拉不到id token 仔细查看接入步骤才发现需要的是Web Certificate。
Unity 接入GooglePlay 登录,登出,获取ID Token

继续回到Google Play Console
选择关联应用->Android
Unity 接入GooglePlay 登录,登出,获取ID Token

配置完成,保存并继续,下一步就到了授权的时候了。
Unity 接入GooglePlay 登录,登出,获取ID Token
这里输入包内的签名文件的SHA-1指纹签名信息,确认后,该服务就被关联到某个游戏上了,该服务最多可以关联20个应用。
添加成就信息,这里可以先添加两个临时测试成就,生成配置资源:
Unity 接入GooglePlay 登录,登出,获取ID Token

点击获取资源(Get Resources):
Unity 接入GooglePlay 登录,登出,获取ID Token
拷贝这里的全部文件,回到Unity工程
Window->Google Play Games ->Set Up ->Android setup…
Unity 接入GooglePlay 登录,登出,获取ID Token

继续回到Google Play Console
在游戏服务里,选择你的应用,在最右侧选择测试:
添加你需要测试的玩家的Google 账号信息。
Unity 接入GooglePlay 登录,登出,获取ID Token

最后发布你的游戏服务!!
Unity 接入GooglePlay 登录,登出,获取ID Token

这里关于在Google Play Console 后台的配置 包括在 APIs Console 后台的配置就全部完成啦!!!

3.接入Google Play SDK

a.下载Google Play SDK for Unity
地址:https://github.com/playgameservices/play-games-plugin-for-unity
选择里面current-build内的最新包,导入Unity
其实,具体接入步骤都在里面,写的很详细。而且上面也已经把步骤根据图文的方式罗列出来了!

b.添加代码:
初始化函数内配置以下信息:

PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
            // enables saving game progress.
            ////.EnableSavedGames()
            // registers a callback to handle game invitations received while the game is not running.
            ////.WithInvitationDelegate(< callback method >)
            // registers a callback for turn based match notifications received while the
            // game is not running.
            ////.WithMatchDelegate(< callback method >)
            // requests the email address of the player be available.
            // Will bring up a prompt for consent.
            .RequestEmail()
            // requests a server auth code be generated so it can be passed to an
            //  associated back end server application and exchanged for an OAuth token.
            .RequestServerAuthCode(true)
            // requests an ID token be generated.  This OAuth token can be used to
            //  identify the player to other services such as Firebase.
            .RequestIdToken()
            .Build();
            PlayGamesPlatform.InitializeInstance(config);
            // recommended for debugging:
            PlayGamesPlatform.DebugLogEnabled = true;

注意其他配置信息可能会涉及到修改Google Play Console后台的配置信息,例如EnableSavedGames就需要到后台开启游戏存档服务:
Unity 接入GooglePlay 登录,登出,获取ID Token

Google Play 玩家登陆函数,其实就是Google 验证的过程了。

 // Activate the Google Play Games platform
 PlayGamesPlatform.Activate();

这个函数同样只需执行一次即可。
验证Google 用户:

// authenticate user:
            Social.localUser.Authenticate((bool success,string kError) =>
            {
                // handle success or failure
                if(success)
                {
                    ((PlayGamesPlatform)Social.Active).SetGravityForPopups(Gravity.TOP);
                    _requestToken();
                    Debug.Log("Google Play SDK authenticate Success,google id token:"+ m_kToken);
                    }
                else
                {
                    Debug.LogError("Google Play SDK authenticate failure.Error:"+ kError);
                    SignOut();
                }
            });

如果验证成功后,success则为true,这时获取id token:

string kToken = ((PlayGamesLocalUser)Social.localUser).GetIdToken();

OK,Unity内部的接入工作大功告成!!!
出包,上Android 真机验证吧。

转载请注明出处!欢迎大家纠错,和完善!!
谢谢!

作者:Sturgeon
Date:2018-9-29