Доступ к идентификатору учетной записи Google / имени пользователя через Android
Как получить доступ к идентификатору / имени пользователя учетной записи Google в коде? Я создаю приложение, которое будет вызывать веб-сервис для хранения данных, и я хочу идентифицировать личность человека, отправляющего данные.
7 ответов
Я столкнулся с той же проблемой, и эти две ссылки решили для меня:
Первый из них: Как я могу восстановить зарегистрированную учетную запись Google на телефонах Android?
Который представляет код для получения учетных записей, связанных с телефоном. В основном вам понадобится что-то вроде этого:
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 - проблема создания учетных записей пользователей.
По сути, это говорит о том, что вы должны создать Android-устройство на основе уровня API, а не версии SDK (как это обычно делается).
Этот метод для получения имени пользователя Google:
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;
}
просто вызов этого метода....
И получить пользователя Google в Gmail ID::
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" />
Получение информации о профиле для вошедшего в систему пользователя Используйте метод GoogleSignInResult.getSignInAccount, чтобы запросить информацию о профиле для вошедшего в данный момент пользователя. Вы можете вызвать метод 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.
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
}
Существует пример от Google, в котором перечислены существующие учетные записи Google и генерируется токен доступа после выбора. Вы можете отправить этот токен доступа на сервер, чтобы получить из него соответствующие данные для идентификации пользователя.
Вы также можете получить идентификатор электронной почты из токена доступа, для этого вам нужно изменить ОБЛАСТЬ
Пожалуйста, пройдите мой пост
String name = android.os.Build.USER;
if (!TextUtils.isEmpty(name)) {
nameEdit.setText(name);
}