web-dev-qa-db-fra.com

GoogleSignInAccount getPhotoUrl () return null

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. 

13
llaerto

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.

18
BNK

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 !!!

3
Manoj Behera

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);
    }
}
0
Destro
if(acct.getPhotoUrl() == null){
    //set default image
} else {
    photo_url = acct.getPhotoUrl().toString(); //photo_url is String
}
0
and dev