我想将我的游戏与Google Play服务关联。我已经阅读了android开发人员的文档,并尝试遵循数字键入示例,但仍然无法加载页首横幅。

我已经导入了baseGameUtils,但是我使用andengine,所以我没有使用Google扩展的BaseGameActivity。

到目前为止,我所拥有的:
-GooglePlayServicesUtil.isGooglePlayServicesAvailable(this)返回成功
-startActivityForResult(pickAccountIntent,REQUEST_CODE_PICK_ACCOUNT);运行良好,我从onActivityResult(..)获取了我的帐户名;
-我已经把它放在 list 上了。

<meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />

我的问题是
1.我可以在不扩展BaseGameActivity的情况下使用Google Play服务吗?
2.如果我使用gameHelper.beginUserInitiatedSignIn();在获得帐户名之后,我在登录猫上得到了它。 (这意味着什么?因为下一个问题我仍然出错)
08-25 00:09:01.890: D/BaseGameActivity(11222): isGooglePlayServicesAvailable returned 0
08-25 00:09:01.890: D/BaseGameActivity(11222): beginUserInitiatedSignIn: starting new sign-in flow.
08-25 00:09:01.890: D/BaseGameActivity(11222): All clients now connected. Sign-in successful.
08-25 00:09:01.890: D/BaseGameActivity(11222): All requested clients connected. Sign-in succeeded!

3。我如何使用connect()?我已经阅读并尝试过gameClient和GameClientBuilder,但我不知道如何使用。当我尝试运行此代码。
startActivityForResult(gameHelper.getGamesClient().getAllLeaderboardsIntent(), RC_UNUSED);

我得到了这个日志。
08-25 00:09:05.660: E/AndroidRuntime(11222): java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.

4。要使用排行榜,我知道我必须使用Google Play商店中的代码,例如CgkIx * ** * AIQAA。但我没有找到必须将此代码加载到页首横幅的位置。

很长的问题很抱歉,但是我认为如果有一个仅用于连接并且访问成就或排行榜的示例,它将回答我的所有问题。请不要告诉我看到数字样本,我这样做了,我需要另一个样本代码。

更新,我的代码片段
public class MainMenu extends Activity
implements OnClickListener, GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, GameHelperListener{

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main_menu);
  gameHelper = new GameHelper(this);
}

@Override
public void onClick(View v) {
  if(v.equals(loadData)) {
    if(gameHelper.isSignedIn()) {
      gameHelper.setup(this, GameHelper.CLIENT_GAMES, Scopes.GAMES);
      startActivityForResult(gameHelper.getGamesClient().getAllLeaderboardsIntent(), RC_UNUSED);
    }
  }
  else if(v.equals(loginButton)) {
    Intent googlePicker = AccountPicker.newChooseAccountIntent(null,null,new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE},true,null,null,null,null) ;
    startActivityForResult(googlePicker, REQUEST_CODE_PICK_ACCOUNT);
  }
}

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
  if(requestCode==REQUEST_CODE_RECOVER_PLAY_SERVICES) {
    if (resultCode == RESULT_CANCELED) {
      Toast.makeText(this, "Google Play Services must be installed.", Toast.LENGTH_SHORT).show();
      finish();
    }
    return;
  }
  else if(requestCode==REQUEST_CODE_PICK_ACCOUNT) {
    if (resultCode == RESULT_OK) {
      String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
      gameHelper.beginUserInitiatedSignIn();
    }
    else if (resultCode == RESULT_CANCELED) {
      Toast.makeText(this, "This application requires a Google account.", Toast.LENGTH_SHORT).show();
      finish();
    }
    return;
  }
  super.onActivityResult(requestCode, resultCode, data);
}

// this 2 methods not called, is this also because my code is wrong?
@Override
public void onSignInFailed() {
  Log.d("rush", "on sign in failed");
}

@Override
public void onSignInSucceeded() {
  Log.d("rush", "on sign in succeed");
}

}

最佳答案

  • 是的。看一看BaseGameActivity源,发现它基本上只是包装了GameHelper。您可以自己实现对GameHelper的调用-实际上,您可以直接从BaseGameActivity复制一些代码。我有点困惑,因为看来您的代码已经在使用GameHelper了。看起来您正在将GameHelper调用与BaseGameActivity调用混合在一起。您无法执行此操作,这将导致...出现错误。
  • 您看到的LogCat表示您的所有客户端都已连接。默认调用GameHelper.setup()仅请求游戏客户端。如果您不使用BaseGameActivity并需要其他客户端,请执行以下操作:
    gameHelper = new GameHelper(this);
    gameHelper.setup(this, GameHelper.CLIENT_GAMES | GameHelper.CLIENT_PLUS);
    
  • beginUserInitiatedSignIn()是一种异步方法,完成后将带有回调。您以这种方式运行吗? GameHelper.GameHelperListener是要实现的接口(interface)。如果使用gameHelper,请确保注册回调。在上面的设置调用中看到this吗?这就是注册回调(this是我的主要 Activity )。

    就像我在上面说的,看起来您正在混合GameHelper调用和BaseGameActivity调用。连接的GameHelperBaseGameActivity.mHelper实例,而不是您可能已实例化的任何GameHelper。如果使用的是BaseGameActivity,请确保您也没有使用GameHelper
  • 如果要显示单个排行榜,请使用GamesClient.getLeaderboardIntent(string, int)或方法获取Intent。该字符串是您拥有的代码(CgkIx **** AIQAA)。
    startActivityForResult(gameHelper.getGamesClient().getLeaderboardIntent(
            leaderboard_id, RC_UNUSED);
    

    同样,请确保您使用的是正确的getGamesClient()方法,具体取决于您是直接使用BaseGameActivity还是GameHelper
  • 09-11 20:16