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里进行下载。
c.确保Android SDK 里带有正确的环境:
Android Studio ->Tools->Android->SDK Manager
①:Android SDK Platform 选择API Level 23及以上
②:SDK Tools 带有以下工具:
Android Support Repository
Google Play Services
GoogleRepository
③:为你的Unity项目创建一个keystore,并且在Unity里使用。具体创建方法请搜索。
④:为你的工程设置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.左边的选项条,选择所有应用 再到右上角选择创建应用
根据步骤依次填写内容:
这里的默认语言和后续输入的文字内容必须匹配,否则会被警告不能进行下一步操作。
继续输入内容,描述,类型等信息后保存草稿。这时在所有游戏内就会创建一个游戏草稿:
选择刚刚创建的游戏,进入内部:
选择右侧条目内的应用版本,这里可以创建Alpha/Beta Test版本,我这里创建一个Alpha测试版本:
这里特别注意的是一个Google Play 应用签名的东西:
特别注意:
选择继续后,上传的第一个包除了包内的keystore信息外还会另外生成一个全新的签名信息,以后所有的从Google Play下载的包使用的签名信息均被这个全新的签名替换。
选择浏览文件,将刚刚出的包上传到后台,作为第一个包生成一个新的签名文件信息。
特别注意的是:
包大小不能超过100M否则就要使用OBB分包等其他手段将apk文件压缩到100M以内。
上传完成后,选择右侧的应用签名,这里可以查看包内keystore的签名信息和Google Play 为你重新生成的新签名信息:
注意的是:
这里的上传证书的签名就是最初在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的密码(不可见)。
即可得到以下输出:
回到正题
回到Google Play Console后台的最外层,选择游戏服务,为你的游戏创建新的服务:
选择游戏详情,将内容完善,完善的内容右侧的将会出现绿色的勾:
重点来了:
在游戏详情页签中,拉到最下面有该游戏服务相关联的API控制台服务,点击链接后即可跳转到APIs控制台服务页签:
链接:https://console.developers.google.com/apis/
选择左上侧的工程按钮,选择需要关联到API服务的工程:
选择凭据按钮:
选择创建凭据,在下拉菜单中选择OAuth 客户端ID 创建凭据 即便是 OAuth 2.0 Client ID:
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。
继续回到Google Play Console
选择关联应用->Android
配置完成,保存并继续,下一步就到了授权的时候了。
这里输入包内的签名文件的SHA-1指纹签名信息,确认后,该服务就被关联到某个游戏上了,该服务最多可以关联20个应用。
添加成就信息,这里可以先添加两个临时测试成就,生成配置资源:
点击获取资源(Get Resources):
拷贝这里的全部文件,回到Unity工程
Window->Google Play Games ->Set Up ->Android setup…
继续回到Google Play Console
在游戏服务里,选择你的应用,在最右侧选择测试:
添加你需要测试的玩家的Google 账号信息。
这里关于在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就需要到后台开启游戏存档服务:
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