playgameservices / play-games-plugin-for-unity Goto Github PK
View Code? Open in Web Editor NEWGoogle Play Games plugin for Unity
License: Other
Google Play Games plugin for Unity
License: Other
Hello again,
In the latest version of the plugin (it worked fine in 0.8.00), I'm finding that when authenticating and being presented with the account chooser on Android, the game will crash if you choose the "Add Account" option. The crash occurs if I wait a moment after opening the AddAccount activity.
Here is the crash log associated with the issue. So far, it has been 100% reproducible on my device.
I/ActivityManager( 764): START u0 {flg=0x80000 cmp=com.google.android.gsf.login/.AccountIntroActivity (has extras)} from pid 2256
I/ActivityManager( 764): Start proc com.google.android.gsf.login for activity com.google.android.gsf.login/.AccountIntroActivity: pid=3535 uid=10007 gids={50007, 3003, 1007, 3002, 3001, 1028, 1015, 2001, 3006, 3007}
I/GLSActivity( 3535): Starting account intro Intent { flg=0x80000 cmp=com.google.android.gsf.login/.AccountIntroActivity (has extras) }
I/ActivityManager( 764): START u0 {cmp=com.google.android.gsf.login/.AccountIntroUIActivity (has extras)} from pid 3535
I/Adreno-EGL( 3535): <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13
I/ActivityManager( 764): Displayed com.google.android.gsf.login/.AccountIntroUIActivity: +162ms (total +360ms)
I/Choreographer( 3368): Skipped 118 frames! The application may be doing too much work on its main thread.
D/AppStateService( 1065): client connected with version: 4242000
W/ContextImpl( 1065): Implicit intents with startService are not safe: Intent { act=com.google.android.gms.plus.service.default.INTENT } android.content.ContextWrapper.startService:494 com.google.android.gms.plus.service.DefaultIntentService.a:29 fny.a:264
D/AndroidRuntime( 3368): Shutting down VM
W/dalvikvm( 3368): threadid=1: thread exiting with uncaught exception (group=0x420f1ba8)
E/AndroidRuntime( 3368): FATAL EXCEPTION: main
E/AndroidRuntime( 3368): Process: <REMOVED>, PID: 3368
E/AndroidRuntime( 3368): java.lang.Error: FATAL EXCEPTION [main]
E/AndroidRuntime( 3368): Unity version : 4.3.2f1
E/AndroidRuntime( 3368): Device model : LGE Nexus 5
E/AndroidRuntime( 3368): Device fingerprint: google/hammerhead/hammerhead:4.4.2/KOT49H/937116:user/release-keys
E/AndroidRuntime( 3368):
E/AndroidRuntime( 3368): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 3368): at com.google.android.gms.common.ConnectionResult.startResolutionForResult(Unknown Source)
E/AndroidRuntime( 3368): at com.google.example.games.basegameutils.GameHelper.resolveConnectionResult(GameHelper.java:752)
E/AndroidRuntime( 3368): at com.google.example.games.basegameutils.GameHelper.onConnectionFailed(GameHelper.java:729)
E/AndroidRuntime( 3368): at com.google.android.gms.internal.dx.a(Unknown Source)
E/AndroidRuntime( 3368): at com.google.android.gms.common.api.GoogleApiClient.bn(Unknown Source)
E/AndroidRuntime( 3368): at com.google.android.gms.common.api.GoogleApiClient.f(Unknown Source)
E/AndroidRuntime( 3368): at com.google.android.gms.common.api.GoogleApiClient$4.onConnectionFailed(Unknown Source)
E/AndroidRuntime( 3368): at com.google.android.gms.internal.dx.a(Unknown Source)
E/AndroidRuntime( 3368): at com.google.android.gms.internal.dw$h.b(Unknown Source)
E/AndroidRuntime( 3368): at com.google.android.gms.internal.dw$h.b(Unknown Source)
E/AndroidRuntime( 3368): at com.google.android.gms.internal.dw$b.bR(Unknown Source)
E/AndroidRuntime( 3368): at com.google.android.gms.internal.dw$a.handleMessage(Unknown Source)
E/AndroidRuntime( 3368): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 3368): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 3368): at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime( 3368): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3368): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 3368): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/AndroidRuntime( 3368): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/AndroidRuntime( 3368): at dalvik.system.NativeStart.main(Native Method)
The line mentioned in the error (GameHelper.java line 752) seems to be returning a result to GameHelperListener instance in Unity. Maybe the listener is unexpectedly null or something?
code:
internal AndroidJavaObject GetActivity() {
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
if (jc == null) {
throw new System.Exception("Could not get class com.unity3d.player.UnityPlayer.");
}
AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
if (activity == null) {
throw new System.Exception("Could not get class current activity from UnityPlayer.");
}
return activity;
}
problem:
Exception: JNI: Init'd AndroidJavaClass with null ptr!
UnityEngine.AndroidJavaClass..ctor (IntPtr jclass)
UnityEngine.AndroidJavaObject.get_JavaLangClass ()
UnityEngine.AndroidJavaObject.FindClass (System.String name)
UnityEngine.AndroidJavaClass._AndroidJavaClass (System.String className)
UnityEngine.AndroidJavaClass..ctor (System.String className)
GooglePlayGames.Android.AndroidClient.GetActivity () (at assets/GooglePlayGames/Platforms/Android/AndroidClient.cs:271)
GooglePlayGames.Android.AndroidClient.RunOnUiThread (System.Action action) (at assets/GooglePlayGames/Platforms/Android/AndroidClient.cs:283)
GooglePlayGames.Android.AndroidClient..ctor () (at assets/GooglePlayGames/Platforms/Android/AndroidClient.cs:63)
GooglePlayGames.PlayGamesClientFactory.GetPlatformPlayGamesClient () (at assets/GooglePlayGames/Platforms/PlayGamesClientFactory.cs:26)
GooglePlayGames.PlayGamesPlatform.Authenticate (ILocalUser unused, System.Action1 callback, Boolean silent) (at assets/GooglePlayGames/ISocialPlatform/PlayGamesPlatform.cs:157) GooglePlayGames.PlayGamesPlatform.Authenticate (ILocalUser localUser, System.Action
1 callback) (at assets/GooglePlayGames/ISocialPlatform/PlayGamesPlatform.cs:132)
GooglePlayGames.PlayGamesLocalUser.Authenticate (System.Action`1 callback) (at assets/GooglePlayGames/ISocialPlatform/PlayGamesLocalUser.cs:36)
Game6_Player.Start () (at assets/game 6/script/Game6_Player.cs:124)
The most common way to handle this is to include a PostprocessBuildPlayer_PlayGames file that handles the specific need of this plugin and include a generic PostprocessBuildPlayer that does this:
#!/usr/bin/perl
# Post Process Build Player -- Master
# Searches for other PostprocessBuildPlayer scripts and executes them. Make sure the other script
# have a name suffix with an underscore "_" like "PostprocessBuildPlayer_AnotherBuild" or whatever.
#
# Based on script by Rob Terrell, [email protected]
use File::Glob ':glob';
# Grab all the PostprocessBuildPlayer files
@files = bsd_glob( "Assets/Editor/postprocessbuildplayer_*", GLOB_NOCASE );
foreach $file( @files )
{
if( !( $file =~ m/\./ ) )
{
system( "chmod", "755", $file );
print "PostProcessBuildPlayer: calling " . $file . "\n";
system( $file, $ARGV[0], $ARGV[1], $ARGV[2], $ARGV[3], $ARGV[4], $ARGV[5], $ARGV[6] );
if ( $? == -1 )
{
print "command failed: $!\n";
}
else
{
printf "command exited with value %d", $? >> 8;
}
}
}
I noticed that sometimes when I call GetUserId, the game crashes with a stack trace something like this:
thread #1: tid = 0xb1b52, 0x38657b26 libobjc.A.dylib`objc_msgSend + 6, queue = 'com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0xc)
frame #0: 0x38657b26 libobjc.A.dylib`objc_msgSend + 6
frame #1: 0x00a08bd0 ttgame`_NSStringToUTF8Buf(s=0x1b1f80b0, buf=0x1853bc00, bufSize=512) + 116 at GPGSInterface.m:40
frame #2: 0x00a08d7c ttgame`GPGSGetPlayerId(buf=0x1853bc00, bufSize=512) + 124 at GPGSInterface.m:51
frame #3: 0x0032e948 ttgame`m_3059 + 80
frame #4: 0x0014ea0c ttgame`m_GooglePlayGames_IOS_IOSClient_GetUserId + 120
frame #5: 0x0014c2e8 ttgame`m_GooglePlayGames_PlayGamesPlatform_GetUserId + 148
Upon closer inspection using some breakpoints and watch variables, it seems that GPGSManager.m saves pointers to the player name and ID around line 85. However, the GPGPlayer instance is being deallocated after those variables are saved, which leaves them set to 'nil'. Then, any further call to GetUserId will trigger a null exception when copying the string.
Not sure what the core solution is here - it seems that the GPGPlayer instance should remain until the app quits or the user signs out, but maybe that's not how the system is meant to work. If GPGPlayer can be deallocated, it makes sense then to either copy the name/ID without using a pointer, or fetch a new instance of GPGPlayer anytime you want to retrieve data from it.
eclipse import sample project and run
how slove?
02-28 20:50:39.191: I/Unity(14379): Exception: java.lang.ClassNotFoundException: com.google.example.games.basegameutils.GameHelper
02-28 20:50:39.191: I/Unity(14379): at UnityEngine.AndroidJNISafe.CheckException () [0x00000] in :0
02-28 20:50:39.191: I/Unity(14379): at UnityEngine.AndroidJNISafe.CallStaticObjectMethod (IntPtr clazz, IntPtr methodID, UnityEngine.jvalue[] args) [0x00000] in :0
02-28 20:50:39.191: I/Unity(14379): at UnityEngine.AndroidJavaObject._CallStatic[AndroidJavaObject](System.String methodName, System.Object[] args) [0x00000] in :0
02-28 20:50:39.191: I/Unity(14379): at UnityEngine.AndroidJavaObject.CallStatic[AndroidJavaObject](System.String methodName, System.Object[] args) [0x00000] in :0
02-28 20:50:39.191: I/Unity(14379): at UnityEngine.AndroidJavaObject.FindClass (System.String name) [0x00000] in :0
02-28 20:50:39.191: I/Unity(14379): at UnityEngine.AndroidJavaObject._AndroidJavaObject (System.String className, System.Object[] args) [0x00000] in :0
02-28 20:50:39.191: I/Unity(14379): at UnityEngine.AndroidJavaObject..ctor (System.String className, System.Object[] args) [0x00000] in :0
02-28 20:50:39.191: I/Unity(14379): at GooglePlayGames.Android.Game
02-28 20:50:39.251: I/Unity(14379): NullReferenceException: Object reference not set to an instance of an object
02-28 20:50:39.251: I/Unity(14379): at GooglePlayGames.Android.AndroidClient+c__AnonStorey0.<>m__1 () [0x00000] in :0
02-28 20:50:39.251: I/Unity(14379): at UnityEngine.AndroidJavaRunnableProxy.run () [0x00000] in :0
02-28 20:50:39.251: I/Unity(14379): at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0
02-28 20:50:39.251: I/Unity(14379): Rethrow as TargetInvocationException: UnityEngine.AndroidJavaRunnableProxy.run()
02-28 20:50:39.251: I/Unity(14379): at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, System.Object[] args) [0x00000] in :0
02-28 20:50:39.251: I/Unity(14379): at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, UnityEngine.AndroidJavaObject[] javaArgs) [0x00000] in :0
02-28 20:50:39.251: I/Unity(14379): at UnityEngine._AndroidJNIHelper.InvokeJavaProxyMethod (UnityEngine.AndroidJavaProxy proxy, IntPtr jmethodName, IntPtr jargs) [0x00000] in :0
02-28 20:50:39.251: I/Unity(14379):
I have my own custom achievement dialogs that come up, and I want to disable the ones this library pops up. If I can't do that, I would want to be able to use something like setGravityForPopups, so they can be shown on the bottom of the screen. I don't want them to be shown at the top of the screen because that would negatively impact gameplay. Is there any way that could be done or any way it could be added?
After import asset I see this in Console:
Assets/GooglePlayGames/ISocialPlatform/PlayGamesPlatform.cs(271,25): error CS0029: Cannot implicitly convert type 'GooglePlayGames.BasicApi.Achievement' to 'Achievement'
Assets/GooglePlayGames/ISocialPlatform/PlayGamesPlatform.cs(277,37): error CS1061: Type 'Achievement' does not contain a definition for 'IsIncremental' and no extension method 'IsIncremental' of type 'Achievement' could be found (are you missing a using directive or an assembly reference?)
Assets/GooglePlayGames/ISocialPlatform/PlayGamesPlatform.cs(278,32): error CS1061: Type 'Achievement' does not contain a definition for 'CurrentSteps' and no extension method 'CurrentSteps' of type 'Achievement' could be found (are you missing a using directive or an assembly reference?)
Assets/GooglePlayGames/ISocialPlatform/PlayGamesPlatform.cs(279,34): error CS1061: Type 'Achievement' does not contain a definition for 'TotalSteps' and no extension method 'TotalSteps' of type 'Achievement' could be found (are you missing a using directive or an assembly reference?)
Unity 4.3.3f1 (game updated from older version)
Plugin version 0.8.00 and 0.8.01
So after much work getting this plugin to work in our unit test project, I've hit a road-block for the iOS version of this plugin... basically, when I try to authenticate this occurs in the log of XCode: (I've replaced the authentication tokens with )
Changing authenication provider from AP_FACEBOOK to AP_GOOGLE_PLAY.
(Filename: /Applications/buildAgent/work/d3d49558e4d408f4/artifacts/iPhonePlayer-armv7Generated/UnityEngineDebug.cpp Line: 53)
[Play Games Plugin DLL] Activating PlayGamesPlatform.
(Filename: /Applications/buildAgent/work/d3d49558e4d408f4/artifacts/iPhonePlayer-armv7Generated/UnityEngineDebug.cpp Line: 53)
[Play Games Plugin DLL] PlayGamesPlatform activated: GooglePlayGames.PlayGamesPlatform
(Filename: /Applications/buildAgent/work/d3d49558e4d408f4/artifacts/iPhonePlayer-armv7Generated/UnityEngineDebug.cpp Line: 53)
[Play Games Plugin DLL] Note: debug logs enabled on IOSClient.
(Filename: /Applications/buildAgent/work/d3d49558e4d408f4/artifacts/iPhonePlayer-armv7Generated/UnityEngineDebug.cpp Line: 53)
2014-03-10 17:16:30.494 KIUnityUnitTest[8156:907] Debug logs enabled!
[Play Games Plugin DLL] IOSClient.Authenticate
(Filename: /Applications/buildAgent/work/d3d49558e4d408f4/artifacts/iPhonePlayer-armv7Generated/UnityEngineDebug.cpp Line: 53)
2014-03-10 17:16:30.497 KIUnityUnitTest[8156:907] GPGSAuthenticateWithCallback.
2014-03-10 17:16:30.498 KIUnityUnitTest[8156:907] GPGSManager initializing and authenticating.
2014-03-10 17:16:30.500 KIUnityUnitTest[8156:907] GPPSignIn initialized.
2014-03-10 17:16:30.501 KIUnityUnitTest[8156:907] GPPSignIn attempting sign in now.
2014-03-10 17:16:31.975 KIUnityUnitTest[8156:907] GPGSManager Finished with auth.
2014-03-10 17:16:31.979 KIUnityUnitTest[8156:907] Success signing in to Google! Auth object is GTMOAuth2Authentication 0x8ead180: {accessToken="", refreshToken="", expirationDate="2014-03-10 23:16:31 +0000"}
2014-03-10 17:16:31.980 KIUnityUnitTest[8156:907] GPGSManager Starting Google Games sign in.
2014-03-10 17:16:31.988 KIUnityUnitTest[8156/0x3dfc6b88] [lvl=3] -[GPGManager updateRpcEndpoints] Games URL [https://www.googleapis.com/rpc?prettyprint=false] Version [v1]
2014-03-10 17:16:32.322 KIUnityUnitTest[8156/0x3dfc6b88] [lvl=3] -[GPGManager applicationId] Application ID expected to be a valid, non-empty string.
2014-03-10 17:16:32.322 KIUnityUnitTest[8156/0x3dfc6b88] [lvl=3] -[GPGManager modelForApplicationId:] Expecting valid application id.
2014-03-10 17:16:32.515 KIUnityUnitTest[8156/0x3dfc6b88] [lvl=3] -[GPGManager updateRpcEndpoints] Games URL [https://www.googleapis.com/rpc?prettyprint=false] Version [v1]
2014-03-10 17:16:32.520 KIUnityUnitTest[8156/0x3dfc6b88] [lvl=3] -[GPGManager applicationId] Application ID expected to be a valid, non-empty string.
2014-03-10 17:16:32.521 KIUnityUnitTest[8156/0x3dfc6b88] [lvl=3] -[GPGManager modelForApplicationId:] Expecting valid application id.
Android is working fine, and Facebook is working fine on IOS... just can't get google play to authenticate correctly.
what is problem?
android build and run and error
if (!Social.localUser.authenticated) {
// Authenticate
Social.localUser.Authenticate((bool success) => {
Debug.Log(success ? "Successfully authenticated" : "Authentication failed.");
} );
}
02-27 22:16:11.131: I/Unity(6153): Exception: No such proxy method: UnityEngine.AndroidJavaRunnableProxy.run()
02-27 22:16:11.131: I/Unity(6153): at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, System.Object[] args) [0x00000] in :0
02-27 22:16:11.131: I/Unity(6153): at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, UnityEngine.AndroidJavaObject[] javaArgs) [0x00000] in :0
02-27 22:16:11.131: I/Unity(6153): at UnityEngine._AndroidJNIHelper.InvokeJavaProxyMethod (UnityEngine.AndroidJavaProxy proxy, IntPtr jmethodName, IntPtr jargs) [0x00000] in :0
02-27 22:16:11.131: I/Unity(6153):
02-27 22:16:11.131: I/Unity(6153): (Filename: Line: -1)
02-27 22:16:11.131: I/Unity(6153): Exception: No such proxy method: UnityEngine.AndroidJavaRunnableProxy.run()
02-27 22:16:11.131: I/Unity(6153): at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, System.Object[] args) [0x00000] in :0
02-27 22:16:11.131: I/Unity(6153): at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, UnityEngine.AndroidJavaObject[] javaArgs) [0x00000] in :0
02-27 22:16:11.131: I/Unity(6153): at UnityEngine._AndroidJNIHelper.InvokeJavaProxyMethod (UnityEngine.AndroidJavaProxy proxy, IntPtr jmethodName, IntPtr jargs) [0x00000] in :0
Hi,
i'm having a problem when building the Android player. I did follow the documentation (readme), have the latest sdk with latest play services library installed and did the "Android Setup". I was using my own GPG package before without any problem (didn't used unity social so wanted to update to have a clean code). I'm using latest unity (4.3.1f1). Here is the error message :
Error building Player: Win32Exception: ApplicationName='C:\Program Files (x86)\Java\jre7\bin\javac.exe', CommandLine='-bootclasspath "I:/dev/android-sdk/adt-bundle-windows-x86_64-20130917/sdk/platforms/android-19\android.jar" -d "I:\dev\unity3d\projects\Hidden\Temp\StagingArea\bin\classes" -source 1.6 -target 1.6 -encoding ascii "com\google\android\gms\R.java" "com\google\example\games\basegameutils\R.java" "com\google\example\games\mainlibproj\R.java" "com\malothetoad\hidden\R.java"', CurrentDirectory='I:\dev\unity3d\projects\Hidden\Temp\StagingArea\gen'
Hi guys,
first of all Thank you for your plugins. Really appreciated!
Almost each time the game start and the user login manually, when there's a request for leaderboard or postScore, nothing happens. Every calls is put in a queue and wait until...ever. The only way I found is to put the game in background manually and come back and every actions in the queue happens. What can we do? We are testing it on Nexus 7 and Nexus S.
Thank you
David
[NOTE by btco@: this fix may be necessary if you are writing your own customized AndroidManifest.xml file, and getting errors about certain meta-data tags being missing from it]
While trying to play with the launcher, the debug logs were telling me that a tag was missing from the manifest file:
I manually added the tag to the manifest file generated in the staging area and rebuilt the game. I am not receiving that error message anymore, but every time I try to authenticate the game crashes (twlauncher not responding).
Not sure what's going on...
Sample Project down
Sample Minimal open
GooglePlayGamesPlugin-0.8.01 import
Android Setup Open and write my app-id
Unity Player Setting Open and Write My Pakage name
Add Key sining
build and run
But!!
App start and Authenticate Click
Test Accout Choice
Sign Error : the application is incorrectly configured. check that the package name and ~~~~~~~
Eclipse Log
No package identifier when getting value for resource number 0x00000000
android.content.res.Resources$NotFoundException: String resource ID #0x0
at android.content.res.Resources.getText(Resources.java:1068)
at android.content.res.Resources.getString(Resources.java:1162)
at com.google.example.games.basegameutils.GameHelperUtils.getAppIdFromResource(GameHelperUtils.java:138)
at com.google.example.games.basegameutils.GameHelperUtils.printMisconfiguredDebugInfo(GameHelperUtils.java:122)
at com.google.example.games.basegameutils.GameHelper.giveUp(GameHelper.java:788)
at com.google.example.games.basegameutils.GameHelper.onActivityResult(GameHelper.java:533)
at com.google.example.games.pluginsupport.HelperActivity.onActivityResult(HelperActivity.java:41)
at android.app.Activity.dispatchActivityResult(Activity.java:5563)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3514)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3561)
at android.app.ActivityThread.access$1200(ActivityThread.java:168)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1377)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5493)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
at dalvik.system.NativeStart.main(Native Method)
App ID from : ??? (failed to retrieve APP ID)
Check that the above information matches your setup in
Developer Console. Also, check that you're logging in with the
right account (it should be listed in the Testers section if
your project is not yet published).
For more information, refer to the troubleshooting guide:
http://developers.google.com/games/services/android/troubleshooting
What is Problem????
app-id, package name, test accout is Google developer consol Register Successed
Hi,
I downloaded the plugin, install went smoothly, I created the related google play service in my console for testing did all the necessary setup, etc, and now when I call the Authenticate method...nothing happens.
I'm using the latest version of Unity, 4.3.3 and its on a 2d game.
EDIT:
Ran adb logcat, got this problem:
I/Unity (18399): AndroidJavaException: java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value
@integer/google_play_services_version" />
When attempting to sign into play services using the standard Social.localUser.Authenticate call while ART is the active runtime, the app shuts down with an error about JNI_GetArrayLength. Will provide additional details below shortly.
I was having an issue where my Facebook authentication method stopped working after adding the Google Play Games plugin. Upon further inspection, I found the problem was that this plugin extends UnityAppController and overrides the application:openURL method without calling the base implementation, which my Facebook plugin relies on.
There doesn't seem to be any harm in calling the base implementation, and it ensures that any other plugins relying on the default behavior function correctly. Here's the change I made in GPGSAppController.m:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
NSLog(@"Calling super implementation of openURL.");
[super application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
return [GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
As an extension of this, it would be ideal if the plugin didn't override UnityAppController, as that can potentially clash with other plugins - but I'm not too good with Obj-C or native iOS development, so maybe it isn't so easy.
Hi guys,
Since logged-in players can go to Settings and manually sign themselves out of the system, how can we catch this event so we can redirect them back to the login phase ?
Thanks in advance !
First off, this is an amazing plugin, thank you!
I would prefer an option to turn off the 'silent sign in' for a returning player. In most other games with Play Games it welcomes me back whenever I start the game.
I like that reminder that I'm logged in and can compare my scores with others.
Thanks!
When build the game to IOS is missing the GPGSParams.h file:
FATAL ERROR: Failed to read GPGSParams.h
After adding support for GetUserHasHiResImage() I've attempted to fetch the image URI for the current authenticated user. However, looking at ADB, I get a UnityEngine AndroidJNIHelper error in the GetSignature method.
UnityEngine._AndroidJNIHelper.GetSignature (System.Object obj) [0x00000] in <filename unknown>:0
UnityEngine._AndroidJNIHelper.GetSignature[Uri] (System.Object[] args) [0x00000] in <filename unknown>:0
UnityEngine._AndroidJNIHelper.GetMethodID[Uri] (IntPtr jclass, System.String methodName, System.Object[] args, Boolean isStatic) [0x00000] in <filename unknown>:0
UnityEngine.AndroidJNIHelper.GetMethodID[Uri] (IntPtr jclass, System.String methodName, System.Object[] args, Boolean isStatic) [0x00000] in <filename unknown>:0
UnityEngine.AndroidJavaObject._Call[Uri] (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0
UnityEngine.AndroidJavaObject.Call[Uri] (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0
Modifications made in AndroidClient.cs
private void RetrieveUserInfo() {
Logger.d("Attempting to retrieve player info.");
using (AndroidJavaObject playerObj = mGHManager.CallGmsApi<AndroidJavaObject>(
"games.Games", "Players", "getCurrentPlayer")) {
if (mUserId == null) {
mUserId = playerObj.Call<string>("getPlayerId");
Logger.d("Player ID: " + mUserId);
}
if (mUserDisplayName == null) {
mUserDisplayName = playerObj.Call<string>("getDisplayName");
Logger.d("Player display name: " + mUserDisplayName);
}
if (mUserHasHiResImage == false) {
mUserHasHiResImage = playerObj.Call<bool>("hasHiResImage");
Logger.d("Player has image: " + mUserHasHiResImage);
}
if (mUserHiResImageUri == null) {
mUserHiResImageUri = playerObj.Call<Object>("getHiResImageUri");
Logger.d("Player image URI: " + mUserHiResImageUri.ToString());
}
}
}
Is this a Unity issue or a plugin issue?
Thanks,
Ryan
On my phone (and I assume many others), OnResume() is called after the login is successful. OnResume sets mConnectionState to ConnectionState.Connecting, and it will never go back to Connected after that. I assume this all happens because Unity calls OnApplicationPause(false) after returning from the sign in overlay activity.
Achievements, Leaderboards generally still work, but I had issues with loading cloud saves because of this.
Commenting out the line in OnResume() that changes the connection state works as a temporary fix.
I'm using the newest version of Unity3D, this plugin and the play services sdk. I can give you more details about my setup if you cannot reproduce this issue.
Originally reported in #47 (Small Bug List).
"No 'welcome back' on sign in after closing app from multitasking and reopening (where sign in is automatic) - edit to this one. I have noticed if the app is just closed but stays active in b/g then after a long delay and returning to game you do get a 'Welcome {name}' box."
Load the leaderboard score for the current authenticated user given the leaderboard ID.
The documentation wrote this:
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// show leaderboard UI
(PlayGamesPlatform) Social.Active).ShowLeaderboardUI("Cfji293fjsie_QA");
That last line of code raised an error when compiled. How can I fix it ? Thanks in advance !
Error when build for IOS platform,
Error: Entry point not found exception: GPGS EnableDebugLog.
From: IOSClient Script
Thanks for making this, it's good to have offically-supported repos.
But could you move the GPG menu inside Window, or Assets? I only need it once at the start of a project and then it sits there taking up real estate.
Code:
internal AndroidJavaObject GetActivity() {
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
if (jc == null) {
throw new System.Exception("Could not get class com.unity3d.player.UnityPlayer.");
}
AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
if (activity == null) {
throw new System.Exception("Could not get class current activity from UnityPlayer.");
}
return activity;
}
Error:Exception: JNI: Init'd AndroidJavaClass with null ptr!
I've work hours on this now. I think I've run out of ideas on how to fix this.
GPGSAppController.m
Lexical or Preprocessor Issue
'GooglePlus/GooglePlus.h' file not found
GPGSAchOrLbDelegate.h
Lexical or Preprocessor Issue
'PlayGameServices/PlayGameServices.h' file not found
It looks to me like the Frameworks are not being seen. But I can't find anything else to do, I've tried it all.
Everything is set up correctly, for iOS in Unity. I've built to an Xcode project, I've added every Framework listed in the documentation.
I dragged the 5 files to the project:
GoogleOpenSource.framework
GooglePlus.bundle
GooglePlus.framework
PlayGameServices.bundle
PlayGameServices.framework
I've double/triple/quadruple checked that they ARE included in Build Phases -> Link Binary With Libraries.
The .bundles are also in the project.
I've added the -ObjC flag to the Other Linker Flags.
Latest OS X Mavericks and Latest Xcode 5.0.2
I've wiped, re-uilt, re-created the xcode project, cleaned, built. Done everything at least 5 times over. Clean checkout from my repository and did it again. Clean install of Unity. Simulator and device builds, with the correct choice in Unity beforehand. Every possible thing I can think of. But it just comes down to an error while compiling because it can't find the .h files. Which has to mean the framework isn't linking. I've reached the end of my ideas.
Am I missing something really trivial and stupid?
Thank you for any help you can give me. This works great on Android, I published a game with it two weeks ago, and am in the Top 10 New Apps and Games in Canada! I'd like to get it running on iOS now.
Thanks!
I really love that you have added this plugin!
I was wondering if the
or the getDisplayRank () would be difficult to add?
Best Regards,
Erik
Hey there! I have integrated your plugin into a Unity Plugin called PlayMaker. The people using it have reported a few bugs. Is there anyway I could fix these? I think they might be on your end of things?
Hey,
If I use this plugin and display ads, they display correctly and work, but I get the error message in logcat each time the ad is refreshed:
"E/GooglePlayServicesUtil( 6204): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included."
3 times in a row, at each ad refresh.
I've tried exporting the project and build with Eclipse as well, it's the same issue. I don't understand, as the Google Play Services resources are indeed in the apk generated by Unity or Eclipse. I used apktool to look at the resources and they're here. I've checked the Eclipse generated R.java files, they all list the proper resources.
Is the issue with the google play services lib itself, like some resources are missing from it only for Ads ?
Thank you for your help.
I saw the fix for iOS a few threads back, but the sharing does not seem to work on Android when the FB plugin is used with the PlayGames plugin.
Thing is, the intended behavior works when I don't have the FB app installed on my Android phone. However, once I have it installed, it just asks me to login, but closes afterwards without my intended behavior.
On FB 4.3.6, the intended behavior works with the PlayGames plugin and the FB app installed, but the app crashes whenever I try to call ShowAchievementsUI() or ShowLeaderboardUI().
Edit: More details on 4.3.6, after I attempt to login once, even if I don't provide the necessary permissions, calling ShowAchievementsUI or ShowLeaderboardUI() no longer crash.
On FB 5.0.3, the intended behavior breaks with the FB app installed, but ShowAchievementsUI() or ShowLeaderboardUI() no longer crash the app.
Is this on play games end or should I open a ticket on FB side as well?
Thanks!
Hello,
When i call PlayGamesPlatform.Activate(); on iOS i get the following error:
libc++abi.dylib: terminating with uncaught exception of type NSException
Stacktrace:
at (wrapper managed-to-native) GooglePlayGames.IOS.IOSClient.GPGSAuthenticateWithCallback (GooglePlayGames.IOS.IOSClient/GPGSSuccessCallback) <0xffffffff>
With Android it works perfectly!
I added all the necessary frameworks and bundles.
Kind regards,
Gjjansen
Subj. It possible? Players unhappy forced authorization that occurs when entering the game. You can make an attempt to log occurred in background mode like in iOS gamecenter native authorization?
I found that if you call IsAuthenticated() right after calling SignOut(), IsAuthenticated will still return true. It seems that calling IsAuthenticated maybe one or more frames after calling SignOut will return the correct result.
public void SignOut()
{
PlayGamesPlatform.Instance.SignOut();
Debug.Log(PlayGamesPlatform.Instance.IsAuthenticated()); // returns true!
}
This is a convoluted example, but I have an event that fires in response to signing out and code listening for that event might check for authentication - it seems that the function returns an incorrect value.
I can understand if SignOut is an asynchronous function that might fail for some reason, but the interface for it suggests that you are immediately signed out.
Hi,
First off, thanks for creating this plugin.
Just thought I'd mention that to get this running on iOS, I also needed to add AddressBook.framework to the project.
I was receiving errors such as
Undefined symbols for architecture armv7:
"_kABPersonLastNameProperty", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_kABPersonFirstNameProperty", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_ABAddressBookGetPersonCount", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_kABPersonEmailProperty", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_ABAddressBookCopyArrayOfAllPeople", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_ABMultiValueGetCount", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_ABRecordCopyValue", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_ABMultiValueCopyValueAtIndex", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_ABPersonCopyImageDataWithFormat", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_ABAddressBookCreateWithOptions", referenced from:
+[GPPAddressBook loadDeviceContactsWithHandler:] in GooglePlus(GPPAddressBook.o)
"_ABPersonHasImageData", referenced from:
___48+[GPPAddressBook loadDeviceContactsWithHandler:]_block_invoke in GooglePlus(GPPAddressBook.o)
"_ABAddressBookRequestAccessWithCompletion", referenced from:
+[GPPAddressBook loadDeviceContactsWithHandler:] in GooglePlus(GPPAddressBook.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Adding the AddressBook.framework solved these issues. Does it need to be added to the list of required frameworks in the readme file?
Thanks,
Owen
EntryPointNotFoundException: _SetCallbackHandlerName
AdMobPluginiOS.SetCallbackHandlerName (System.String callbackHandlerName) (at assets/Plugins/AdMobPlugin/AdMobPluginiOS.cs:36)
AdMobPlugin.SetCallbackHandlerName (System.String callbackHandlerName) (at assets/Plugins/AdMobPlugin/AdMobPlugin.cs:77)
AdMobPlugin.Awake () (at assets/Plugins/AdMobPlugin/AdMobPlugin.cs:43)
I might be ignorant, but I'm getting this error.
Assets/Scripts/Materials/xxxx.js: BCE0005: Unknown identifier: 'PlayGamesPlatform'.
I have followed all the instructions to compile for iOS. I still receive
Error: synthesize of 'weak' property is only allowed in ARC or GC mode.
I have switched to ARC mode but that generates about 20 more errors.
Any ideas? I am using the latest version of Unity.
The GPGS plugin does not play nicely (no pun intended) with the FB plugin. This is due to the takeover of the 'openUrl' call in the GPGSAppController class, which is not integrated into Unity's UnityAppController openUrl delegation strategy. Seems to affect all versions, but I am using FB Unity plugin beta 5.03.
Undefined symbols for architecture armv7:
"OBJC_CLASS$_CTTelephonyNetworkInfo", referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
When I run the Minimal sample, turn Airplane mode on, and then hit Authenticate, it very briefly pops up a message that says, "Failed to sign in. Please check your network connection and try again.". Almost as soon as it appears, it then disappears and we're returned to the main screen with the button and "Authentication failed" at the top.
Obviously it should fail to Authenticate, but I'm wondering why this brief popup is appearing. Is it something we can turn off? For a game we're working on, we'd like to try and Authenticate and, if it's not able to, deal with it by entering offline mode. But, we don't want to see a popup appear - especially one that doesn't last long enough for the user to read.
I'm running the sample on a Nexus 7 (1st generation), running Android 4.4.2.
01-03 12:27:59.867: W/GooglePlayServicesUtil(19130): Google Play services is missing.
01-03 12:27:59.887: E/WindowManager(19130): Activity com.google.example.games.pluginsupport.SignInHelperActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@2b041798 that was originally added here
01-03 12:27:59.887: E/WindowManager(19130): android.view.WindowLeaked: Activity com.google.example.games.pluginsupport.SignInHelperActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@2b041798 that was originally added here
01-03 12:27:59.887: E/WindowManager(19130): at android.view.ViewRoot.(ViewRoot.java:267)
01-03 12:27:59.887: E/WindowManager(19130): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
01-03 12:27:59.887: E/WindowManager(19130): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-03 12:27:59.887: E/WindowManager(19130): at android.view.Window$LocalWindowManager.addView(Window.java:424)
01-03 12:27:59.887: E/WindowManager(19130): at android.app.Dialog.show(Dialog.java:241)
01-03 12:27:59.887: E/WindowManager(19130): at com.google.example.games.basegameutils.GameHelper.showFailureDialog(GameHelper.java:998)
01-03 12:27:59.887: E/WindowManager(19130): at com.google.example.games.basegameutils.GameHelper.beginUserInitiatedSignIn(GameHelper.java:649)
01-03 12:27:59.887: E/WindowManager(19130): at com.google.example.games.pluginsupport.SignInHelperActivity.onSignInFailed(SignInHelperActivity.java:65)
01-03 12:27:59.887: E/WindowManager(19130): at com.google.example.games.basegameutils.GameHelper.notifyListener(GameHelper.java:609)
01-03 12:27:59.887: E/WindowManager(19130): at com.google.example.games.basegameutils.GameHelper.onConnectionFailed(GameHelper.java:869)
01-03 12:27:59.887: E/WindowManager(19130): at com.google.android.gms.internal.de.a(Unknown Source)
01-03 12:27:59.887: E/WindowManager(19130): at com.google.android.gms.internal.em.a(Unknown Source)
01-03 12:27:59.887: E/WindowManager(19130): at com.google.android.gms.internal.de$a.handleMessage(Unknown Source)
01-03 12:27:59.887: E/WindowManager(19130): at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 12:27:59.887: E/WindowManager(19130): at android.os.Looper.loop(Looper.java:130)
01-03 12:27:59.887: E/WindowManager(19130): at android.app.ActivityThread.main(ActivityThread.java:3701)
01-03 12:27:59.887: E/WindowManager(19130): at java.lang.reflect.Method.invokeNative(Native Method)
01-03 12:27:59.887: E/WindowManager(19130): at java.lang.reflect.Method.invoke(Method.java:507)
01-03 12:27:59.887: E/WindowManager(19130): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
01-03 12:27:59.887: E/WindowManager(19130): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
01-03 12:27:59.887: E/WindowManager(19130): at dalvik.system.NativeStart.main(Native Method)
The plugin is great but its incompatible with admob's sdk jar file. when I put both of the in the android folder I get the following error message. but when I delete the sdk file (GoogleAdMobAdsSdk-6.4.1.jar) the problem is resolved but I can't use admob any more.
Error building Player: CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java -Xmx1024M -Dcom.android.sdkmanager.toolsdir="/Users/Nima/Software/Development/android-sdk/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/Unity.app/Contents/BuildTargetTools/AndroidPlayer/sdktools.jar" -
regards
Update to 0.8.01 has introduced a bug which can be recreated using the Minimal example project, experienced on Nexus 5/7.
Using the old 0.8.0 version
Using the new 0.8.01
Authenticate can be clicked again and the same bug appears maybe 3 or four times before returning to normal behaviour.
AdMob is now also part of Google Play Services. Are there plans to add this in this plugin?
Is CreateLeaderboard() planned to be added?
Is there any way to access the Auth Token that was used when authenticating the user? I need to use it to authenticate the user with my own server.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.