Android Google Plus登录';选择一个帐户';对话框出现,没有配置文件图片
我将google plus登录集成到android中,但当我点击“登录”按钮时,“选择帐户”对话框出现,没有个人资料图片,所有其他功能都正常工作。我使用下面的依赖项 编译'com.google.android.gms:play services auth:9.2.1'Android Google Plus登录';选择一个帐户';对话框出现,没有配置文件图片,android,android-studio,Android,Android Studio,我将google plus登录集成到android中,但当我点击“登录”按钮时,“选择帐户”对话框出现,没有个人资料图片,所有其他功能都正常工作。我使用下面的依赖项 编译'com.google.android.gms:play services auth:9.2.1' 'com.github.bumptech.glide:glide:3.7.0' 编撰 ”包ctl.com.mythirdapp; 导入android.app.ProgressDialog; 导入android.content.In
'com.github.bumptech.glide:glide:3.7.0' 编撰
”包ctl.com.mythirdapp;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.annotation.NonNull;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入com.bumptech.glide.glide;
导入com.bumptech.glide.load.engine.DiskCacheStrategy;
导入com.google.android.gms.auth.api.auth;
导入com.google.android.gms.auth.api.signin.GoogleSignInAccount;
导入com.google.android.gms.auth.api.signin.GoogleSignInOptions;
导入com.google.android.gms.auth.api.signin.GoogleSignInResult;
导入com.google.android.gms.common.ConnectionResult;
导入com.google.android.gms.common.SignInButton;
导入com.google.android.gms.common.api.GoogleAppClient;
导入com.google.android.gms.common.api.OptionalPendingResult;
导入com.google.android.gms.common.api.ResultCallback;
导入com.google.android.gms.common.api.Status;
公共类LoginActivity扩展了AppCompatActivity实现
View.OnClickListener,
GoogleAppClient.OnConnectionFailedListener{
私有静态最终字符串标记=MainActivity.class.getSimpleName();
专用静态最终int RC_SIGN_IN=007;
私人GoogleapClient MGoogleapClient;
private ProgressDialog mProgressDialog;
私人签名按钮;
专用按钮btnSignOut、btnRevokeAccess;
专用线路布局图;
私有ImageView imgProfilePic;
私有文本视图txtName,txtmail;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
btnSignIn=(签名按钮)findViewById(R.id.btn\u sign\u in);
btnSignOut=(按钮)findViewById(R.id.btn\u注销);
btnRevokeAccess=(按钮)findViewById(R.id.btn\u revoke\u访问);
llProfileLayout=(LinearLayout)findviewbyd(R.id.llProfile);
imgProfilePic=(ImageView)findViewById(R.id.imgProfilePic);
txtName=(TextView)findViewById(R.id.txtName);
txtEmail=(TextView)findViewById(R.id.txtEmail);
btnSignIn.setOnClickListener(此);
btnSignOut.setOnClickListener(这个);
btnRevokeAccess.setOnClickListener(此);
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestEmail()
.build();
mgoogleapclient=新的Googleapclient.Builder(此)
.enableAutoManage(这个,这个)
.addApi(Auth.GOOGLE\u SIGN\u IN\u API,gso)
.build();
//自定义G+按钮
btnSignIn.setSize(标志按钮尺寸标准);
设置范围(gso.getScopeArray());
}
私人无效签名(){
意向符号=Auth.googlesignianpi.getsignient(mgoogleapclient);
startActivityForResult(签名、注册);
}
私有无效签出(){
Auth.GoogleSignInApi.signOut(mgoogleapclient.setResultCallback)(
新的ResultCallback(){
@凌驾
公共void onResult(状态){
更新(假);
}
});
}
私有void revokeAccess(){
Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient.setResultCallback)(
新的ResultCallback(){
@凌驾
公共void onResult(状态){
更新(假);
}
});
}
私有无效handleSignInResult(Google SignInResult结果){
Log.d(标记为“handleSignInResult:+result.issucess());
if(result.issucess()){
//成功登录,显示已验证的UI。
GoogleSignInAccount acct=result.getSignInAccount();
Log.e(标记“显示名称:”+acct.getDisplayName());
字符串personName=acct.getDisplayName();
字符串personPhotoUrl=acct.getPhotoUrl().toString();
字符串email=acct.getEmail();
Log.e(标签,“姓名:“+personName+”,电子邮件:“+email
+,图像:“+personPhotoUrl);
txtName.setText(personName);
txtEmail.setText(电子邮件);
Glide.with(getApplicationContext()).load(personPhotoUrl)
.缩略图(0.5f)
.crossFade()
.diskCacheStrategy(diskCacheStrategy.ALL)
.into(imgProfilePic);
更新(真);
}否则{
//已注销,显示未经验证的用户界面。
更新(假);
}
}
@凌驾
公共void onClick(视图v){
int id=v.getId();
开关(id){
案例R.id.btn\u登录:
签名();
打破
案例R.id.btn\u注销:
签出();
打破
案例R.id.btn\u撤销\u访问:
撤销访问();
打破
}
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
//从GoogleSignInApi.getsigninent(…)启动Intent返回的结果;
if(requestCode==RC\u登录){
GoogleSignInResult结果=Auth.GoogleSignInApi.getSignInResultFromIntent(数据);
handleSignInResult(结果);
}
}
@凌驾
public void onStart(){
super.onStart();
OptionalPendingreult opr=Auth.GoogleSignInApi.silentSignIn(MGoogleAppClient);
if(opr.isDone()){
//如果用户的
'package ctl.com.mythirdapp;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
public class LoginActivity extends AppCompatActivity implements
View.OnClickListener,
GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = MainActivity.class.getSimpleName();
private static final int RC_SIGN_IN = 007;
private GoogleApiClient mGoogleApiClient;
private ProgressDialog mProgressDialog;
private SignInButton btnSignIn;
private Button btnSignOut, btnRevokeAccess;
private LinearLayout llProfileLayout;
private ImageView imgProfilePic;
private TextView txtName, txtEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btnSignIn = (SignInButton) findViewById(R.id.btn_sign_in);
btnSignOut = (Button) findViewById(R.id.btn_sign_out);
btnRevokeAccess = (Button) findViewById(R.id.btn_revoke_access);
llProfileLayout = (LinearLayout) findViewById(R.id.llProfile);
imgProfilePic = (ImageView) findViewById(R.id.imgProfilePic);
txtName = (TextView) findViewById(R.id.txtName);
txtEmail = (TextView) findViewById(R.id.txtEmail);
btnSignIn.setOnClickListener(this);
btnSignOut.setOnClickListener(this);
btnRevokeAccess.setOnClickListener(this);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
// Customizing G+ button
btnSignIn.setSize(SignInButton.SIZE_STANDARD);
btnSignIn.setScopes(gso.getScopeArray());
}
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void signOut() {
Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
updateUI(false);
}
});
}
private void revokeAccess() {
Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
updateUI(false);
}
});
}
private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
// Signed in successfully, show authenticated UI.
GoogleSignInAccount acct = result.getSignInAccount();
Log.e(TAG, "display name: " + acct.getDisplayName());
String personName = acct.getDisplayName();
String personPhotoUrl = acct.getPhotoUrl().toString();
String email = acct.getEmail();
Log.e(TAG, "Name: " + personName + ", email: " + email
+ ", Image: " + personPhotoUrl);
txtName.setText(personName);
txtEmail.setText(email);
Glide.with(getApplicationContext()).load(personPhotoUrl)
.thumbnail(0.5f)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imgProfilePic);
updateUI(true);
} else {
// Signed out, show unauthenticated UI.
updateUI(false);
}
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btn_sign_in:
signIn();
break;
case R.id.btn_sign_out:
signOut();
break;
case R.id.btn_revoke_access:
revokeAccess();
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
@Override
public void onStart() {
super.onStart();
OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
if (opr.isDone()) {
// If the user's cached credentials are valid, the OptionalPendingResult will be "done"
// and the GoogleSignInResult will be available instantly.
Log.d(TAG, "Got cached sign-in");
GoogleSignInResult result = opr.get();
handleSignInResult(result);
} else {
// If the user has not previously signed in on this device or the sign-in has expired,
// this asynchronous branch will attempt to sign in the user silently. Cross-device
// single sign-on will occur in this branch.
showProgressDialog();
opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(GoogleSignInResult googleSignInResult) {
hideProgressDialog();
handleSignInResult(googleSignInResult);
}
});
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
// An unresolvable error has occurred and Google APIs (including Sign-In) will not
// be available.
Log.d(TAG, "onConnectionFailed:" + connectionResult);
}
private void showProgressDialog() {
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Please wait....");
mProgressDialog.setIndeterminate(true);
}
mProgressDialog.show();
}
private void hideProgressDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.hide();
}
}
private void updateUI(boolean isSignedIn) {
if (isSignedIn) {
btnSignIn.setVisibility(View.GONE);
btnSignOut.setVisibility(View.VISIBLE);
btnRevokeAccess.setVisibility(View.VISIBLE);
llProfileLayout.setVisibility(View.VISIBLE);
} else {
btnSignIn.setVisibility(View.VISIBLE);
btnSignOut.setVisibility(View.GONE);
btnRevokeAccess.setVisibility(View.GONE);
llProfileLayout.setVisibility(View.GONE);
}
}
}
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(Constants.GOOGLE_SERVER_CLIENT_ID)
.requestServerAuthCode(Constants.GOOGLE_SERVER_CLIENT_ID)
.requestEmail()
.build();
// [END configure_signin]
// [START build_client]
// Build a GoogleApiClient with access to the Google Sign-In API and the
// options specified by gso.
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.enableAutoManage(getActivity(), this)
.addApi(Plus.API, Plus.PlusOptions.builder().build())
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();