質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

解決済

AndroidアプリでGoogle認証できない

Yuki.Ma
Yuki.Ma

総合スコア6

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

1回答

0評価

0クリップ

1360閲覧

投稿2017/12/20 03:52

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

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

スクリーンショット

「ログイン」ボタンを押した直後の画面です。

イメージ説明

コード

onActivityResultのGoogleSignInResult.isSuccess()がfalseとなり、ログインできません。GoogleSignInResult.getState().getStateMessage()もnullを返すため原因もわかっていない状況です。

java

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 認証 } }

補足

・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 に登録しています。

以上です。よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。