さて、署名されたapkを生成するまですべてが機能します。私は、Google Developersページで伝えられたプロセス全体を実行しました
1. keyhashとパッケージ名を含むgoogle-services.jsonファイルを生成しました
2。このようなクラスレベルとアプリケーションレベルのすべての依存関係が含まれています
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0'
classpath 'com.google.gms:google-services:2.0.0-alpha6'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
アプリケーショングラドルファイル
apply plugin: 'com.Android.application'
apply plugin: 'com.google.gms.google-services'
Android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
applicationId "com.example.skmishra.finalgooglesignin"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.google.Android.gms:play-services:8.3.0'
}
私のサインインJavaコード
package com.example.skmishra.finalgooglesignin;
import Android.content.Intent;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.widget.Button;
import Android.widget.Toast;
import com.google.Android.gms.auth.api.Auth;
import com.google.Android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.Android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.Android.gms.auth.api.signin.GoogleSignInResult;
import com.google.Android.gms.common.ConnectionResult;
import com.google.Android.gms.common.SignInButton;
import com.google.Android.gms.common.api.GoogleApiClient;
public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener {
private static final int RC_SIGN_IN = 200 ;
private static final String TAG = "Sign In" ;
private GoogleApiClient mGoogleApiClient;
SignInButton google;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_STANDARD);
signInButton.setScopes(gso.getScopeArray());
google=(SignInButton)findViewById(R.id.sign_in_button);
google.setOnClickListener(this);
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Toast.makeText(this,"Failed to connect",Toast.LENGTH_LONG).show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
signIn();
break;
// ...
}
}
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
// Signed in successfully, show authenticated UI.
GoogleSignInAccount acct = result.getSignInAccount();
Toast.makeText(this,"Name :"+acct.getDisplayName()+" Email :"+acct.getEmail(),Toast.LENGTH_LONG).show();
} else {
// Signed out, show unauthenticated UI.
Toast.makeText(this,"Signed out ",Toast.LENGTH_LONG).show();
}
}
}
私のレイアウトコード
<com.google.Android.gms.common.SignInButton
Android:id="@+id/sign_in_button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Check this out"
/>
私が理解しているように、開発者コンソールでデバッグSHA1を提供し、apkに署名してSHA1を変更しました。この場合は、次のことを試してください キーストアからリリースSHA1を取得 し、古いSHAをそれで置き換えます。
1。ターミナルを開き、ディレクトリをJDK binディレクトリに変更します。インストール済みのJDKバージョンをパスに含めます。私にとっては-jdk1.8.0_101
(タイプjavac -version
Java version)を取得するには:
Mac
cd /Library/Java/JavaVirtualMachines/<your_JDK_version>.jdk/Contents/Home/bin
Windows
cd C:\Program Files\Java\your_JDK_version\bin
2。keytool
を使用して、リリースSHA1を取得します。
keytool -list -v -keystore <keystore_name> -alias <alias_name>
3。プロジェクトの認証情報ページ に移動し、SHA1をキーストアのリリースSHA1に置き換えます。
私も同じ問題を抱えていました。 Googleでは、アプリのデバッグとリリースAPKの両方に対して1つの認定を取得することを許可していないことがわかりました。どちらか一方の証明書のみを取得するかを選択する必要があります。私が間違っていたら訂正してください。
私が行ったのは、このリンクのデバッグキーではなく、releaseキーのSHA1指紋認証情報を入力することでした ここ
その後、リリースしたapkは機能し、デバッグキーは機能しませんでした。
Firebase consoleのProject-> Setting-> Androidに2つのSHA-1キーを配置する必要があります
1つのキー:キーストアのキー、つまりkeytool -list -v -keystore -alias
2キー:Playストアのキー、つまりリリース管理->アプリ署名->アプリ署名証明書-> SHA 1キーフィンガープリント
@ -vj- @ ==> APIキーは、SHA-1フィンガープリントと呼ばれる、アプリのデジタル証明書の短い形式に基づいています。証明書のSHA-1フィンガープリントを表示するには、まず正しい証明書を使用していることを確認してください。次の2つの証明書がある場合があります。
->デバッグ証明書:Android SDKツールは、デバッグビルドを行うときにこの証明書を自動的に生成します。この証明書は、テストしているアプリでのみ使用してください。デバッグ証明書で署名されています。デバッグ証明書について詳しくは、Android開発者用ドキュメントのデバッグモードでの署名をご覧ください。
->リリース証明書:Android SDKツールは、リリースビルドを実行するときにこの証明書を生成します。keytoolプログラムを使用してこの証明書を生成することもできます。リリースする準備ができたら、この証明書を使用します世界にアプリ。
==>デバッグ証明書のフィンガープリントを表示する
デバッグキーストアファイルを見つけます。ファイル名はdebug.keystoreで、プロジェクトを初めてビルドするときに作成されます。デフォルトでは、Android仮想デバイス(AVD)ファイルと同じディレクトリに保存されます:
macOSおよびLinux:~/.Android/
Windows VistaおよびWindows 7:C:\Users\your_user_name\.Android\
SHA-1フィンガープリントを一覧表示します。
LinuxまたはmacOSの場合は、ターミナルウィンドウを開いて次のように入力します。
keytool -list -v -keystore ~/.Android/debug.keystore -alias androiddebugkey -storepass Android -keypass Android
Windows VistaおよびWindows 7の場合、次を実行します。
keytool -list -v -keystore "%USERPROFILE%\.Android\debug.keystore" -alias androiddebugkey -storepass Android -keypass Android
==>リリース証明書のフィンガープリントを表示する
リリース証明書のキーストアファイルを見つけます。リリースキーストアのデフォルトの場所または名前はありません。アプリをリリース用にビルドするときに指定しない場合、ビルドでは.apkは署名されないため、公開する前に署名する必要があります。リリース証明書には、証明書のエイリアスと、キーストアと証明書のパスワードも必要です。次のように入力して、キーストア内のすべてのキーのエイリアスを一覧表示できます。
keytool -list -keystore your_keystore_name
置換your_keystore_name
は、.keystore拡張子を含む、キーストアの完全修飾パスと名前です。キーストアのパスワードの入力を求められます。次に、keytoolはキーストア内のすべてのエイリアスを表示します。端末またはコマンドプロンプトで次のように入力します。
keytool -list -v -keystore your_keystore_name -alias your_alias_name
置換your_keystore_name
は、.keystore拡張子を含む、キーストアの完全修飾パスと名前です。置換your_alias_name
作成時に証明書に割り当てたエイリアス。
巨大な開発者コンソール内でアクティブ化する場所を見つけることはほとんど難しいことではありません。私は将来誰かを助けるかもしれません。 Androidここにアプリケーションを登録する-これで「サインインを有効にする」 ページ :
通常のコンソール開発者向けの値を入力し、これに署名済みのSHA-1を入力します。それでおしまい!
FWIW:
私は、リリースとデバッグの構成(OathクライアントID、SHA-1など)をすべてGoogle開発コンソールでセットアップし、プロジェクトにgoogle-services.jsonファイルをインストールしました。
私は複数のビルドフレーバーを使用しているので、さまざまな構成ファイルをそれぞれの./app/<flavorN>/
ディレクトリ。
署名済みAPKの生成に失敗しました正しいキーストアファイル、エイリアス、パスワードを使用して署名付きAPKの生成ウィザードで。ウィザードは、以前のビルドフレーバー(tsk)のキーと資格情報をキャッシュしていました。しかし、キーをリセットしてターゲットフレーバーにマッピングした後、機能するGoogleサインインができました。