I'm trying to implement leaderboard in my game. I wrote this code:
GoogleApiClient mGoogleApiClient;
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.build();
mGoogleApiClient.connect();
//....
while(!mGoogleApiClient.isConnected())Log.d("","NO CONNECTED");
Games.Leaderboards.submitScore(mGoogleApiClient, "MY_LEADERBOARD_ID",newscore);
Why mGoogleApiClient.isConnected()
returns always false?
EDIT1: Ok, now it works (I have changed Drive.API
with Games.API
and Drive.SCOPE_FILE
with Games.SCOPE_GAME
) but when I call submitScore()
even if it's all ok in the Log, the leaderboard is still empty. How can I check if submitScore()
really works?
EDIT2: I used
startActivityForResult(Games.Leaderboards.getLeaderboardIntent(mGoogleApiClient, "MY_LEADERBOARD_ID"), REQ_LEADERBOARD);
and everything works!
You need to add a couple callback listeners to the Builder (or GoogleApiClient). What's most likely happening is that the login is failing because you don't have permissions yet. You need to handle that failure so that the user can authorize your app.
I found out for some reason, although .connect() is asynchronous and that it would be logical to wait for a while loop immediately afterwards, it needs to apparently for some whatever reason still need to execute some things on the main UI thread, hence why your isConnected() is always returning false because that while loop is essentially blocking .connect(). If I could take a guess why I'm going to assume calling .connect() executes a piece of code which places itself in the main UI thread queue to be executed later on and by having that while loop there, you will be forever blocking that piece of code from ever executing/connecting.
来源:https://stackoverflow.com/questions/21966198/googleapiclient-isconnected-return-always-false