2014-09-25 34 views
0

2天前我遇到了问题,找不到任何解决方案。使用onSignInSucceeded时出现的奇怪现象

我有两个按钮,一个用于登录,另一个用于登出。如果用户已登录,则显示登出按钮,如果用户未登录,则显示登录按钮。

问题从这里开始;当用户点击登录按钮时,我隐藏登录按钮并显示登出按钮,并将其文本设置为“正在连接..”,如果登录流程成功,我想将文本更改为“登出”。如果流量失败,我会再次隐藏登出并显示登录按钮。 即使登录流程成功,问题仍然是“注销”按钮的文本为“正在连接..”。

这里是我的代码:(我的类不延伸到BaseGameActivity)

mHelper = new GameHelper(this, GameHelper.CLIENT_ALL); 
     GameHelper.GameHelperListener listener = new GameHelper.GameHelperListener() { 
      @Override 
      public void onSignInSucceeded() { 
       signin.setVisibility(View.GONE); 
       signout.setVisibility(View.VISIBLE); 
       signout.setText(R.string.signout); 
      } 
      @Override 
      public void onSignInFailed() { 
       signout.setVisibility(View.GONE); 
       signin.setVisibility(View.VISIBLE); 
      } 
     };mHelper.setup(listener); 

和点击收听:

case R.id.sign_in_button: 
     signout.setText(R.string.loading); 
     signout.setVisibility(View.VISIBLE); 
     mHelper.beginUserInitiatedSignIn(); 
     signin.setVisibility(View.GONE); 
     break; 
case R.id.sign_out_button: 
     mHelper.signOut(); 
     signin.setVisibility(View.VISIBLE); 
     signout.setVisibility(View.GONE); 
     break; 

更新:

签到和signout过程因为我可以将分数提交给排行榜并显示它。

回答

0

我发现这个答案Google Play Game Services: strange sign in behavior

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
super.onActivityResult(requestCode, resultCode, data); 
.... 
<our code here> 
} 

这个答案告诉重写onActivityResult方法,通过这种BaseGameActivity处理回调。但我有我的课延伸到BaseGameActivity和使用

beginUserInitiatedSignIn(); 

不是:

mHelper.beginUserInitiatedSignIn(); 

如果我没有我的课延伸到BaseGameActivity当用户登录并希望在第二次的文本签署注销按钮的状态不变,仍然保持“正在连接..”。

0

如果从BaseGameActivity扩展类,会出现问题吗?如果您使用该课程,可能您的问题(以及未来的其他问题)将会消失。

所有关于登录和注销以及所有游戏API的必要方法都用于扩展该类。

我鼓励你使用它。

这里有谷歌的教程进行登录的,希望它可以帮助你:

https://developers.google.com/games/services/training/signin?hl=es

1

游戏样本(https://github.com/playgameservices/android-basic-samples)最近已更新不延伸BaseGameActivity。我建议您仔细阅读它们,但以下是管理登录所需的高级项目。在用于登录按钮的onClick()方法

mGoogleApiClient = new GoogleApiClient.Builder(this)  
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) 
       .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
       // add other APIs and scopes here as needed 
       .build(); 
    1. 声明类的成员GoogleApiClient mGoogleApiClient和在OnCreate初始化()方法

      mSignInClicked = true; 
      mGoogleApiClient.connect(); 
      
    2. 并用于注销按钮

      Games.signOut(mGoogleApiClient); 
      mGoogleApiClient.disconnect(); 
      showSignInBar(); // also hides the sign out bar 
      
    3. 实现监听器接口GoogleApiClient.ConnectionCallbacksGoogleApiClient.OnConnectionFailedListener

    4. 实现监听器方法:

      public void onConnected(Bundle connectionHint) { 
          showSignOutBar(); 
          // initialize other data that needs a connection. 
      } 
      
      public void onConnectionSuspended(int cause) { 
          // start the connection process again. 
          mGoogleApiClient.connect(); 
      } 
      
      public void onConnectionFailed(ConnectionResult connectionResult) { 
          if (this.mResolvingConnectionFailure) { 
           Log.d(TAG, "onConnectionFailed() ignoring connection failure; already resolving."); 
           return; 
          } 
          // only try to resolve the connection issue if we actually want to connect 
          if (mSignInClicked || mAutoStartSignInFlow) { 
           mAutoStartSignInFlow = false; 
           mSignInClicked = false; 
           mResolvingConnectionFailure = BaseGameUtils 
            .resolveConnectionFailure(this, mGoogleApiClient, 
              connectionResult, RC_SIGN_IN, 
              getString(R.string.signin_other_error)); 
          } 
          showSignInBar(); 
      } 
      
    5. 处理登录意图在onActivityResult()

      public void onActivityResult(int requestCode, int resultCode, Intent data) { 
          switch (requestCode) { 
          case RC_SIGN_IN: 
            mSignInClicked = false; 
            mResolvingConnectionFailure = false; 
            if (resultCode == RESULT_OK) { 
             mGoogleApiClient.connect(); 
            } else { 
             BaseGameUtils.showActivityResultError(this, requestCode, resultCode, 
               R.string.signin_failure, R.string.signin_other_error); 
            } 
            break; 
      
          //….. 
          } 
          super.onActivityResult(requestCode, resultCode, data); 
      } 
      
  • 相关问题