在Android中从Google Plus获取用户名

时间:2014-03-20 12:03:10

标签: android google-api google-plus

我已将Google plus与我的Android应用集成。一切正常,我也连接到谷歌加,但我无法得到当前用户的名称。

public void onConnected(Bundle connectionHint) {
    String personName="Unknown";
    if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
        Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
        personName = currentPerson.getDisplayName();
    }
}

Plus.PeopleApi.getCurrentPerson(mGoogleApiClient)此方法始终返回 null

任何帮助将不胜感激。 谢谢。

5 个答案:

答案 0 :(得分:10)

对我而言,此次调用返回null的原因是我的应用程序未启用Google+ API。导航至https://console.developers.google.com,选择您的项目并启用Google+ API以使其正常运行!

答案 1 :(得分:7)

你必须添加这一行:

Plus.PeopleApi.loadVisible(mGoogleApiClient, null).setResultCallback(this);

像这样:

public void onConnected(Bundle connectionHint) {

    /* This Line is the key */
    Plus.PeopleApi.loadVisible(mGoogleApiClient, null).setResultCallback(this);

    String personName="Unknown";
    if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
       Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
       personName = currentPerson.getDisplayName();
       .........
    }
}

答案 2 :(得分:5)

在我的情况下返回null,因为我添加了该行:

addScope(新范围(Scopes.EMAIL))

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(new Scope(Scopes.PROFILE))
            //.addScope(new Scope(Scopes.EMAIL))
            .build();

================= UPDATE ======================== 范围应设置如下:

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_PROFILE)
            .addScope(Plus.SCOPE_PLUS_LOGIN)
            .build();

答案 3 :(得分:2)

检查您是否通过SHA1密钥库生成了调试和生产客户端ID。 它显示在 API&验证 - > project凭据标签。 Android文档的

Setting up OAuth 2.0说:

  

在终端中,运行Keytool实用程序以获取经过数字签名的.apk文件的公共证书的SHA1指纹。

     

... debug-keystore的示例......

     

重要提示:当您准备将应用程序发布给用户时,请再次按照这些步骤为您的生产应用程序创建新的OAuth 2.0客户端ID。对于生产应用,请使用您自己的私钥对生产应用的.apk文件进行签名。

答案 4 :(得分:2)

我尝试了很多方法,但我仍然面临同样的问题。最后,在app build.gradle文件中,我发现我的applicationId与Credentials中的包名称不同。我解决了这个问题,一切都像魅力一样。

因此,请确保:

  • build.gradle中的applicationId
  • AndroidManifest.xml中的包名称
  • 凭证中的包名称

都是一样的。

希望这有助于某人。