У меня возникло множество проблем с входом в Google API. Я видел много возможных реализаций, и ни один из них действительно не работает.Регистрация Google Google API в
Вот # 1 из here:
@Override
public void onConnected(Bundle bundle) {
Log.d("MA", "onConnected");
mSignInOut.setVisibility(View.VISIBLE);
mSignInOut.setText(getResources().getText(R.string.signOut));
mSignInOut.setTextColor(getResources().getColor(R.color.signOutButton));
mLoggedInMessage.setText(getResources().getText(R.string.loggedInMessage) + " " + getUsername() + "!");
}
protected boolean isSignedIn() {
return (mGoogleApiClient != null && mGoogleApiClient.isConnected());
}
public void signInOut() {
if(isSignedIn()) {
Log.d("MA", "signinout: signing out");
mSignInClicked = false;
Games.signOut(mGoogleApiClient);
mGoogleApiClient.disconnect();
onLoggedOut();
} else {
Log.d("MA", "signinout: signing in");
mSignInClicked = true;
mGoogleApiClient.connect();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RQC_SIGN_IN) {
mResolvingError = false;
if (resultCode == RESULT_OK) {
// Make sure the app is not already connected or attempting to connect
if (!mGoogleApiClient.isConnecting() &&
!mGoogleApiClient.isConnected()) {
mGoogleApiClient.connect();
}
}
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if (mResolvingError) {
// Already attempting to resolve an error.
return;
} else if (result.hasResolution()) {
try {
mResolvingError = true;
result.startResolutionForResult(this, RQC_SIGN_IN);
} catch (IntentSender.SendIntentException e) {
// There was an error with the resolution intent. Try again.
mGoogleApiClient.connect();
}
} else {
// Show dialog using GooglePlayServicesUtil.getErrorDialog()
showErrorDialog(result.getErrorCode());
mResolvingError = true;
}
}
// The rest of this code is all about building the error dialog
/* Creates a dialog for an error message */
private void showErrorDialog(int errorCode) {
// Create a fragment for the error dialog
ErrorDialogFragment dialogFragment = new ErrorDialogFragment();
// Pass the error that should be displayed
Bundle args = new Bundle();
args.putInt("DIALOG_ERROR", errorCode);
dialogFragment.setArguments(args);
dialogFragment.show(getSupportFragmentManager(), "errordialog");
}
/* Called from ErrorDialogFragment when the dialog is dismissed. */
public void onDialogDismissed() {
mResolvingError = false;
}
/* A fragment to display an error dialog */
public static class ErrorDialogFragment extends DialogFragment {
public ErrorDialogFragment() { }
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Get the error code and retrieve the appropriate dialog
int errorCode = this.getArguments().getInt("DIALOG_ERROR");
return GooglePlayServicesUtil.getErrorDialog(errorCode,
this.getActivity(), RQC_SIGN_IN);
}
@Override
public void onDismiss(DialogInterface dialog) {
((MainActivity)getActivity()).onDialogDismissed();
}
}
Проблема здесь, когда я подписываю, и снова после того, как приложение запустить пользовательский интерфейс не меняется/onConnected не называется, но, когда я включаю чтобы он снова попытался подключиться, он немедленно вызывает onConnected. Он работал, когда я положил super.onActivityResult(requestCode, resultCode, data);
в начало onActivityResult
, но затем он соединяется и после успешного соединения он, кажется, снова пытается подключиться, но перед тем, как выбрать аккаунт, окно исчезнет. EDIT: Также не отображается диалоговое окно с ошибкой, когда что-то пошло не так.
номер 2 совсем то же самое, но с разными onActivityResult
и onConnectionFailed
методы, он получил от here:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RQC_SIGN_IN) {
mSignInClicked = false;
mResolvingError = false;
Log.d("MA", "resultCode: " + resultCode);
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
} else {
Log.d("MA", "onActivityResult, resultCode != -1");
BaseGameUtils.showActivityResultError(this, requestCode, resultCode, R.string.signin_other_error);
}
}
@Override
public void onConnectionFailed(ConnectionResult result) {
// If the sign in button was clicked or if auto sign-in is enabled,
// launch the sign-in flow
Log.d("BFA", "onConnectionFailed, connectionresult: " + result.getErrorCode());
if (mResolvingError) {
Log.d("BFA", "Already attempting to resolve an error.");
// Already attempting to resolve an error.
return;
}
if (mSignInClicked || mAutoLogin) {
mResolvingError = true;
mSignInClicked = false;
mAutoLogin = false;
if (!BaseGameUtils.resolveConnectionFailure(this, mGoogleApiClient, result,
RQC_SIGN_IN, getString(R.string.signin_other_error))) {
Log.d("MA", "resolveConnectionFailure false");
mResolvingError = false;
}
}
}
При таком подходе я получаю сообщение об ошибке после выбора учетной записи, но получать авторизовались потом все-таки.
Кто-нибудь мне помогает?