GoogleSignInAccount getPhotoUrl()返回null

lla*_*rto 15 android google-profiles-api google-signin

试图从登录的个人资料中获取照片.但总是返回null.姓名和电子邮件返回值,只有照片有问题.

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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?帐户已签名,电子邮件和姓名已获得,但照片始终失败.

BNK*_*BNK 19

根据Google的文档 - GoogleSignInAccount

public Uri getPhotoUrl()

获取已登录用户的照片网址.

返回

Google帐户的照片网址.如果配置了requestProfile()且用户确实拥有Google+个人资料图片,则仅为非null.

请检查您的Google帐户是否有Google+个人资料图片.

P/S:有时,如果已经创建了Google+个人资料图片,但是在您的设备中添加Google帐户之后,您可能需要从设备中删除现有的Google帐户,然后重新添加.


A.R*_*.R. 6

面临着将photoURLtokenID设为null的同样问题

正如@BNK 已经解释了可能是其他原因的原因

因此,只需将我的解决方案添加到其中,对于面临相同问题的人(希望这对他们有帮助)

使用以下代码时(用 kotlin 编写)

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build()
Run Code Online (Sandbox Code Playgroud)

除了photoUrltokenId之外我只能获取诸如 “DisplayName”、“Email”、“FamilyName”、“ID”之类的信息

所以我只是像这样向 GSO Builder添加了“requestIdToken”

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestIdToken(resources.getString(R.string.googleAccountWebClientID)) // This line did the magic for me
            .build()
Run Code Online (Sandbox Code Playgroud)

因此,我能够获取所有信息以及 “idToken”“photoUrl”

注意:请为requestIdToken()使用“WebClientId”,您可以从(https://console.developers.google.com/apis/credentials?project=)获取

在此处输入图片说明