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
我正在使用 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