已弃用的 Plus.PeopleApi.load
Posted
技术标签:
【中文标题】已弃用的 Plus.PeopleApi.load【英文标题】:Deprecated Plus.PeopleApi.load 【发布时间】:2016-12-09 04:41:42 【问题描述】:既然Plus.API
在Google Play Services 9.4
中已弃用,那么在android 应用程序上为经过身份验证的用户获取Google Plus 圈子 的正确方法是什么?
现在我们已经弃用了加载加用户Plus.PeopleApi.load的方法
新文档说:
如果您的应用需要社交信息和更广泛的个人资料数据, 查看 Android Contacts Provider 或跨平台的 People API。
所以我应该选择 Android Contacts Provider,这似乎是一个艰难的选择(因为我必须使用光标过滤联系人并管理运行时权限)。
以前不推荐使用的方法的任何简单替代方法可以为用户获取 G+ 圈子列表?
【问题讨论】:
您之前使用的是 Plus API,现在推荐使用 Contacts API或提供者 正如我上面所说的,我知道这些解决方案是存在的。但它们是以前的替代品太难了。我不认为使用游标和管理运行时权限是简单方法的替代方法。 游标仅供提供者使用,是吗?不是Contacts API 对于只读访问它仍然建议我使用People API 【参考方案1】:Google+ People API 最终将在 2017 年第一季度完全弃用,详情请参阅以下弃用说明:
Android 公告: https://developers.google.com/+/mobile/android/api-deprecation
REST 端点公告: https://developers.google.com/+/web/people/#retrieve-a-collection-of-people
因此,您应该考虑建议的替代方案,而不是基于 G+ 圈子好友构建新功能,因为 对于 plus.login 范围内的新用户没有可用的数据。
如果您不想请求运行时权限,您仍然可以从 People REST API 获取已登录用户的联系人(请注意,这与 G+ People API 不同)。此外,如果您需要登录用户的个人资料信息,而不是名字/姓氏/显示名称、电子邮件和个人资料图片 url(已由登录 API 提供),您还应该使用相同的新人员 API。
在 Android 上,当您需要联系人数据时(在上下文中,向用户解释您为什么要求他们提供联系人信息。不要在前门登录活动中预先请求联系人范围 )
// Add dependencies (SDKs will be downloaded from mavenCentral)
compile 'com.google.api-client:google-api-client:1.22.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'
然后编写登录代码。
// Make sure your GoogleSignInOptions request email & contacts scopes as shown below
GoogleSignInOptions gso =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestScopes(new Scope(PeopleScopes.CONTACTS_READONLY)))
.build();
// Follow official doc to sign-in.
// https://developers.google.com/identity/sign-in/android/sign-in
然后您可以使用新的 People Api 来检索联系人列表。
/** Global instance of the HTTP transport. */
private static HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();
/** Global instance of the JSON factory. */
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
// On worker thread
GoogleAccountCredential credential =
GoogleAccountCredential.usingOAuth2(MainActivity.this, PeopleScopes.CONTACTS_READONLY);
credential.setSelectedAccount(
new Account(googleSignInAccount.getEmail(), "com.google"));
People service = new People.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME /* whatever you like */)
.build();
ListConnectionsResponse response = service.people().connections()
.list("people/me")
// request 20 contacts
.setPageSize(20)
.execute();
List<Person> connections = response.getConnections();
if (connections != null && connections.size() > 0)
for (Person person : connections)
List<Name> names = person.getNames();
if (names != null && names.size() > 0)
Log.i(TAG, "Name: " + person.getNames().get(0).getDisplayName());
else
Log.i(TAG, "No names available for connection.");
List<Gender> genders = person.getGenders();
String ageRange = person.getAgeRange();
List<Birthday> birthdays = person.getBirthdays();
...
【讨论】:
使用GoogleSignInApi获取SignInIntent(mGoogleApiClient),并启动intent;然后在 onActivityResult 中,您将能够获取 GoogleSignInAccount。有关详细信息,请参阅此文档:developers.google.com/identity/sign-in/android/sign-in 谢谢 Isabella,你能帮我解决这个 People API problem 吗?非常感谢!以上是关于已弃用的 Plus.PeopleApi.load的主要内容,如果未能解决你的问题,请参考以下文章