Google Plus Authentication と Firebase をいじっています。
現在、Android での基本的な認証の例に取り組んでいます。基本認証部分は github のコードで正常に動作しており、正常に動作しています。https://github.com/firebase/firebase-login-demo-android
メールアドレスを取得しようとすると、問題が発生します。何らかの理由で、authData オブジェクトに存在しないようです。
Google 認証に関する Firebase ドキュメントから:
getProviderData().get("email") - プロフィールに記載されている Google ユーザーのメインのメール アドレス。有効なメール アドレスが利用可能で、Google の
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);
......
}
エラーが表示されます: null オブジェクト参照で仮想メソッド 'java.lang.String java.lang.Object.toString()' を呼び出そうとしています
さらに、デバッグをオンにしたAndroid Studioでは、authDataオブジェクトを調べると、電子メールは設定されていませんが、他の値は-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 からメールをまったく取得していません。