我按照官方文件与Google实施唱歌。这并不难,但官方文件停止获取名称或电子邮件等基本信息。我需要过生日。
所以,在创建选项时,我添加了这个:
max_threads
由于官方文件在那里停止,我无法得到如何过生日。所以我搜索了网络,发现了一个使用普通HTTP GET请求.requestScopes(Scope("https://www.googleapis.com/auth/user.birthday.read"))
的方法。 (或者这是否由Google Play服务API覆盖?)
但该方法需要访问令牌,该签名未包含在登录后返回的https://people.googleapis.com/v1/people/me
中。有一个示例通过创建OAuth服务器ID获取访问ID,然后使用{{1获取访问令牌,但这很复杂,并且它不是在服务器上完成的,它是在应用程序内完成的,就在唱歌之后。
在这种情况下,我是否必须创建OAuth服务器ID,并使用访问令牌来获取生日?
答案 0 :(得分:1)
经过大量的Google搜索后,我找到了this example。在找到这个之前,我找到了一个使用Plus.API的例子,但是这个答案说它已被弃用了。有趣的是,现在即使这个答案已经过时而且不起作用。我不得不搜索更多来修复它。如果只有Google的登录文档页面包含获取默认字段以外的其他数据的示例,则可以避免所有这些错误。
无论如何,这是适合我的代码。
First, sign in with Google according to the official documentation.
Then,
val HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();
val JSON_FACTORY = JacksonFactory.getDefaultInstance();
inner class DamnTask(var email:String) :AsyncTask<Unit,Unit,Unit>()
{
override fun doInBackground(vararg params: Unit?)
{
var credential = GoogleAccountCredential.usingOAuth2(context,
Collections.singletonList(Scopes.PROFILE));
credential.selectedAccount = Account(email, "com.google");
var service = People.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName("MyApp")
.build();
var me = service.people().get("people/me")
.setRequestMaskIncludeField("person.Birthdays")
.execute();
Log.d("damn", "Birthday " +me.birthdays.toString());
}
}
为了使它工作,我不得不将以下库添加到依赖项中。
compile 'com.google.api-client:google-api-client:1.23.0'
compile 'com.google.api-client:google-api-client-android:1.22.0'
compile 'com.google.apis:google-api-services-people:v1-rev4-1.22.0'
另外,我必须在项目的设置中启用“People”API。这需要在Google的Web控制台中完成。我忘记了URL,但如果您不启用它,则异常消息将显示启用它的确切URL。
您可以找到更多字段名称here。