

Firebaseを使ったAndroidアプリを作成しています。  
Firebaseを使うにはGoogle認証をしてからFirebase認証を行うと思いますが、  
下のソースのGoogleSignInResult.isSuccess() がfalseを返すのでログインできません。  
また、GoogleSignInResult.getStatus().getStatusMessage()もnullを返すため、原因がわかりません。

お手数ですが、ログイン方法を教えていただけないでしょうか。

＜補足＞  
・Generate Signed APKで作成したrelease.apkをadb install
release.apkで手動でUSBケーブル経由で実機にインストールした場合はGoogle認証できます。  
しかし、Google Play Storeにリリース版として公開し、Google Play
Store経由でインストールした場合、Google認証できません。  
（始めはβ版としてリリースしていましたが、β版であることが原因である可能性があったことから、リリース版として公開しました。）  
・release.apkのSHA1はFireBase>Project Setting>SHA certificate fingerprints
に登録しています。

リスト１：画面イメージ(「ログイン」ボタンを押した後の状況)

[![画像の説明をここに入力](https://i.stack.imgur.com/DhZFH.png)](https://i.stack.imgur.com/DhZFH.png)

リスト２：ソース(onActivityResultでGoogleSignInResult.isSuccess()がfalseを返す）

[code]

    public class LoginActivity extends AppCompatActivity {
        private static final int REQUEST_CODE_SIGN_IN = 9001;
    
        private FirebaseAuth firebaseAuth;
        public static GoogleApiClient googleAPIClient;
    
        private DatabaseReference usersRef;
    
        private ProgressDialog progressDialog;
    
        private GoogleApiClient.OnConnectionFailedListener onConnectionFailedListener = new GoogleApiClient.OnConnectionFailedListener() {
            @Override
            public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                Toast.makeText(LoginActivity.this, "Google Play Services error.", Toast.LENGTH_SHORT).show();
            }
        };
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            System.out.println("*** LoginActivity.onCreate - start");
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            try {
                progressDialog = new ProgressDialog(this);
    
                GoogleSignInOptions options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestIdToken(getString(R.string.default_web_client_id))
                        .requestEmail()
                        .build();
    
                googleAPIClient = new GoogleApiClient.Builder(this)
                        .enableAutoManage(this, onConnectionFailedListener)
                        .addApi(Auth.GOOGLE_SIGN_IN_API, options)
                        .build();
    
                firebaseAuth = FirebaseAuth.getInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("*** LoginActivity.onCreate - start");
        }
    
        @Override
        public void onStop() {
            System.out.println("LoginActivity.onStop - start");
            if (null != usersRef) {
                usersRef.removeEventListener(valueEventlistener);
            }
            super.onStop();
        }
    
        public void onCancelButtonClick(View view) {
            finish();
        }
    
        public void onLoginButtonClick(View view) {
            System.out.println("*** LoginActivity.onLoginButtonClick - start");
            Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleAPIClient);
            startActivityForResult(intent, REQUEST_CODE_SIGN_IN);
            System.out.println("*** LoginActivity.onLoginButtonClick - end");
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            System.out.println("*** LoginActivity.onActivityResult - start");
    
            if (requestCode == REQUEST_CODE_SIGN_IN) {
                System.out.println("*** LoginActivity.onActivityResult - in if");
                GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
                if (result.isSuccess()) {
                    System.out.println("*** LoginActivity.onActivityResult - in if success");
                    GoogleSignInAccount account = result.getSignInAccount();
                    firebaseAuthWithGoogle(account);
                } else {
                    System.out.println("*** LoginActivity.onActivityResult - in if error");
                    System.out.println("*** LoginActivity.onActivityResult - in if error state:" + result.getStatus().getStatusMessage());
                    Toast.makeText(LoginActivity.this, "Error:" + result.getStatus().getStatusMessage(), Toast.LENGTH_SHORT).show();
                }
            }
            System.out.println("*** LoginActivity.onActivityResult - end");
        }
    
        public void firebaseAuthWithGoogle(GoogleSignInAccount account) {
            // firebase 認証
        }
    }
    
[/code]


CC BY-SA 3.0
2017-12-19T23:35:32.387
40397
2017-12-21T00:19:08.407
26711
question
android firebase google-api
AndroidアプリでGoogle認証できない


海外への質問で既に解決されている様ですが回答が英語だったので意訳します。

> Firebaseの設定にSHA1のフィンガープリントが無いんじゃない？

アプリの署名鍵がFirebaseに認証されていなかったみたいですね。


CC BY-SA 3.0
2017-12-21T00:19:08.407
40432
2017-12-21T00:19:08.407
18660
40397
answer