Как достичь google плюс функции входа в систему на собственной кнопке в Android

Привет, я пытаюсь изучить функции входа в Google в Android. Я сделал это и работал нормально, как ожидалось.

Здесь он показывает кнопку по умолчанию в Google+ для подписания, вот макет и скриншот.

<com.google.android.gms.common.SignInButton
    android:id="@+id/loginGoogleButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    />

enter image description here

Вопрос

Я не хочу, чтобы этот стиль был на моей кнопке. Я хочу, чтобы простая кнопка, такая как Android,

<Button
    android:id="@+id/loginFaceboookButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:background="@drawable/button_background"
    android:text="@string/login_with_facebook"
    android:textColor="@android:color/white" />

Как эта кнопка может использовать функцию входа в Google или любой способ сделать com.google.android.gms.common.SignInButton простой кнопку по умолчанию, как в android.

Спасибо заранее.

Ответ 1

Правовые вопросы в стороне, SignInButton фактически не выполняет какую-либо специальную функцию, это просто визуальный виджет. Из docs:

Кнопка входа в систему Google для аутентификации пользователя. Обратите внимание, что это класс обрабатывает только визуальные аспекты кнопки. Чтобы активировать действие, зарегистрировать прослушиватель, используя setOnClickListener(OnClickListener).

То есть, если у вас есть образец Google+ (т.е. используя GoogleApiClient, связанные обратные вызовы, любой из API-интерфейсов от com.google.android.gms.plus, & c), вы можете заменить SignInButton на любую другую обычную кнопку и он будет работать точно так же.


О образце кода: извините, из формулировки вашего вопроса я предположил, что у вас уже была эта часть.

Вы можете найти учебник по интеграции G + здесь, в частности this - это часть входа в систему. Кроме того, образец проекта распространяется как часть SDK (<android-sdk>\extras\google\google_play_services\samples\plus) со всем готовым к работе (хотя вам нужно включить API в Google Developers Console, как описано в ссылке, чтобы он работал правильно).

Затем вы можете просто поменять SignInButton на обычную кнопку.

Ответ 2

В https://developers.google.com/+/web/signin/customize это написано:

Настройка кнопки входа

Вы можете настроить кнопку входа, чтобы она лучше соответствовала вашим дизайн сайта. Вы должны следовать рекомендациям по брендингу и использовать соответствующие цвета и значки в пользовательской кнопке. Вы также должны убедитесь, что ваша кнопка отображается с той же выдачей, что и другие сторонние параметры входа. В руководстве по брендингу также отображается значок которые вы можете использовать для создания своей пользовательской кнопки.

Он ссылается на принципы брендинга, в которых указывается

Настоящие рекомендации предоставляют вам спецификацию дизайна для различных Кнопки и значки Google+. Вы можете использовать эти активы в своем приложении (веб-сайт или мобильное приложение) без предварительного одобрения, если вы следуете этим основные принципы. Использование брендов Google способами, которые явно не охватываются настоящим документом не допускается без предварительного письменного согласия Google (см. Руководство для стороннего использования бренда Google Особенности для получения дополнительной информации). Использование кнопки также должно соответствовать наша политика кнопок.

В основном это означает, что вам даже не разрешено использовать код Google+ с помощью вашей собственной кнопки, если только вы не получите "письменное согласие", которое, я думаю, будет трудно приобрести.

(Вы можете использовать кнопку "custom", если ваша кнопка соответствует рекомендациям, а это не так).

Я не хочу, чтобы этот стиль был на моей кнопке.

Вам очень нужно.
Вы можете попытаться обойти это, но ваше приложение не сохранится в Play Store долго, и ваша учетная запись разработчика может столкнуться с последствиями (это мое собственное предположение, хотя)).

Ответ 3

реализует ConnectionCallbacks, OnConnectionFailedListener, чем настройка вашей обычной кнопки


btnGoogle.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if (internetChecker.isConnectingToInternet() == false) {
                        Toast.makeText(getApplicationContext(),getString(R.string.interet_connectivity),Toast.LENGTH_SHORT).show();
                    } else {
                        signInWithGplus();
                    }
} }); /** * Sign-in into google * */ private void signInWithGplus() { if (!mGoogleApiClient.isConnecting()) { mSignInClicked = true; resolveSignInError(); } } protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } protected void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } /** * Method to resolve any signin errors * */ private void resolveSignInError() { try { if (mConnectionResult.hasResolution()) { try { mIntentInProgress = true; mConnectionResult.startResolutionForResult(this, RC_SIGN_IN); } catch (SendIntentException e) { mIntentInProgress = false; mGoogleApiClient.connect(); } } } catch (Exception e) { // TODO: handle exception Log.d("error",e.toString()); return; } }

@Override public void onConnectionFailed(ConnectionResult result) { if (!result.hasResolution()) { Log.d("result.toString()", result.toString()); GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this,0).show(); return; } if (!mIntentInProgress) { // Store the ConnectionResult for later usage mConnectionResult = result; if (mSignInClicked) { // The user has already clicked 'sign-in' so we attempt to // resolve all // errors until the user is signed in, or they cancel. resolveSignInError(); } }

} @Override public void onConnected(Bundle arg0) { Log.d("onConnected", "onConnected::"+session.getIsRequestLogout()); if (!session.getIsRequestLogout()) { mSignInClicked = false; // Get user information getGoogleProfileInformation(); // Update the UI after signin

}
else
{
    signOutFromGplus();
}

} /** * Получение информации о пользователе, электронной почте, профиле pic * */ private void getGoogleProfileInformation() { пытаться {   if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient)!= null) {    Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);   GoogleId = currentPerson.getId();   UserName = currentPerson.getDisplayName();   UserEmail = Plus.AccountApi.getAccountName(mGoogleApiClient);   /String personName = currentPerson.getDisplayName();   String personPhotoUrl = currentPerson.getImage(). GetUrl();   String personGooglePlusProfile = currentPerson.getUrl();   String email = Plus.AccountApi.getAccountName(mGoogleApiClient);   Log.e( "login", "Name:" + personName + ", plusProfile:"   + personGooglePlusProfile + ", email:" + email   + ", Изображение:" + personPhotoUrl);/

} else {
Toast.makeText(getApplicationContext(),getString(R.string.google_profile_error), Toast.LENGTH_LONG).show();
            }
} catch (Exception e) {
e.printStackTrace();
        }

}

@Override public void onConnectionSuspended (int arg0) {   mGoogleApiClient.connect();   Toast.makeText(getApplicationContext(), getString (R.string.google_suspended_account), Toast.LENGTH_LONG).show(); } @Override public void onActivityResult (int requestCode, int resultCode, Intent data) {   if (requestCode == RC_SIGN_IN) {       if (requestCode!= RESULT_OK) {       mSignInClicked = false;       }       mIntentInProgress = false;       if (! mGoogleApiClient.isConnecting()) {          mGoogleApiClient.connect();        }   }

}

код > И еще одна вещь после этого ответа Android Google+ Signin &" Внутренняя ошибка произошла "

Ответ 4

использовать сервисы воспроизведения для входа

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

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;

public class ExampleActivity extends Activity implements
  ConnectionCallbacks, OnConnectionFailedListener {

 /* Request code used to invoke sign in user interactions. */
 private static final int RC_SIGN_IN = 0;

 /* Client used to interact with Google APIs. */
 private GoogleApiClient mGoogleApiClient;

 /* A flag indicating that a PendingIntent is in progress and prevents
  * us from starting further intents.
   */
  private boolean mIntentInProgress;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mGoogleApiClient = new GoogleApiClient.Builder(this)
    .addConnectionCallbacks(this)
    .addOnConnectionFailedListener(this)
    .addApi(Plus.API)
    .addScope(Plus.SCOPE_PLUS_LOGIN)
    .build();
  }

 protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
  }

  protected void onStop() {
   super.onStop();

   if (mGoogleApiClient.isConnected()) {
     mGoogleApiClient.disconnect();
  }
  }


}