已弃用的Plus.PeopleApi.load

6
现在,在Google Play Services 9.4中,Plus.API已被弃用,那么,在Android应用程序上,获取经过身份验证的用户的Google Plus circles的正确方法是什么?
现在,我们有了已弃用的加载plus用户的方法Plus.PeopleApi.load
新文档说:

如果您的应用程序需要社交信息和更广泛的个人资料数据,请查看Android Contacts Provider或跨平台People API。

所以我应该选择Android Contacts Provider,但这似乎是一个困难的选择(因为我需要使用游标筛选联系人,并管理运行时权限)。
是否有先前弃用方法的简单替代方案只是获取用户的G+圈子列表?

您之前使用的是Plus API,现在建议您使用Contacts API或者提供商。 - OneCricketeer
正如我在上面的问题中所说,我知道这些解决方案存在。但它们是以前的太难的替代品。我不认为使用游标和管理运行时权限是简单方法的替代品。 - Ioane Sharvadze
游标只适用于提供程序,是吗?而不是联系人API - OneCricketeer
对于只读访问,它仍建议我使用People API - Ioane Sharvadze
1个回答

4

谷歌+ 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+ Circle 好友构建新功能,因为 对于使用 plus.login 范围的新用户将无数据可用

如果您不想请求运行时权限,仍然可以从 People REST API 获取已登录用户的联系人(请注意,这与 G+ People API 不同)。另外,如果您需要已登录用户的个人资料信息而不是名字、姓氏、显示名称、电子邮件和个人资料图片 URL(这已由登录 API 提供),您还应使用相同的新 People 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();
        ...
    }
}

1
使用GoogleSignInApi的getSignInIntent(mGoogleApiClient)方法获取登录意图,然后启动该意图;在onActivityResult中,您将能够获取GoogleSignInAccount。有关详细信息,请参阅此文档:https://developers.google.com/identity/sign-in/android/sign-in - Isabella Chen
谢谢你,伊莎贝拉。你能帮我解决这个 People API 的问题吗?问题链接非常感谢! - Beeing Jk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接