适用于Google Play Service的Unity3d代码。我使用的是GooglePlayGamesPlugin-0.9.36和Unity 5.4
using UnityEngine; using System.Collections; using UnityEngine.SocialPlatforms; using GooglePlayGames; public class MainGui : MonoBehaviour { private const float FontSizeMult = 0.05f; private bool mWaitingForAuth = false; private string mStatusText = "Ready."; private bool dumpedToken = false; void Start() { // Select the Google Play Games platform as our social platform implementation PlayGamesPlatform.Activate(); } void OnGUI() { GUI.skin.button.fontSize = (int)(FontSizeMult * Screen.height); GUI.skin.label.fontSize = (int)(FontSizeMult * Screen.height); GUI.Label(new Rect(20, 20, Screen.width, Screen.height * 0.25f), mStatusText); Rect buttonRect = new Rect(0.25f * Screen.width, 0.10f * Screen.height, 0.5f * Screen.width, 0.25f * Screen.height); Rect imageRect = new Rect(buttonRect.x + buttonRect.width / 4f, buttonRect.y + buttonRect.height * 1.1f, buttonRect.width / 2f, buttonRect.width / 2f); if (mWaitingForAuth) { return; } string buttonLabel; if (Social.localUser.authenticated) { buttonLabel = "Sign Out"; if (Social.localUser.image != null) { GUI.DrawTexture(imageRect, Social.localUser.image, ScaleMode.ScaleToFit); } else { GUI.Label(imageRect, "No image available"); } mStatusText = "Ready"; if (!dumpedToken) { string token = GooglePlayGames.PlayGamesPlatform.Instance.GetToken(); Debug.Log("AccessToken = " + token); dumpedToken = token != null && token.Length > 0; } } else { buttonLabel = "Authenticate"; } if (GUI.Button(buttonRect, buttonLabel)) { if (!Social.localUser.authenticated) { // Authenticate mWaitingForAuth = true; mStatusText = "Authenticating..."; Social.localUser.Authenticate((bool success) => { mWaitingForAuth = false; if (success) { mStatusText = "Welcome " + Social.localUser.userName; } else { mStatusText = "Authentication failed."; } }); } else { // Sign out! mStatusText = "Signing out."; ((GooglePlayGames.PlayGamesPlatform)Social.Active).SignOut(); } } } }当我按下验证按钮时,应用程序崩溃。并且Google Play服务对话框没有出现。我已经构建了应用程序并在Android Mobile中运行它。
02-25 20:18:42.181: A/DEBUG(583): pid: 23421, tid: 23439, name: main >>> devnp.testing <<< 02-25 20:18:42.197: W/debuggerd(583): type=1400 audit(0.0:35378): avc: denied { search } for name="devnp.testing" dev="dm-1" ino=141182 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0 02-25 20:18:42.260: A/DEBUG(583): #11 pc 0009221b /data/app/devnp.testing-1/lib/arm/libgpg.so 02-25 20:18:42.260: A/DEBUG(583): #12 pc 00092e37 /data/app/devnp.testing-1/lib/arm/libgpg.so 02-25 20:18:42.261: A/DEBUG(583): #13 pc 000933dd /data/app/devnp.testing-1/lib/arm/libgpg.so 02-25 20:18:42.261: A/DEBUG(583): #14 pc 0008dc69 /data/app/devnp.testing-1/lib/arm/libgpg.so (_ZNK3gpg28AndroidPlatformConfiguration5ValidEv+76) 02-25 20:18:42.261: A/DEBUG(583): #15 pc 00053441 /data/app/devnp.testing-1/lib/arm/libgpg.so (_ZN3gpg12GameServices7Builder6CreateERKNS_28AndroidPlatformConfigurationE+40) 02-25 20:18:42.261: A/DEBUG(583): #16 pc 000c73dd /data/app/devnp.testing-1/lib/arm/libgpg.so (GameServices_Builder_Create+16) 02-25 20:18:43.054: W/ActivityManager(1439): Force finishing activity devnp.testing/com.unity3d.player.UnityPlayerActivity 02-25 20:18:43.233: I/ActivityManager(1439): Process devnp.testing (pid 23421) has died 02-25 20:18:43.234: W/InputDispatcher(1439): channel 'd1b52d4 devnp.testing/com.unity3d.player.UnityPlayerActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9 02-25 20:18:43.234: E/InputDispatcher(1439): channel 'd1b52d4 devnp.testing/com.unity3d.player.UnityPlayerActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 02-25 20:18:43.237: I/WindowState(1439): WIN DEATH: Window{d1b52d4 u0 devnp.testing/com.unity3d.player.UnityPlayerActivity} 02-25 20:18:43.237: W/InputDispatcher(1439): Attempted to unregister already unregistered input channel 'd1b52d4 devnp.testing/com.unity3d.player.UnityPlayerActivity (server)'Unity3d Code for Google Play Service.I am using GooglePlayGamesPlugin-0.9.36 and Unity 5.4
using UnityEngine; using System.Collections; using UnityEngine.SocialPlatforms; using GooglePlayGames; public class MainGui : MonoBehaviour { private const float FontSizeMult = 0.05f; private bool mWaitingForAuth = false; private string mStatusText = "Ready."; private bool dumpedToken = false; void Start() { // Select the Google Play Games platform as our social platform implementation PlayGamesPlatform.Activate(); } void OnGUI() { GUI.skin.button.fontSize = (int)(FontSizeMult * Screen.height); GUI.skin.label.fontSize = (int)(FontSizeMult * Screen.height); GUI.Label(new Rect(20, 20, Screen.width, Screen.height * 0.25f), mStatusText); Rect buttonRect = new Rect(0.25f * Screen.width, 0.10f * Screen.height, 0.5f * Screen.width, 0.25f * Screen.height); Rect imageRect = new Rect(buttonRect.x + buttonRect.width / 4f, buttonRect.y + buttonRect.height * 1.1f, buttonRect.width / 2f, buttonRect.width / 2f); if (mWaitingForAuth) { return; } string buttonLabel; if (Social.localUser.authenticated) { buttonLabel = "Sign Out"; if (Social.localUser.image != null) { GUI.DrawTexture(imageRect, Social.localUser.image, ScaleMode.ScaleToFit); } else { GUI.Label(imageRect, "No image available"); } mStatusText = "Ready"; if (!dumpedToken) { string token = GooglePlayGames.PlayGamesPlatform.Instance.GetToken(); Debug.Log("AccessToken = " + token); dumpedToken = token != null && token.Length > 0; } } else { buttonLabel = "Authenticate"; } if (GUI.Button(buttonRect, buttonLabel)) { if (!Social.localUser.authenticated) { // Authenticate mWaitingForAuth = true; mStatusText = "Authenticating..."; Social.localUser.Authenticate((bool success) => { mWaitingForAuth = false; if (success) { mStatusText = "Welcome " + Social.localUser.userName; } else { mStatusText = "Authentication failed."; } }); } else { // Sign out! mStatusText = "Signing out."; ((GooglePlayGames.PlayGamesPlatform)Social.Active).SignOut(); } } } }App crash when I Press Authenticate Button.And Google Play Service Dialog does not appear.I have build the app and run it in Android Mobile.
02-25 20:18:42.181: A/DEBUG(583): pid: 23421, tid: 23439, name: main >>> devnp.testing <<< 02-25 20:18:42.197: W/debuggerd(583): type=1400 audit(0.0:35378): avc: denied { search } for name="devnp.testing" dev="dm-1" ino=141182 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0 02-25 20:18:42.260: A/DEBUG(583): #11 pc 0009221b /data/app/devnp.testing-1/lib/arm/libgpg.so 02-25 20:18:42.260: A/DEBUG(583): #12 pc 00092e37 /data/app/devnp.testing-1/lib/arm/libgpg.so 02-25 20:18:42.261: A/DEBUG(583): #13 pc 000933dd /data/app/devnp.testing-1/lib/arm/libgpg.so 02-25 20:18:42.261: A/DEBUG(583): #14 pc 0008dc69 /data/app/devnp.testing-1/lib/arm/libgpg.so (_ZNK3gpg28AndroidPlatformConfiguration5ValidEv+76) 02-25 20:18:42.261: A/DEBUG(583): #15 pc 00053441 /data/app/devnp.testing-1/lib/arm/libgpg.so (_ZN3gpg12GameServices7Builder6CreateERKNS_28AndroidPlatformConfigurationE+40) 02-25 20:18:42.261: A/DEBUG(583): #16 pc 000c73dd /data/app/devnp.testing-1/lib/arm/libgpg.so (GameServices_Builder_Create+16) 02-25 20:18:43.054: W/ActivityManager(1439): Force finishing activity devnp.testing/com.unity3d.player.UnityPlayerActivity 02-25 20:18:43.233: I/ActivityManager(1439): Process devnp.testing (pid 23421) has died 02-25 20:18:43.234: W/InputDispatcher(1439): channel 'd1b52d4 devnp.testing/com.unity3d.player.UnityPlayerActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9 02-25 20:18:43.234: E/InputDispatcher(1439): channel 'd1b52d4 devnp.testing/com.unity3d.player.UnityPlayerActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 02-25 20:18:43.237: I/WindowState(1439): WIN DEATH: Window{d1b52d4 u0 devnp.testing/com.unity3d.player.UnityPlayerActivity} 02-25 20:18:43.237: W/InputDispatcher(1439): Attempted to unregister already unregistered input channel 'd1b52d4 devnp.testing/com.unity3d.player.UnityPlayerActivity (server)'最满意答案
降级.aar文件可以解决问题
请参阅: https : //github.com/playgameservices/play-games-plugin-for-unity/issues/1604
较旧的文件: https : //drive.google.com/drive/u/0/folders/0B-w9u2zDKrHGUmtjMmk2VDhhSjA
以下是我解决此问题的方法:
转到资产>播放服务解析器> Android解析器>设置取消勾选启用后台解析(一旦我们降级.aar文件,这将取消更新通知)
转到<android_sdk_path>\extras\google\m2repository\com\google\android\gms 。 在每个文件夹中都有版本文件夹(例如10.0.1,10.2.0)。 在这些是我们需要的.aar文件或从谷歌驱动器链接上面下载我们将需要以下文件:
玩服务的广告,10.0.1.aar 玩服务的广告,精简版,10.0.1.aar 发挥服务认证 - 10.0.1.aar 发挥服务认证 - 基10.0.1.aar 打的服务 - 基础10.0.1.aar 发挥服务地下室,10.0.1.aar 播放服务,皆伐,10.0.1.aar 发挥服务驱10.0.1.aar 发挥服务 - 游戏 - 10.0.1.aar 发挥服务 - 盖斯 - 10.0.1.aar 发挥服务 - 附近-10.0.1.aar 发挥服务任务,10.0.1.aar在<unity_project_path>\Assets\Plugins\Android删除上面的.aar文件的10.2.0版本及其META文件。
复制10.0.1版本 构建并运行您的项目。Downgrading the .aar file fix the problem
See: https://github.com/playgameservices/play-games-plugin-for-unity/issues/1604
Older Files: https://drive.google.com/drive/u/0/folders/0B-w9u2zDKrHGUmtjMmk2VDhhSjA
Here is how I worked around this issue:
Go to Assets > Play Services Resolver > Android Resolver > Settings Un-tick Enable Background resolution (This will suppress the update notifications once we downgrade the .aar files)
Go to <android_sdk_path>\extras\google\m2repository\com\google\android\gms. Inside each of the folders there are version folders (such as 10.0.1, 10.2.0). And inside those are the .aar files we need or download from above google drive link We will need the following files:
play-services-ads-10.0.1.aar play-services-ads-lite-10.0.1.aar play-services-auth-10.0.1.aar play-services-auth-base-10.0.1.aar play-services-base-10.0.1.aar play-services-basement-10.0.1.aar play-services-clearcut-10.0.1.aar play-services-drive-10.0.1.aar play-services-games-10.0.1.aar play-services-gass-10.0.1.aar play-services-nearby-10.0.1.aar play-services-tasks-10.0.1.aarUnder <unity_project_path>\Assets\Plugins\Android delete the 10.2.0 versions of the .aar files above, with their META files.
Copy the 10.0.1 versions over Build and run your project.更多推荐
发布评论