【发布时间】:2011-01-15 18:38:07
【问题描述】:
您如何在代码中访问用户的 Google 帐户 ID/用户名?我正在构建一个将调用 Web 服务来存储数据的应用程序,并且我想识别提交数据的人的身份。
【问题讨论】:
-
获取谷歌账户用户名和邮箱stackoverflow.com/a/31538053/4395114
-
android中还有一个账号管理库here。
您如何在代码中访问用户的 Google 帐户 ID/用户名?我正在构建一个将调用 Web 服务来存储数据的应用程序,并且我想识别提交数据的人的身份。
【问题讨论】:
我遇到了同样的问题,这两个链接为我解决了:
第一个是这个:How do I retrieve the logged in Google account on android phones?
其中显示了用于检索与手机关联的帐户的代码。基本上你需要这样的东西:
AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] list = manager.getAccounts();
并在AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"></uses-permission>
此外,如果您使用模拟器,以下链接将帮助您使用帐户进行设置:Android Emulator - Trouble creating user accounts
基本上,它说您必须基于 API 级别而不是 SDK 版本创建一个 android 设备(就像通常所做的那样)。
【讨论】:
有一个来自 google 的示例,它列出了现有的 google 帐户并在选择时生成一个访问令牌,您可以将该访问令牌发送到服务器以从中检索相关详细信息以识别用户。
您也可以从 access token 中获取 email id,为此您需要修改 SCOPE
请转至My Post
【讨论】:
此方法获取谷歌用户名:
public String getUsername() {
AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccountsByType("com.google");
List<String> possibleEmails = new LinkedList<String>();
for (Account account : accounts) {
// TODO: Check possibleEmail against an email regex or treat
// account.name as an email address only for certain account.type
// values.
possibleEmails.add(account.name);
}
if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) {
String email = possibleEmails.get(0);
String[] parts = email.split("@");
if (parts.length > 0 && parts[0] != null)
return parts[0];
else
return null;
} else
return null;
}
简单的调用这个方法......
并在 Gmail id 中获取 Google 用户::
accounts = AccountManager.get(this).getAccounts();
Log.e("", "Size: " + accounts.length);
for (Account account : accounts) {
String possibleEmail = account.name;
String type = account.type;
if (type.equals("com.google")) {
strGmail = possibleEmail;
Log.e("", "Emails: " + strGmail);
break;
}
}
在清单中添加权限后;
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
【讨论】:
String name = android.os.Build.USER;
if (!TextUtils.isEmpty(name)) {
nameEdit.setText(name);
}
【讨论】:
if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
String userid=currentPerson.getId(); //BY THIS CODE YOU CAN GET CURRENT LOGIN USER ID
}
【讨论】:
Plus 无法解析符号 ?
检索已登录用户的个人资料信息 使用 GoogleSignInResult.getSignInAccount 方法请求当前登录用户的个人资料信息。 您可以在登录 Intent 成功后调用 getSignInAccount 方法。
GoogleSignInResult result =
Auth.GoogleSignInApi.getSignInResultFromIntent(data);
GoogleSignInAccount acct = result.getSignInAccount();
String personName = acct.getDisplayName();
String personGivenName = acct.getGivenName();
String personFamilyName = acct.getFamilyName();
String personEmail = acct.getEmail();
String personId = acct.getId();
Uri personPhoto = acct.getPhotoUrl();
【讨论】:
使用了这些行:
AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccountsByType("com.google");
数组帐户的长度始终为0。
【讨论】: