Получить имя пользователя из Google Plus в андроид

Я включил Google plus с моим Android-приложением. Все работает нормально, я также подключен к Google plus, но я не могу получить имя текущего пользователя, зарегистрированного.

public void onConnected(Bundle connectionHint) {
    String personName="Unknown";
    if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
        Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
        personName = currentPerson.getDisplayName();
    }
}

Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) этот метод всегда возвращает null.

Любая помощь будет оценена. Благодарю.

Ответ 1

Вы должны добавить эту строку:

Plus.PeopleApi.loadVisible(mGoogleApiClient, null).setResultCallback(this);

Вот так:

public void onConnected(Bundle connectionHint) {

    /* This Line is the key */
    Plus.PeopleApi.loadVisible(mGoogleApiClient, null).setResultCallback(this);

    String personName="Unknown";
    if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
       Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
       personName = currentPerson.getDisplayName();
       .........
    }
}

Ответ 2

Для меня причиной этого вызова, возвращающего null, было то, что API Google+ не был включен для моего приложения. Перейдите в https://console.developers.google.com, выберите свой проект и включите API Google+, чтобы он работает!

Ответ 3

В моем случае null возвращается, потому что я добавил эту строку:

addScope (новый масштаб (Scopes.EMAIL))

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(new Scope(Scopes.PROFILE))
            //.addScope(new Scope(Scopes.EMAIL))
            .build();

================= ОБНОВЛЕНИЕ ========================= Области должны быть установлены следующим образом:

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_PROFILE)
            .addScope(Plus.SCOPE_PLUS_LOGIN)
            .build();

Ответ 4

Убедитесь, что вы создали как отладочный, так и производственный идентификатор клиента по хранилищам SHA1. Он отображает вкладку API и Auth Учетные данные вашего проекта .

Настройка OAuth 2.0 для документации на Android говорит:

В терминале запустите утилиту Keytool, чтобы получить отпечаток SHA1 для общедоступного сертификата с открытым кодом .apk.

... пример для debug-keystore...

Важно: при подготовке к выпуску приложения вашим пользователям выполните следующие действия и создайте новый идентификатор клиента OAuth 2.0 для своего производственного приложения. Для производственных приложений используйте свой собственный закрытый ключ для подписи файла .apk производственного приложения.

Ответ 5

Я пробовал много подходов, но я все еще сталкивался с той же проблемой. Наконец, в файле app build.gradle я обнаружил, что мой applicationId не был таким же, как имя пакета в Credentials. Я исправил это, и все работало как шарм.

Таким образом, убедитесь, что:

  • applicationId в файле build.gradle
  • имя пакета в AndroidManifest.xml
  • имя пакета в Credentials

все одинаковы.

Надеюсь, это поможет кому-то.