FireBaseのAuthenticationを使ったAndroidアプリが一向に審査が通らない
解決したいこと
AndroidStudioでFireBaseのAuthenticationを使ったアプリを開発し、現在GooglePlayConsoleが当アプリの審査を繰り返し行っています。
毎度審査は、アプリの最初の画面であるGoogle認証の画面でエラーが発生しているようで審査が通りません。
解決方法があれば教えていただきたいです。
本質問は早期の解決をしたいため以下のサイトでも質問回答を受け付けております。
発生している問題・エラー
Googleから来た審査否承認のメールに添付されたエラー部分の画像は以下のとおりです。
推測するに、申請するにあたってアプリのアクセス権を取得するための手順の説明が不十分である可能性が考えられます。
以下にアクセス権を取得するための手順を簡略化したものを示します。
-
First steps to log in to the application(ログイン手順1)
渡した情報
・アクセス権を所得してもらうために自身で作成したGoogleアカウントの情報
・ログイン手順1(以下原文まま)
It is recommended that you log in to the account indicated above in the device before launching the application.
(アプリケーションを起動する前に、デバイスで上記のアカウントにログインすることをお勧めします。)
-
Second steps to log in to the application(ログイン手順2)
渡した情報
・ログイン手順2(以下原文まま)
If you are prompted for 2-step verification by phone number, skip it.
The user name registration screen will appear, and enter "test".
If you cannot log in with the account indicated in the "First steps to log in to the application" section, we expect you to be screened with a separate Google account that can be handled by the person doing the screening.
(電話番号による2段階認証を求められた場合はスキップする。
ユーザー名の登録画面が表示されますので、「test」と入力してください。
アプリケーションにログインするための最初の手順」で表示されたアカウントでログインできない場合は、審査担当者が対応可能な別のGoogleアカウントで審査を受けることを想定しています。)
該当するソースコード
@Suppress("DEPRECATION")
class MainActivity : AppCompatActivity() {
private var mAuth: FirebaseAuth? = null
private var mGoogleSignInClient: GoogleSignInClient? = null
private val RC_SIGN_IN = 9001
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mAuth = FirebaseAuth.getInstance()
mAuth!!.setLanguageCode("ja")
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
mGoogleSignInClient = GoogleSignIn.getClient(this, gso)
val signInButton = findViewById<SignInButton>(R.id.google_sign_in_button)
signInButton.setOnClickListener {
googleSignIn()
}
}
override fun onStart() {
super.onStart()
val currentUser = mAuth?.currentUser
if (currentUser != null) {
usedIdIntentMain2()
}
}
private fun googleSignIn() {
val signInIntent = mGoogleSignInClient?.signInIntent
if (signInIntent != null) {
startActivityForResult(signInIntent, RC_SIGN_IN)
}
}
@Deprecated("Deprecated in Java")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
try {
val account = task.getResult(ApiException::class.java)
val firebaseUser = mAuth?.currentUser
if (firebaseUser != null) {
usedIdIntentMain2()
} else {
firebaseAuthWithGoogle(account?.idToken)
}
} catch (e: ApiException) {
Toast.makeText(this, "Google sign in failed", Toast.LENGTH_SHORT).show()
}
}
}
private fun firebaseAuthWithGoogle(idToken: String?) {
val credential = GoogleAuthProvider.getCredential(idToken, null)
mAuth?.signInWithCredential(credential)?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
newIdIntentMain2()
} else {
Toast.makeText(this, "Authentication failed.", Toast.LENGTH_SHORT).show()
}
}
}
private fun newIdIntentMain2(){
val currentUser = mAuth!!.currentUser
val uid =currentUser!!.uid
val intent = Intent(this, UsernameRegisterActivity::class.java)
intent.putExtra("YET_AUTH",uid)
startActivity(intent)
finish()
}
private fun usedIdIntentMain2(){
val currentUser = mAuth!!.currentUser
val uid =currentUser!!.uid
val intent = Intent(this, TitleActivity::class.java)
intent.putExtra("ALSO_AUTH",uid)
startActivity(intent)
finish()
}
}
先に示したGoogleから来た審査否承認のメールに添付されたエラー部分の画像の一番右側にあるスクリーンショットにはToastで”Google sign in failed”とありますが、これは該当コードの以下にあたる部分です。
@Deprecated("Deprecated in Java")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
try {
val account = task.getResult(ApiException::class.java)
val firebaseUser = mAuth?.currentUser
if (firebaseUser != null) {
usedIdIntentMain2()
} else {
firebaseAuthWithGoogle(account?.idToken)
}
} catch (e: ApiException) {
Toast.makeText(this, "Google sign in failed", Toast.LENGTH_SHORT).show()
}
}
}
自分で試したこと
似たようなエラーの記事がありましたが解決には至りませんでした。
指定したGoogleアカウントは自身のスマホでもログインし他端末でのログイン状況を確認したところ、Google側の端末と思われる機器でログインされていることは確認できています。しかしFireBaseのAuthentication画面では指定したGoogleアカウントはありませんでした。従って、根本原因はFireBase関係の設定などではないかと考えております。
ちなみに、エミュレータや実機上で投稿者自身のGoogleアカウントを用いたログインは、問題なくできておりFireBase上でも確認することができています。:::