使用Google Play服务API无法获得用户生日

时间:2016-01-04 17:09:44

标签: android google-plus google-play-services

修改

经过一次新的尝试,我终于结婚了。我没有改变实施。我想我的Google Plus个人资料中的更改需要花费几个小时来传播,让我的生日公开。比预期的多一点。现在我想知道当用户登录时是否可以请求此许可(生日),而不需要公开生日。

正如developers guide中的此信息所示:

  

有关可能提供的其他个人资料数据,请参阅   GoogleSignInAccount。请注意,任何配置文件字段都可以为null,   取决于您请求的范围和信息   用户的个人资料包括。

初始发布

我希望在用户登录Google Plus后获得用户的生日。一般不熟悉Google API,我想知道我的实现是否有意义。现在,我只是想通过链接到我设备的Google帐户开始自己的生日。

这就是我所做的。我按照developer guide的步骤进行了登录程序。除了OAuth之外,我还在gradle中添加了Google Plus依赖项:

  

编译'com.google.android.gms:play-services-plus:8.3.0'

在我的Activity中,有一个登录Google Plus的按钮。

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestScopes(new Scope(Scopes.PLUS_ME), new Scope(Scopes.PLUS_LOGIN),new Scope(Scopes.PROFILE))
                .build();
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(Plus.API)
                .build();


loginButton = (SignInButton) findViewById(R.id.sign_in_button);
loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
                startActivityForResult(signInIntent, RC_SIGN_IN);
            }
        });

首次登录后,我尝试连接到Google Play服务。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            Log.d(TAG, "handleSignInResult:" + result.isSuccess());
            if (result.isSuccess()) {
                mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL);
           }
    }
}

连接后,我尝试获取用户的生日。

@Override
    public void onConnected(Bundle bundle) {
        Person currentPerson = Plus.PeopleApi
                .getCurrentPerson(mGoogleApiClient);
        addGoogleProfile(currentPerson); //Add the user to a list of persons
        refreshListView(); //update the listView
        Log.d(TAG, "Current person: name=" + currentPerson.getDisplayName() + ", has birthday = " + (currentPerson.hasBirthday() ? "yes, it is" + currentPerson.getBirthday() : "no"));
    }

问题

生日永远不会设置,并且始终显示为空。可以访问其他数据,例如名称和配置文件图像。我没有找到关于不同Scopes的更多信息。我更熟悉Facebook API,登录时更明确地请求权限。

关于我遗失的任何想法?

何而我将我的生日字段设置为相关Google帐户的“公开”。

干杯

2 个答案:

答案 0 :(得分:0)

亲爱的,您只能获得以下信息: -

mePerson.getId()
mePerson.getDisplayName()
mePerson.getImage().getUrl()
mePerson.getUrl()

答案 1 :(得分:0)

我们可以从gmail获取用户的生日,但为此用户需要公开了解生日。

请按照以下步骤操作:

  1. 登录Gmail,然后转到:https://myaccount.google.com/u/1/birthday?hl=en&pli=1
  2. 点击“管理共享设置”并将生日设置为公开
  3. 添加范围:https://www.googleapis.com/auth/plus.login