Java android的Google+登录不工作,错误代码4
我遵循了有关如何设置google+登录的说明。我做了每一步,基本上是复制和粘贴代码 下面是一个场景。我在两台不同的计算机上开发。我的控制台中有两个不同的客户端ID。一台用于计算机A,一台用于计算机B 当我安装并启动应用程序时,它将尝试登录,但由于logcat的以下错误而失败。如果我退出应用程序并重新启动,它将正常登录。当它失败时,它似乎试图启动一个活动,但该活动从未启动。这是航海日志Java android的Google+登录不工作,错误代码4,java,android,google-api,google-plus,google-play-services,Java,Android,Google Api,Google Plus,Google Play Services,我遵循了有关如何设置google+登录的说明。我做了每一步,基本上是复制和粘贴代码 下面是一个场景。我在两台不同的计算机上开发。我的控制台中有两个不同的客户端ID。一台用于计算机A,一台用于计算机B 当我安装并启动应用程序时,它将尝试登录,但由于logcat的以下错误而失败。如果我退出应用程序并重新启动,它将正常登录。当它失败时,它似乎试图启动一个活动,但该活动从未启动。这是航海日志 06-04 10:14:57.801 19948-19948/carbon.android.game.legi
06-04 10:14:57.801 19948-19948/carbon.android.game.legions D/AccountFragment﹕ ResolveSignInError ErrorCode:4
06-04 10:14:57.801 602-823/? I/ActivityManager﹕ START u0 {cmp=com.google.android.gms/.plus.activity.AccountSignUpActivity (has extras)} from pid -1
06-04 10:14:57.811 178-646/? D/audio_hw_primary﹕ select_devices: out_snd_device(2: speaker) in_snd_device(0: )
06-04 10:14:57.811 178-646/? D/ACDB-LOADER﹕ ACDB -> send_afe_cal
06-04 10:14:57.821 602-2816/? I/ActivityManager﹕ START u0 {act=com.google.android.gms.common.account.CHOOSE_ACCOUNT pkg=com.google.android.gms cmp=com.google.android.gms/.common.account.AccountPickerActivity (has extras)} from pid 20027
06-04 10:14:57.941 20027-20031/? D/dalvikvm﹕ GC_CONCURRENT freed 601K, 7% free 9304K/9940K, paused 2ms+2ms, total 19ms
06-04 10:14:58.071 949-959/? W/GLSUser﹕ GoogleAccountDataService.getToken()
我做错了什么?我一个字一个字地遵循指南,基本上是复制并粘贴代码。唯一的区别是我在一个片段中,而不是一个活动。但是,这不重要
代码如下:
public class AccountFragment extends Fragment implements View.OnClickListener,
ConnectionCallbacks,
OnConnectionFailedListener {
private static final int RC_SIGN_IN = 1524;
private GoogleApiClient googleApiClient;
private boolean intentInProgress;
private boolean signInClicked;
private ConnectionResult connectionResult;
private SignInButton signInButton;
public AccountFragment() {}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "The connection failed: " + connectionResult.getErrorCode());
if (!this.intentInProgress) {
this.connectionResult = connectionResult;
if (this.signInClicked) {
this.resolveSignInError();
}
}
}
@Override
public void onStart() {
super.onStart();
this.googleApiClient.connect();
}
@Override
public void onStop() {
super.onStop();
if (this.googleApiClient.isConnected()) {
this.googleApiClient.disconnect();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.googleApiClient = new GoogleApiClient.Builder(this.getActivity())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API)
.addScope(Plus.SCOPE_PLUS_PROFILE)
.build();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
if (!this.googleApiClient.isConnecting() && !this.googleApiClient.isConnected()) {
this.signInClicked = true;
this.resolveSignInError();
} else {
Log.d(TAG, "OnClick else");
}
break;
default:
break;
}
}
@Override
public void onConnected(Bundle bundle) {
this.signInClicked = false;
Person currentPerson = Plus.PeopleApi.getCurrentPerson(this.googleApiClient);
Log.d(TAG, "User connected: " + currentPerson.getDisplayName());
Log.d(TAG, "User id: " + currentPerson.getId());
Toast.makeText(this.getActivity(), "User connected: " + currentPerson.getDisplayName(), Toast.LENGTH_SHORT).show();
}
@Override
public void onConnectionSuspended(int i) {
this.googleApiClient.connect();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RC_SIGN_IN) {
if (resultCode != Activity.RESULT_OK) {
this.signInClicked = false;
}
this.intentInProgress = false;
if (!this.googleApiClient.isConnecting()) {
this.googleApiClient.connect();
}
}
}
private void resolveSignInError() {
if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this.getActivity()) != ConnectionResult.SUCCESS) {
Log.e(TAG, "Google Play Services is not available.");
}
Log.d(TAG, "ResolveSignInError ErrorCode:" + this.connectionResult.getErrorCode());
if (this.connectionResult.hasResolution()) {
this.intentInProgress = true;
try {
this.connectionResult.startResolutionForResult(this.getActivity(), RC_SIGN_IN);
} catch (SendIntentException e) {
e.printStackTrace();
this.intentInProgress = false;
this.googleApiClient.connect();
}
}
}
}
我解决了我的问题 有几个问题 通过我所有的测试,我一直在尝试登录。有时也很成功。不知何故,即使我的应用程序没有登录,我仍然保持身份验证。我增加了退出和退出的功能。尝试再次登录后,将启动活动以解决任何错误。 我也有正在讨论的问题。我的主机活动正在消耗我的onActivityResult。。。从我的connectionResult.startResolutionForResult。。。;。所以,经过一些尝试和错误,我终于找到了解决这个问题的办法。这个问题有助于解决问题,但没有完全解决问题。请看看那个问题,我是如何解决这个问题的。 第一课,确保您在测试时注销并取消访问。如果您遇到这些问题,请尝试然后重新登录。在我的情况下,我通过执行以下步骤来解决问题,这是一个老问题,但我的其他人也有此问题 在android开发中遵循这些步骤 打开凭证页面。 单击添加凭据>OAuth 2.0客户端ID。 选择Android。 并填写指纹和包裹名称。 单击创建。 然后将有来自谷歌的成功歌唱 希望这可以解决您的问题!!!
如果发生任何问题,请给我发短信 不确定这是否是您的问题,但我最初遇到了类似的问题,因为我的活动设置为android:launchMode=singleInstance。这会阻止它生成所需的子活动。没有错误表明这是问题所在,因此发现害虫只是默认标准是一种痛苦。