您好我正在尝试在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"
/>
我不想在我的按钮上使用这种风格。我想要一个像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中一样。
提前致谢。
答案 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();
}
}
}