如何在Android中的自己的按钮上实现谷歌加登录功能

时间:2014-11-29 12:35:51

标签: android google-plus

您好我正在尝试在Android中学习Google登录功能。我做到了这一点并按照预期正常工作。

此处显示了要签名的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中一样。

提前致谢。

4 个答案:

答案 0 :(得分:8)

除了法律问题,SignInButton 实际上并没有执行任何特殊功能,它只是一个可视化的小部件。来自docs

  

用于对用户进行身份验证的Google登录按钮。请注意这一点   class只处理按钮的可视方面。为了   触发一个动作,使用注册一个监听器   setOnClickListener(OnClickListener)

也就是说,如果你有一个Google+示例正在运行(即使用GoogleApiClient,相关的回调,com.google.android.gms.plus和/或c)中的任何API,那么您可以替换{{1}使用任何其他常规按钮,它将工作相同。


关于示例代码:对不起,根据您的问题的措辞,我假设您已经运行了此部分。

您可以找到G +集成here的教程,特别是this是关于登录的部分。此外,示例项目作为SDK(SignInButton)的一部分进行分发,一切准备就绪(尽管您需要在Google Developers Console中启用API,如链接中所述,以使其工作正确)。

然后您可以将<android-sdk>\extras\google\google_play_services\samples\plus换成常规按钮。

答案 1 :(得分:4)

https://developers.google.com/+/web/signin/customize上,写着:

  

自定义登录按钮

     

您可以自定义登录按钮,使其更适合您的登录   网站的设计。您必须遵循品牌指南并使用   自定义按钮中的适当颜色和图标。你也必须   确保您的按钮显示与其他按钮相同的突出显示   第三方登录选项。品牌指南也提供了图标   可用于设计自定义按钮的资源。

它链接到branding guidelines哪个州

  

这些指南为您提供各种设计规范   Google+按钮和徽章。您可以在应用上使用这些资源   (网站或移动应用程序)未经预先批准,只要您遵循这些   基本准则。 以未明确涵盖的方式使用Google品牌   未经事先书面同意,不得通过本文件   Google (请参阅第三方使用Google品牌指南   功能更多信息)。按钮的使用也必须符合   我们的按钮政策。

这基本上意味着您甚至不允许您使用自己的按钮使用Google+代码,除非您获得“书面同意”,我认为这很难获得。

(如果您的按钮符合指南,则可以使用“自定义”按钮IF。

我不希望我的按钮上有这种风格。

你几乎要这么做 您可以尝试解决它,但您的应用程序将无法在Play商店中存活多久,并且您的开发者帐户可能会面临后果(尽管这是我自己的假设)。)

答案 2 :(得分:1)

实现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's information getGoogleProfileInformation(); // Update the UI after signin

}
else
{
    signOutFromGplus();
}

} /** * Fetching user's information name, email, profile pic * */ private void getGoogleProfileInformation() { try { 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 + ", Image: " + 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 "An internal error has occurred"

答案 3 :(得分:-1)

使用播放服务进行登录

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();
  }
  }


}