3

ゲームを Google Play サービスに接続したい。Android 開発者のドキュメントを読んで、数値型のサンプルを試してみましたが、リーダーボードを読み込めません。

私は baseGameUtils をインポートしていますが、andengine を使用しているため、Google の extends BaseGameActivity は使用しませんでした。

私が今まで持っているもの:
- GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) 成功を返す
- startActivityForResult(pickAccountIntent, REQUEST_CODE_PICK_ACCOUNT); うまく機能しており、onActivityResult(..); からアカウント名を取得しました。
- 私はすでにこれを私のマニフェストに入れています。

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

私の質問は
1. BaseGameActivity を拡張せずに Google Play サービスを使用できますか?
2. gameHelper.beginUserInitiatedSignIn(); を使用する場合 アカウント名を取得した後、log cat でこれを取得しました。(これはどういう意味ですか?次の質問でまだエラーが発生するため)

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 . リーダーボードを使用するには、CgkIx* ** *AIQAA などの Google Play ストアのコードを使用する必要があります。しかし、リーダーボードをロードするためにこのコードを配置する必要がある場所が見つかりませんでした。

長い質問で申し訳ありませんが、接続してアチーブメントまたはリーダーボードにアクセスするためだけのサンプルがあれば、私の質問すべてに答えることができると思います。数値入力のサンプルを見るように言わないでください。私はそれを実行しましたが、別のサンプル コードが必要です。

更新、切り取ったコード

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");
}

}
4

2 に答える 2

2
  1. はい。ソースを見BaseGameActivityて、大部分がラップされていることを確認してくださいGameHelper。呼び出しを自分で実装できGameHelperます。実際、コードを から直接コピーすることもできますBaseGameActivity。あなたのコードはすでに を使用しているように見えるので、少し混乱していますGameHelperGameHelper通話と通話が混在しているようですBaseGameActivity。あなたはこれを行うことができず、あなたが得ているようなエラーが発生します。

  2. 表示される LogCat は、すべてのクライアントが接続されていることを意味します。GameHelper.setup()ゲームクライアントをリクエストするだけのデフォルトの呼び出し。使用しておらずBaseGameActivity、別のクライアントが必要な場合は、次のようにします。

    gameHelper = new GameHelper(this);
    gameHelper.setup(this, GameHelper.CLIENT_GAMES | GameHelper.CLIENT_PLUS);
    
  3. beginUserInitiatedSignIn()終了時にコールバックを持つ非同期メソッドです。そのように実行していますか?GameHelper.GameHelperListener実装するインターフェースです。gameHelper を使用している場合は、必ずコールバックを登録してください。this上記のセットアップ コールのを参照してください。それはコールバックを登録しています(this私の主な活動です)。

    上で述べたように、GameHelper通話とBaseGameActivity通話が混在しているようです。GameHelper接続されているのはインスタンスであり、インスタンスBaseGameActivity.mHelper化したものでGameHelperはありません。BaseGameActivity使用している場合は、使用していないことを確認してくださいGameHelper

  4. 単一のリーダーボードを表示する場合は、GamesClient.getLeaderboardIntent(string, int)または メソッドを使用して を取得しIntentます。文字列はあなたが持っているコードです (CgkIx****AIQAA)。

    startActivityForResult(gameHelper.getGamesClient().getLeaderboardIntent(
            leaderboard_id, RC_UNUSED);
    

    繰り返しますが、または直接getGamesClient()使用しているかどうかに応じて、正しい方法を使用していることを確認してください。BaseGameActivityGameHelper

于 2013-08-25T00:07:14.517 に答える
0

BaseGameActivity なしで GameHelper を使用する方法の基本情報は次のとおりです。

https://developers.google.com/games/services/android/init#using_gamehelper_without_basegameactivity

于 2014-08-06T07:43:35.757 に答える