Xamarin Android Google+ Api 如何获取Profile信息

Xamarin Android Google+ Api how to get Profile information

我正在使用 Google+ Api 并且需要获取基本的个人资料信息。我可以正确登录用户。

在 Xamarin 文档中,我发现了以下调用:

var person = PlusClass.PeopleApi.GetCurrentPerson(_googleApiClient);

但这显示为已弃用。有人知道如何获取个人资料信息吗?

使用 PlusClass.AccountApi.GetAccountName 检索用户的电子邮件。

if (client.IsConnected)
{
    var emailAddress = PlusClass.AccountApi.GetAccountName(client);
    Log.Debug(TAG, emailAddress);
}

注意:您需要GET_ACCOUNTS权限才能访问此数据:

通过 AndroidManifest 手动输入:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

或通过清单 属性 编辑:

个人资料信息:

注意:并非所有用户都拥有所有个人资料信息assigned/available

PlusClass.ScopePlusProfile 添加到您的 GoogleApiClient.Builder:

.AddScope(PlusClass.ScopePlusProfile)

IPerson 示例:

var emailAddress = PlusClass.AccountApi.GetAccountName(client);
Log.Debug(TAG, emailAddress);
var peopleResult = await PlusClass.PeopleApi.LoadAsync(client, new string[] { "me" } );
if (peopleResult.Status.StatusCode == CommonStatusCodes.Success)
{
    if (peopleResult.PersonBuffer.Count > 0)
    {
        try // try/catch is needed as emumerator will always(?) fault in move next, broken api
        {
            foreach (var person in peopleResult.PersonBuffer)
            {
                Log.Debug(TAG, person.DisplayName);
                Log.Debug(TAG, person.Id);
                Log.Debug(TAG, person.Url);
                if (person.HasImage)
                    Log.Debug(TAG, person.Image.Url);
                Log.Debug(TAG, person.AboutMe);
            }
        }
        catch (Exception e)
        {
            Log.Debug(TAG, $"{e.Message}");
        }
        finally
        {
            peopleResult.Release(); // prevent memory leak
        }
    }
}
else
{
    Log.Debug(TAG, $"{peopleResult.Status.StatusMessage}");
}

示例输出:

[MyGPlus] xxxxxx@gmail.com
[MyGPlus] 00000000000000000000
[MyGPlus] Sushi Hangover
[MyGPlus] https://plus.google.com/105138306217936737331
[MyGPlus] https://lh6.googleusercontent.com/-F3PtIL2g-dM/AAAAAAAAAAI/AAAAAAAAAVw/BlrXmOgCSoY/photo.jpg?sz=50

你的回答很好,但经过进一步研究,我找到了更好的解决方案。我现在使用 "new" GoogleSignInApi。如果您插入 dll Xamarin.GooglePlayServices.Auth.

,这将起作用

可以使用此行在 OnActivityResultMethod() 中获取用户:

var signInInfo = Auth.GoogleSignInApi.GetSignInResultFromIntent(data);

更多信息:https://developers.google.com/identity/sign-in/android/sign-in