2016-10-16 2 views
0

J'ai un problème avec l'objectif. Mon code a réussi quand j'ai essayé de connecter le lecteur avec google play service mais j'essaye beaucoup de choses et je ne peux pas débloquer achivement.C'est mon code et mon logcat.L'erreur pop quand je clique sur le bouton de déconnexion.Est à la fin de mon code quand vous voyez "déverrouiller". Merci à vous de m'avoir aidé.Connexion et réalisation du service Google Play

public class SignInActivity extends AppCompatActivity implements 
    GoogleApiClient.OnConnectionFailedListener, 
    View.OnClickListener { 

private static final String TAG = "SignInActivity"; 
private static final int RC_SIGN_IN = 9001; 

private GoogleApiClient mGoogleApiClient; 
private TextView mStatusTextView; 
private ProgressDialog mProgressDialog; 

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

    // Views 
    mStatusTextView = (TextView) findViewById(R.id.status); 

    // Button listeners 
    findViewById(R.id.sign_in_button).setOnClickListener(this); 
    findViewById(R.id.sign_out_button).setOnClickListener(this); 
    findViewById(R.id.disconnect_button).setOnClickListener(this); 

    // [START configure_signin] 
    // Configure sign-in to request the user's ID, email address, and basic 
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN. 
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .build(); 
    // [END configure_signin] 

    // [START build_client] 
    // Build a GoogleApiClient with access to the Google Sign-In API and the 
    // options specified by gso. 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 


    // [END build_client] 

    // [START customize_button] 
    // Customize sign-in button. The sign-in button can be displayed in 
    // multiple sizes and color schemes. It can also be contextually 
    // rendered based on the requested scopes. For example. a red button may 
    // be displayed when Google+ scopes are requested, but a white button 
    // may be displayed when only basic profile is requested. Try adding the 
    // Scopes.PLUS_LOGIN scope to the GoogleSignInOptions to see the 
    // difference. 
    SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); 
    signInButton.setSize(SignInButton.SIZE_STANDARD); 
    signInButton.setScopes(gso.getScopeArray()); 
    // [END customize_button] 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); 
    if (opr.isDone()) { 
     // If the user's cached credentials are valid, the OptionalPendingResult will be "done" 
     // and the GoogleSignInResult will be available instantly. 
     Log.d(TAG, "Got cached sign-in"); 
     GoogleSignInResult result = opr.get(); 
     handleSignInResult(result); 
    } else { 
     // If the user has not previously signed in on this device or the sign-in has expired, 
     // this asynchronous branch will attempt to sign in the user silently. Cross-device 
     // single sign-on will occur in this branch. 
     showProgressDialog(); 
     opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
      @Override 
      public void onResult(GoogleSignInResult googleSignInResult) { 
       hideProgressDialog(); 
       handleSignInResult(googleSignInResult); 
      } 
     }); 
    } 
} 

// [START onActivityResult] 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
    if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 
    } 
} 
// [END onActivityResult] 

// [START handleSignInResult] 
private void handleSignInResult(GoogleSignInResult result) { 
    Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
    if (result.isSuccess()) { 
     // Signed in successfully, show authenticated UI. 
     GoogleSignInAccount acct = result.getSignInAccount(); 
     //mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName())); 
     updateUI(true); 
    } else { 
     // Signed out, show unauthenticated UI. 
     updateUI(false); 
    } 
} 
// [END handleSignInResult] 

// [START signIn] 
private void signIn() { 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 
} 
// [END signIn] 

// [START signOut] 
private void signOut() { 
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        // [START_EXCLUDE] 
        updateUI(false); 
        // [END_EXCLUDE] 
       } 
      }); 
} 
// [END signOut] 

// [START revokeAccess] 
private void revokeAccess() { 
    Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        // [START_EXCLUDE] 
        updateUI(false); 
        // [END_EXCLUDE] 
       } 
      }); 
} 
// [END revokeAccess] 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    // An unresolvable error has occurred and Google APIs (including Sign-In) will not 
    // be available. 
    Log.d(TAG, "onConnectionFailed:" + connectionResult); 
} 

private void showProgressDialog() { 
    if (mProgressDialog == null) { 
     mProgressDialog = new ProgressDialog(this); 
     mProgressDialog.setMessage(getString(R.string.loading)); 
     mProgressDialog.setIndeterminate(true); 
    } 

    mProgressDialog.show(); 
} 

private void hideProgressDialog() { 
    if (mProgressDialog != null && mProgressDialog.isShowing()) { 
     mProgressDialog.hide(); 
    } 
} 

private void updateUI(boolean signedIn) { 
    if (signedIn) { 
     findViewById(R.id.sign_in_button).setVisibility(View.GONE); 
     findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE); 
    } else { 
     mStatusTextView.setText(R.string.signed_out); 

     findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); 
     findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE); 
    } 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.sign_in_button: 
      signIn(); 
      break; 
     case R.id.sign_out_button: 
      signOut(); 
      break; 
     case R.id.disconnect_button: 
      Games.Achievements.unlock(mGoogleApiClient,"kkkkkseS17QOEAIQAQ"); 
      break; 
    } 
} 

}

10-16 12:37:07.909 2721-2721/com.kingerino.erwan.game E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.kingerino.erwan.game, PID: 2721 
                     java.lang.IllegalArgumentException: GoogleApiClient is not configured to use the API required for this call. 
                      at com.google.android.gms.common.internal.zzac.zzb(Unknown Source) 
                      at com.google.android.gms.internal.zzqp.zzd(Unknown Source) 
                      at com.google.android.gms.games.internal.api.AchievementsImpl.unlock(Unknown Source) 
                      at com.kingerino.erwan.colorun.SignInActivity.onClick(SignInActivity.java:217) 
                      at android.view.View.performClick(View.java:5280) 
                      at android.view.View$PerformClick.run(View.java:21239) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:234) 
                      at android.app.ActivityThread.main(ActivityThread.java:5526) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Répondre

0

Ce qui se passe à cause de cet appel:

case R.id.disconnect_button: 
      Games.Achievements.unlock(mGoogleApiClient,"kkkkkseS17QOEAIQAQ"); 
      break; 

Votre champ de mGoogleApiClient est pour GOOGLE_SIGN_IN_API:

mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

mais vous faites un appelez th at appartient à la portée Games.SCOPE_GAMES.

Je suggère d'instancier mGoogleApiClient avec la bonne portée comme ceci. Le code complet est trouvé dans ce github repo.

+0

Je vais essayer ce code, merci, mais j'ai tellement de problèmes avec cela. Je reviendrai après avoir essayé. –

+0

Pouvez-vous juste moi ce que j'ai besoin de faire dans le diffenerent: –

+0

Désolé de poster encore mais je demande ce que je dois mettre dans le différent: R.string.signin_other_error, R.string.signin_other_error, R.string.achievement_trivial_victory, R .string.app_id, R.string.achievement_trivial_victory –