我正在尝试使用Google Plus身份验证和Firebase。
目前,我正在通过Android进行基本的身份验证示例。基本身份验证部分可以使用github上的代码正常工作,它按预期工作。https://github.com/firebase/firebase-login-demo-android
问题出现在我试图获取电子邮件地址时,由于某种原因它似乎不存在于authData对象中。
getProviderData().get("email") - Google用户在其个人资料上列出的主要电子邮件地址。仅在有效的电子邮件地址可用且用户授予了Google“email”权限时返回。
如果我在activity_main.xml中添加一个textview ..... .....
然后在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 java.lang.Object.toString()'
此外,在开启Debug的Android Studio中,当我查看authData对象时,email未设置,但其他值都已设置——auth、provider、providerData、token、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为什么似乎无法获取它?
补充说明:此外,我能够将我的用户数据保存到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检索电子邮件。