2013-08-29 2 views
7

У меня есть некоторые проблемы, которые эта ссылка говорит о: "An internal error occurred" with integration of Google Plus Login и по этой ссылке: Google plus client "An internal error occured" но последней не жилой для меня, в первом link somebody предложите это решение: Это может произойти, если вы не установили подпись для идентификатора клиента в проекте консоли API или не скопировали неправильное значение ключа из keytoolAndroid-Войти с помощью Google плюс «Внутренняя ошибка произошла»

, но я установил подпись для клиента ID как инструкции по этой ссылке: https://developers.google.com/+/quickstart/android#install-sdk

Я сгенерировал SHA1 из экспорта проекта и взял SHA1 с консоли.

и я создал идентификатор клиента и поставить имя пакета и 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(); 
} 
} 

}

+0

также при запуске Google плюс Sample я столкнулся с тем же сообщением ТОА хотя я создаю для него новый идентификатор клиента и добавляю SHA1 . Мне нужна помощь, что мне делать? – sham

ответ

2

Я решил эту проблему путем получить SHA из CMD не из экспортированного файла потому что я бег проекта с помощью мобильного телефона не через получение APK-файл, когда я должен запустить проект с помощью получения файла АПК я должен получить SHA из экспортированного файла

+0

Получить SHA из cmd? Не могли бы вы прояснить? – l33t

+0

Когда вы тестируете на Eclipse, вам нужно получить отпечаток сертификата SHA-1 сертификата из командной строки: в терминале запустите утилиту Keytool, запиши следующее: keytool -exportcert -alias androiddebugkey -keystore ~ ​​/ .android/debug.keystore -list -v • нажмите кнопку ENTER • пароль: андроида • нажмите клавишу ввода • Скопируйте SHA1 хэш – sham

+0

вы должны заменить это: ~/.android/debug.keystore >> с debug.keystore местоположение на вашем устройстве – sham

0

У меня было такое же сообщение об ошибке. Моя проблема была решена путем изменений

.setScopes ("PLUS_LOGIN")

к

.setScopes (Scopes.PLUS_LOGIN)

Смежные вопросы