2014-12-19 3 views
0

Play 서비스 리더 보드에 점수를 제출할 때 문제가 발생했습니다. 내 MainActivity에서 사용자가 성공적으로 로그인 한 다음 GameScreen 활동에서 점수를 제출하려고 시도하지만 실패합니다. (... 내 질문은 연결을 유지합니까 아니면 제출하기 전에 사용자를 다시 연결해야합니까?Play 서비스가 실행되지 않음

주요 활동.

public class MainActivity extends BaseGameActivity implements View.OnClickListener,  GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

Button siButton; 
private GoogleApiClient mGoogleApiClient; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) 
      .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
      .build(); 

    siButton = (Button) findViewById(R.id.sign_out_button); 
    siButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if (view.getId() == R.id.sign_in_button) { 
       beginUserInitiatedSignIn(); 
      } else if (view.getId() == R.id.sign_out_button) { 
       signOut(); 
       findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); 
       findViewById(R.id.sign_out_button).setVisibility(View.GONE); 
      } 
     } 
    });  
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public void onSignInSucceeded() { 
    findViewById(R.id.sign_in_button).setVisibility(View.GONE); 
    findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE); 
} 

@Override 
public void onSignInFailed() { 
    findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); 
    findViewById(R.id.sign_out_button).setVisibility(View.GONE); 
} 

@Override 
public void onClick(View v) { 

} 

@Override 
public void onConnected(Bundle bundle) { 

} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 

} 

}

GAMESCREEN

public class GameScreen extends BaseGameActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

private int c; 
private GoogleApiClient mGoogleApiClient; 
TextView counter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game_screen); 
    setRequestedClients(BaseGameActivity.CLIENT_GAMES | BaseGameActivity.CLIENT_APPSTATE); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) 
      .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
      .build(); 



private void progressSetup() { 
    Thread timerThread = new 
      Thread() { 
       @Override 
       public void run() { 
        try { 
         while (mbActive && (waited < TIMER_RUNTIME)) { 
          sleep(THREAD_SLEEP); 
          if (mbActive) { 
           waited += 100; 
           updateProgress(waited); 
           if (waited > 9999) { 
            mbActive = false; 
            gameOver(); 
           } 
          } 
         } 
        } catch (InterruptedException e) { 
         Log.d("fail", "failure" + e); 
        } 
       } 
      }; 
    startTread = false; 
    timerThread.start(); 
} 

private void updateProgress(final int timePassed) { 
    if (null != mProgressBar) { 
     progress = mProgressBar.getMax() * timePassed/TIMER_RUNTIME; 
     mProgressBar.setProgress(progress); 
    } 
} 

//game over 
private void gameOver() { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() {    
      upDateScore(); 
     } 
    }); 
} 

private void upDateScore(){ 
    if (mGoogleApiClient.isConnected()) { 
     Games.Leaderboards.submitScore(mGoogleApiClient, getString(R.string.app_id), c); 
     Log.d("connectted....................................................."); 
    } else {   
     Log.d("not connectted....................................................."); 
    } 
} 

@Override 
public void onBackPressed() { 
    Intent home = new Intent(GameScreen.this, MainActivity.class); 
    home.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
    startActivity(home); 
} 

@Override 
public void onConnected(Bundle bundle) { 
} 

@Override 
public void onConnectionSuspended(int i) { 
} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
} 

@Override 
public void onSignInFailed() { 
} 

@Override 
public void onSignInSucceeded() { 
} 

}

답변

2

Games.Leaderboards.submitScore (mGoogleApiClient, getString (R.string.app_id)) 메서드에서 getString (R.string.app_id)을 LEADERBOARD id로 바꿉니다.

리더 ID는 다음과 같습니다 : "CgkI0tXt-q0HEA ****"

0

이반 Syabro이 권리입니다. LEADERBOARD_ID를 사용해야합니다 (Leaderboards in Android - Updating the player's score 참조).

개발자 콘솔의 게임 서비스 섹션에서 제공된 버튼을 사용하여 리더 보드 및 업적 ID를 xml 파일로 쉽게 내보낼 수 있습니다.

일반적으로 둘 이상의 활동이있는 게임 서비스를 사용하면 각각의 시작시 개별적으로 로그인 할 때 추가 대기 기간이 발생할 수 있습니다. 따라서, 아는 한, 단편을 사용한 구현이 선호됩니다.이 유명한 예제 playgameservices/android-basic-samples을 참조하십시오.

관련 문제