Я играю с Google Plus Authentication и Firebase.Firebase, Android, Google Plus Login - не удалось получить адрес электронной почты пользователя
Я сейчас использую базовый пример аутентификации с Android. Основная часть аутентификации работает отлично с кодом на github, и она работает так, как должна. https://github.com/firebase/firebase-login-demo-android
Проблема возникает, когда я пытаюсь получить адрес электронной почты, по какой-то причине она не существует в объекте authData.
Из Firebase documentation on Google authentication:
getProviderData().get("email") - The Google user's primary email address as listed on their profile. Returned only if a valid email address is available, and the Google
Если добавить TextView в activity_main.xml ..... .....
Тогда в моем коде MainActivity.java:
private void setAuthenticatedUser(AuthData authData) {
if (authData != null) {
/* Hide all the login buttons */
......
mLoggedInStatusTextView.setVisibility(View.VISIBLE);
mEmailTextView = (TextView) findViewById(R.id.email_textView);
mEmailTextView.setText(authData.getProviderData().get("email").toString());
mEmailTextView.setVisibility(View.VISIBLE);
......
}
Я получаю ошибку: Попытка вызова виртуального метода 'java.lang.String ja va.lang.Object.toString() 'по ссылке нулевого объекта
Кроме того, в Android Studion с отладкой, когда я просматриваю объект authData, адрес электронной почты не задан, а другие значения - auth, provider, providerData, токен, uid, expires и т. д.
Все, кажется, работает отлично, за исключением получения адреса электронной почты. Я не уверен, нужны ли дополнительные разрешения. В моем файле AndroidManifest.xml У меня есть следующие:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Из того, что я прочитал, разрешение GET_ACCOUNTS должно быть достаточно. Любые идеи о том, почему Firebase, похоже, не могут его получить?
EDIT: Кроме того, я могу сохранить свои пользовательские данные Firebase https://www.firebase.com/docs/android/guide/user-auth.html#section-storing
if(authData.getProviderData().containsKey("email")) {
map.put("displayName", authData.getProviderData().get("email").toString());
}
Затем это значение по электронной почте всегда пусто, так что это не получение электронной почты от Google Plus на всех.
Благодарим за это. Это в значительной степени то, что я сделал в конце. Я не уверен в последствиях производительности, делая другой звонок, но он работает по крайней мере сейчас. – Chris