2014-01-03 2 views
4

Я пытаюсь внедрить логин с Google+ в своей моей деятельности. Я следил за учебником google dev, но когда я нажимаю кнопку SignIn, ничего не происходит. Я думаю, что я сделал некоторые ошибки, вот код:Android Google плюс кнопка входа в систему не работает

public class MainActivity extends FragmentActivity implements OnClickListener, 
    ConnectionCallbacks, OnConnectionFailedListener { 

public static final String mAPP_ID = "xxxx"; 
private static final int REQUEST_CODE_RESOLVE_ERR = 9000; 
private static final String TAG = "MainActivity"; 

private ProgressDialog mConnectionProgressDialog; 
private PlusClient mPlusClient; 
private ConnectionResult mConnectionResult; 

private ImageButton googleSignOutButton; 

AssetsExtracter mTask; 

private MainFragment mainFragment; 

static { 
    IMetaioSDKAndroid.loadNativeLibs(); 
} 

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

    if (savedInstanceState == null) { 
     // Add the fragment on initial activity setup 
     mainFragment = new MainFragment(); 
     getSupportFragmentManager().beginTransaction() 
       .add(android.R.id.content, mainFragment).commit(); 
    } else { 
     // Or set the fragment from restored state info 
     mainFragment = (MainFragment) getSupportFragmentManager() 
       .findFragmentById(android.R.id.content); 
    } 

    mPlusClient = new PlusClient.Builder(this, this, this) 
      .setActions("http://schemas.google.com/AddActivity") 
      .setScopes(Scopes.PLUS_LOGIN) 
      .build(); 
    // Progress bar to be displayed if the connection failure is not 
    // resolved. 
    mConnectionProgressDialog = new ProgressDialog(this); 
    mConnectionProgressDialog.setMessage("Signing in..."); 

    mTask = new AssetsExtracter(); 
    mTask.execute(0); 

    findViewById(R.id.sign_in_button).setOnClickListener(this); 
} 

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    if (mConnectionProgressDialog.isShowing()) { 
     // The user clicked the sign-in button already. Start to resolve 
     // connection errors. Wait until onConnected() to dismiss the 
     // connection dialog. 
     if (result.hasResolution()) { 
      try { 
       result.startResolutionForResult(this, 
         REQUEST_CODE_RESOLVE_ERR); 
      } catch (SendIntentException e) { 
       mPlusClient.connect(); 
      } 
     } 
    } 

    // Save the intent so that we can start an activity when the user clicks 
    // the sign-in button. 
    mConnectionResult = result; 

} 

@Override 
public void onConnected(Bundle connectionHint) { 
    // We've resolved any connection errors. 
    mConnectionProgressDialog.dismiss(); 
    Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show(); 

} 

@Override 
public void onDisconnected() { 
    Log.d(TAG, "disconnected"); 

} 

@Override 
protected void onActivityResult(int requestCode, int responseCode, 
     Intent intent) { 
    super.onActivityResult(requestCode, responseCode, intent); 
    if (requestCode == REQUEST_CODE_RESOLVE_ERR 
      && responseCode == RESULT_OK) { 
     mConnectionResult = null; 
     mPlusClient.connect(); 
    } 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mPlusClient.connect(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    mPlusClient.disconnect(); 
} 

@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.sign_in_button 
      && !mPlusClient.isConnected()) { 
     if (mConnectionResult == null) { 
      mConnectionProgressDialog.show(); 
     } else { 
      try { 
       mConnectionResult.startResolutionForResult(
         getParent(), REQUEST_CODE_RESOLVE_ERR); 
      } catch (SendIntentException e) { 
       // Try connecting again. 
       mConnectionResult = null; 
       mPlusClient.connect(); 
      } 
     } 
    } 
} 

} 

EDIT: Я обнаружил, что в onConncectionFailed() метод, если я удалить первый «если()», который проверяет, процессDialog показывает, когда приложение запускается, не нажимая ничего, появляется диалоговое окно google +, предлагающее мне войти в систему. это странно

EDIT: я решил мою проблему, используя обычную кнопку и реализующий OnClick на него, следуя учебник Google Dev

ответ

0

зарегистрировавшиеся вы приложение на консоли разработчиков Google? Вам необходимо убедиться, что ваше приложение Android имеет связанный идентификатор клиента с включенным API Google+.

https://developers.google.com/+/mobile/android/getting-started#step_1_enable_the_google_api

+0

Да, я следил за учебником, и я создал идентификатор клиента, используя SHA1 digest с keytool. Должен ли я вводить идентификатор клиента в приложение в виде строки в файле string.xml? – Cardella

+0

Нет, вам не нужно добавлять идентификатор клиента в любом месте. Идентификатор клиента связан с вашим приложением, поскольку он подписан с вашим ключом. Когда вы создали свой идентификатор клиента, вы должны были ввести отпечаток вашего сертификата приложения. – Lee

+0

Это то, что я сделал, с отпечатком SHA1. Я не знаю, почему логин не работает, и в Logcat ничего не говорится об ошибках или исключениях. – Cardella

0

После выполнения некоторого рытья я понял, что предоставление релиза SHA-1 на консоль только дал мне возможность работать мой проект с рабочим входом кнопки, если и только я сгенерирована подписанной APK и установить APK вручную, а не через Android Studio.
Я решил изменить SHA-1 для отладки решения, но я не смог его изменить до сих пор.

Чтобы изменить алгоритм SHA-1 от версии к версии отладки, так что вы можете установить рабочий/проверяемой APK через Android Studio:

Открыть Google Cloud Console> Откройте диспетчер API> Нажмите на мандатной.
Под идентификаторами клиента OAuth2.0> щелкните Android Client для вашего приложения и измените SHA-1 на свою версию отладки (следуя этим инструкциям, вы должны получить отладочную информацию SHA-1: https://developer.android.com/studio/publish/app-signing.html)
После этого сохраните новые учетные данные в Cloud Console и вернуться на экран для создания файла конфигурации. Вы должны заметить свой измененный SHA-1. Теперь создайте файл конфигурации и вставьте его в файл /каталог. Очистите, перестройте и запустите проект, и ваша кнопка входа должна теперь работать должным образом.

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