Доступ до ідентифікатора облікового запису Google / імені користувача через Android


77

Як отримати доступ до ідентифікатора / імені користувача облікового запису Google у коді? Я створюю додаток, який буде викликати веб-службу для зберігання даних, і я хочу ідентифікувати особу, яка подає дані.


3
Отримати Google Ім'я облікового запису і електронної пошти stackoverflow.com/a/31538053/4395114
Mansukh Ахіри

Існує також бібліотека для управління обліковими записами в Android тут .
Алі Нем

Відповіді:


47

Я зіткнувся з тією ж проблемою, і ці два посилання вирішили для мене:

Перший - це такий: Як отримати зареєстрований обліковий запис 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 - Проблеми зі створенням облікових записів користувачів

В основному там сказано, що ви повинні створити пристрій Android на основі рівня API, а не версії SDK (як це зазвичай роблять).


як я можу отримати аватар облікового запису? Спасибі вам much`
Urchin

@Urchin, це трохи не виходить за рамки цього питання, але я вважаю, що це може допомогти тобі. stackoverflow.com/questions/17905066/…
Fabricio Buzeto

1
Трохи пізно , але це може допомогти кому - то , якщо ви намагаєтеся отримати аватар аккаунта ( stackoverflow.com/questions/9128700 / ... )
Abdelilah Ель Aissaoui

Існує також бібліотека для управління обліковими записами в Android тут .
Алі Нем

10

Цей спосіб отримати ім’я користувача 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:

 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" />

7
Чому потрібні дозволи на взаємодію та доступ до мережі?
Chitrang

6

Отримання інформації про профіль для користувача, який увійшов у систему. Використовуйте метод 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();

2
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 символ Не вдається вирішити ?
Холецький

Це базується на використанні API Google+, який, мабуть, є занадто екзотичним для більшості розробників
GregD

2

Використовували ці рядки:

AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccountsByType("com.google");

довжина рахунків масиву завжди дорівнює 0.


Будь ласка, використовуйте пристрій Android нижче Android 6.0 - 6.… (рівні API 23-…), оскільки для пристроїв вищої версії потрібні дозволи на час роботи, і вони завжди повертатимуть довжину 0.
Mandeep Yadav

0

Існує зразок від google, який перелічує існуючі облікові записи google і генерує маркер доступу при виборі; ви можете надіслати цей маркер доступу на сервер, щоб отримати відповідні деталі з нього для ідентифікації користувача.

Ви також можете отримати ідентифікатор електронної пошти з маркера доступу

Будь ласка, перейдіть до мого повідомлення


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.