已弃用的 Plus.PeopleApi.load

Posted

技术标签:

【中文标题】已弃用的 Plus.PeopleApi.load【英文标题】:Deprecated Plus.PeopleApi.load 【发布时间】:2016-12-09 04:41:42 【问题描述】:

既然Plus.APIGoogle 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的主要内容,如果未能解决你的问题,请参考以下文章

用 .on 替换已弃用的 .live [重复]

尝试替换已弃用的 loadnibnamed:owner

是否有快速替代已弃用的“SKPaymentTransaction.transactionReceipt”?

GestureDetector 已弃用的问题

如何修复已弃用的“按钮样式”

asyncio 中所有这些已弃用的“循环”参数是啥?