Essayer d'obtenir une photo du profil connecté. Mais retourne toujours null. Le nom et l'adresse e-mail renvoient des valeurs, problème uniquement avec photo.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestProfile()
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(StartActivity.this)
.enableAutoManage(StartActivity.this, StartActivity.this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
acct = gResult.getSignInAccount();
String name = acct.getDisplayName(); //okay, value != null
String email = acct.getEmail(); //okay, value != null
Uri photoUri = acct.getPhotoUrl() //not okay, value == null
Pourquoi cela se passe-t-il ainsi? Compte signé, email et nom obtenus, mais la photo échoue toujours.
Selon la documentation de Google - GoogleSignInAccount
uri public getPhotoUrl ()
Obtient l'url de la photo de l'utilisateur connecté.
Résultats
uRL de la photo pour le compte Google. Non-null uniquement si requestProfile () est configuré et si l'utilisateur a une image de profil Google+ .
Vérifiez si votre compte Google a une photo de profil Google+ ou non.
P/S: parfois, si une photo de profil Google+ a déjà été créée mais après avoir ajouté un compte Google sur votre appareil, vous devrez peut-être supprimer ce compte Google existant de votre appareil, puis l'ajouter de nouveau.
si acct.getPhotoUrl () renvoie null
signifie que votre compte Google n'est pas associé à Google Plus .. Cela ne vous donnera pas la valeur null si vous avez un compte Google plus approprié
Solution:
Il y aura une chance d'être nul ... La solution est donnée ci-dessous
il y a un webservice de repos par lequel vous obtiendrez votre imageurl
https://www.googleapis.com/plus/v1/people/ {id}? fields = image & key = {API_KEY}
"id" vous obtiendrez par la méthode acct.getId () appelant et API_KEY par la console du développeur ... assurez-vous que API_KEY est la clé de navigateur .... pas la clé Android ou la clé de serveur ....
Activer l'API Google+ Plus dans la console de développement ...
Maintenant, vous pouvez obtenir votre image de profil via appel au-dessus du service ..
https://www.googleapis.com/plus/v1/people/ {id}? fields = image & key = {API_KEY}
vous obtiendrez une réponse comme ci-dessous
{ "image": { "url": " https://lh4.googleusercontent.com/-StnGV_eLi3s/AAAAAAAAAAI/AAAAAAAABHU/XLH5wQ_Rm9E/photo.jpg?sz=50 ", " isDefault ": false } }
Maintenant, vous avez votre URL comme imageUrl ....
Souriez maintenant et continuez à coder !!!
Essayez ce code je son travail pour votre problème.
String _name;
@Override
public void onConnected(Bundle arg0) {
Log.e(TAG, "onConnected");
Plus.PeopleApi.loadVisible(mGoogleApiClient, null).setResultCallback(this);
Person currentUser = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
Log.e("USERNAME_Con",Plus.AccountApi.getAccountName(mGoogleApiClient));
Log.e("USERNAME_Con",currentUser.getBirthday()+" "+currentUser.getImage().getUrl()+" "+currentUser.getId());
String personPhotoUrl=currentUser.getImage().getUrl();
if(currentUser!=null){
String email=Plus.AccountApi.getAccountName(mGoogleApiClient);
String id=currentUser.getId();
_name=currentUser.getDisplayName();
progressDialog = ProgressDialog.show(Form.this, "", "Loading...", true,false);
logingoogle(email,id,_name);
}
personPhotoUrl = personPhotoUrl.substring(0,
personPhotoUrl.length() - 2)
+ 400;
Log.e("USER Image",""+personPhotoUrl);
new LoadProfileImage().execute(personPhotoUrl);
// Indicate that the sign in process is complete.
mSignInProgress = STATE_DEFAULT;
}
private class LoadProfileImage extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
camera=mIcon11;
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
// bmImage.setImageBitmap(result);
setimage(camera);
}
}
if(acct.getPhotoUrl() == null){
//set default image
} else {
photo_url = acct.getPhotoUrl().toString(); //photo_url is String
}