gpt4 book ai didi

Android-Sign in via Google plus "An internal error has occured"

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:47 25 4
gpt4 key购买 nike

我有这个链接谈论的一些问题: "An internal error occurred" with integration of Google Plus Login这个链接: Google plus client "An internal error occured"但最新的对我没用,在第一个链接中有人建议这个解决方案:如果您没有在 API 控制台项目中为客户端 ID 设置签名,或者如果您从 keytool 复制了错误的键值,就会发生这种情况

但我按照此链接中的说明设置了客户端 ID 的签名: https://developers.google.com/+/quickstart/android#install-sdk

我通过导出项目生成 SHA1,并从控制台获取 SHA1。

我创建了客户端 ID 并输入了包名和 SHA1

当我按下登录按钮时,我收到了这条 Toast 消息:“发生内部错误”

请问我需要什么办法来解决这个问题

最后这是我的代码

public class GoogleActivity extends Activity implements
ConnectionCallbacks, OnConnectionFailedListener, OnClickListener,
OnAccessRevokedListener, PlusClient.OnPersonLoadedListener {

private static final String TAG = "SignInTestActivity";

// A magic number we will use to know that our sign-in error
// resolution activity has completed.
private static final int OUR_REQUEST_CODE = 49404;

// The core Google+ client.
private PlusClient mPlusClient;

// A flag to stop multiple dialogues appearing for the user.
private boolean mResolveOnFail;

// We can store the connection result from a failed connect()
// attempt in order to make the application feel a bit more
// responsive for the user.
private ConnectionResult mConnectionResult;

// A progress dialog to display when the user is connecting in
// case there is a delay in any of the dialogs being ready.
private ProgressDialog mConnectionProgressDialog;

// Person information.
String firstName,lastName,Nationality,gender,email,birthDay;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_google);
// We pass through this for all three arguments, specifying the:
// 1. Context
// 2. Object to call onConnected and onDisconnected on
// 3. Object to call onConnectionFailed on
mPlusClient = new PlusClient.Builder(this, this, this)
.setVisibleActivities("http://schemas.google.com/BuyActivity")
.build();

// We use mResolveOnFail as a flag to say whether we should trigger
// the resolution of a connectionFailed ConnectionResult.
mResolveOnFail = false;

// Connect our sign in, sign out and disconnect buttons.
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
findViewById(R.id.button2).setVisibility(View.INVISIBLE);
findViewById(R.id.button3).setVisibility(View.INVISIBLE);

// Configure the ProgressDialog that will be shown if there is a
// delay in presenting the user with the next sign in step.
mConnectionProgressDialog = new ProgressDialog(this);
mConnectionProgressDialog.setMessage("Signing in...");
}

@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "Start");
// Every time we start we want to try to connect. If it
// succeeds we'll get an onConnected() callback. If it
// fails we'll get onConnectionFailed(), with a result!
mPlusClient.connect();
}

@Override
protected void onStop() {
super.onStop();
Log.v(TAG, "Stop");
// It can be a little costly to keep the connection open
// to Google Play Services, so each time our activity is
// stopped we should disconnect.
mPlusClient.disconnect();
}

@Override
public void onConnectionFailed(ConnectionResult result) {
Log.v(TAG, "ConnectionFailed");
// Most of the time, the connection will fail with a
// user resolvable result. We can store that in our
// mConnectionResult property ready for to be used
// when the user clicks the sign-in button.
if (result.hasResolution()) {
mConnectionResult = result;
if (mResolveOnFail) {
// This is a local helper function that starts
// the resolution of the problem, which may be
// showing the user an account chooser or similar.
startResolution();
}
}
}

@Override
public void onConnected(Bundle bundle) {
//--- We can get the oAuth 2.0 access token we are using.
Log.v(TAG, "Connected.");

// Turn off the flag, so if the user signs out they'll have to
// tap to sign in again.
mResolveOnFail = false;

// Hide the progress dialog if its showing.
mConnectionProgressDialog.dismiss();

// Hide the sign in button, show the sign out buttons.
findViewById(R.id.button1).setVisibility(View.INVISIBLE);
findViewById(R.id.button2).setVisibility(View.VISIBLE);
findViewById(R.id.button3).setVisibility(View.VISIBLE);
String accountName = mPlusClient.getAccountName();

//-- fetch person info
mPlusClient.loadPerson(this, "me");

Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG).show();

// Retrieve the oAuth 2.0 access token.
final Context context = this.getApplicationContext();
AsyncTask task = new AsyncTask() {
@Override
protected Object doInBackground(Object... params) {
String scope = "oauth2:" + Scopes.PLUS_LOGIN;

try {
// We can retrieve the token to check via
// tokeninfo or to pass to a service-side
// application.
String token = GoogleAuthUtil.getToken(context,
mPlusClient.getAccountName(), scope);
} catch (UserRecoverableAuthException e) {
// This error is recoverable, so we could fix this
// by displaying the intent to the user.
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (GoogleAuthException e) {
e.printStackTrace();
}
return null;
}
};

task.execute((Void) null);
}

@Override
public void onDisconnected() {
// Bye!
Log.v(TAG, "Disconnected. Bye!");
}

protected void onActivityResult(int requestCode, int responseCode,
Intent intent) {
Log.v(TAG, "ActivityResult: " + requestCode);
if (requestCode == OUR_REQUEST_CODE && responseCode == RESULT_OK) {
// If we have a successful result, we will want to be able to
// resolve any further errors, so turn on resolution with our
// flag.
mResolveOnFail = true;
// If we have a successful result, lets call connect() again. If
// there are any more errors to resolve we'll get our
// onConnectionFailed, but if not, we'll get onConnected.
mPlusClient.connect();
} else if (requestCode == OUR_REQUEST_CODE && responseCode != RESULT_OK) {
// If we've got an error we can't resolve, we're no
// longer in the midst of signing in, so we can stop
// the progress spinner.
mConnectionProgressDialog.dismiss();
}
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
Log.v(TAG, "Tapped sign in");
if (!mPlusClient.isConnected()) {
// Show the dialog as we are now signing in.
mConnectionProgressDialog.show();
// Make sure that we will start the resolution (e.g. fire the
// intent and pop up a dialog for the user) for any errors
// that come in.
mResolveOnFail = true;
// We should always have a connection result ready to resolve,
// so we can start that process.
if (mConnectionResult != null) {
startResolution();
} else {
// If we don't have one though, we can start connect in
// order to retrieve one.
mPlusClient.connect();
}
}
break;
case R.id.button2:
Log.v(TAG, "Tapped sign out");
// We only want to sign out if we're connected.
if (mPlusClient.isConnected()) {
// Clear the default account in order to allow the user
// to potentially choose a different account from the
// account chooser.
mPlusClient.clearDefaultAccount();

// Disconnect from Google Play Services, then reconnect in
// order to restart the process from scratch.
mPlusClient.disconnect();
mPlusClient.connect();

// Hide the sign out buttons, show the sign in button.
findViewById(R.id.button1).setVisibility(View.VISIBLE);
findViewById(R.id.button2)
.setVisibility(View.INVISIBLE);
findViewById(R.id.button3).setVisibility(
View.INVISIBLE);
}
break;
case R.id.button3:
Log.v(TAG, "Tapped disconnect");
if (mPlusClient.isConnected()) {
// Clear the default account as in the Sign Out.
mPlusClient.clearDefaultAccount();

// Go away and revoke access to this entire application.
// This will call back to onAccessRevoked when it is
// complete as it needs to go away to the Google
// authentication servers to revoke all token.
mPlusClient.revokeAccessAndDisconnect(this);
}
break;
default:
// Unknown id.
}
}

@Override
public void onAccessRevoked(ConnectionResult status) {
// mPlusClient is now disconnected and access has been revoked.
// We should now delete any data we need to comply with the
// developer properties. To reset ourselves to the original state,
// we should now connect again. We don't have to disconnect as that
// happens as part of the call.
mPlusClient.connect();

// Hide the sign out buttons, show the sign in button.
findViewById(R.id.button1).setVisibility(View.VISIBLE);
findViewById(R.id.button2).setVisibility(View.INVISIBLE);
findViewById(R.id.button3).setVisibility(View.INVISIBLE);
}

/**
* A helper method to flip the mResolveOnFail flag and start the resolution
* of the ConnenctionResult from the failed connect() call.
*/

private void startResolution() {
try {
// Don't start another resolution now until we have a
// result from the activity we're about to start.
mResolveOnFail = false;
// If we can resolve the error, then call start resolution
// and pass it an integer tag we can use to track. This means
// that when we get the onActivityResult callback we'll know
// its from being started here.
mConnectionResult.startResolutionForResult(this, OUR_REQUEST_CODE);
} catch (SendIntentException e) {
// Any problems, just try to connect() again so we get a new
// ConnectionResult.
mPlusClient.connect();
}
}

@Override
public void onPersonLoaded(ConnectionResult status, Person person) {
// TODO Auto-generated method stub

//fetch(status, person);
try
{
if (status.getErrorCode() == ConnectionResult.SUCCESS)
{
Log.d(TAG, "Display Name: " + person.getDisplayName());

firstName = person.getName().getGivenName();
Toast.makeText(this, firstName, Toast.LENGTH_LONG).show();

lastName = person.getName().getFamilyName();
Toast.makeText(this, lastName, Toast.LENGTH_LONG).show();


if(person.getGender() == 0)
gender = "male";
else if(person.getGender() == 1)
gender = "female";
else
gender = "other";
Toast.makeText(this, gender, Toast.LENGTH_LONG).show();


List<Person.PlacesLived> cites =person.getPlacesLived();
if(cites!=null)
{
Nationality = cites.get(0).toString();
Toast.makeText(this, Nationality, Toast.LENGTH_LONG).show();
}
else
Toast.makeText(this, "Null Nationality", Toast.LENGTH_LONG).show();

birthDay = person.getBirthday();
Toast.makeText(this, birthDay, Toast.LENGTH_LONG).show();

List<Emails> emails = person.getEmails();
if(emails !=null)
{
email = emails.get(0).getValue();
Toast.makeText(this, email, Toast.LENGTH_LONG).show();
}
else
Toast.makeText(this, person.getDisplayName(), Toast.LENGTH_LONG).show();

/*TextView name =(TextView) findViewById(R.id.textView1);
TextView Gender =(TextView) findViewById(R.id.textView2);
TextView mail =(TextView) findViewById(R.id.textView3);
TextView BD =(TextView) findViewById(R.id.textView4);
TextView Current =(TextView) findViewById(R.id.textView5);

name.setText(person.getName().getFamilyName());
Gender.setText(person.getGender());
mail.setText(person.getEmails().get(0).toString());
BD.setText(person.getBirthday());
Current.setText(person.getCurrentLocation());*/

}
else
Toast.makeText(this, "no result", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
Toast.makeText(this, "error", Toast.LENGTH_LONG).show();
}
}

最佳答案

我通过从 cmd 而不是从导出文件获取 SHA 解决了这个问题,因为我通过移动设备运行项目而不是通过获取 APK 文件当我应该通过获取 apk 文件运行项目时我必须从导出文件获取 SHA

关于Android-Sign in via Google plus "An internal error has occured",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com