私はこの過程を全く理解していません。 Java SDKでkeytoolを含むフォルダに移動することができました。私はエラーopensslを取得し続けますが内部または外部コマンドとして認識されませんが。問題は、私がこれを機能させることができたとしても、私は何をし、その後何をしますか?
これがあなたがする必要があることです -
OpenSSlを コード からダウンロードしてください。 C:/にOpenSSLというフォルダを作成し、抽出したコードをここにコピーします。
debug.keystoreファイルのパスを検出します。 uが見つからなかった場合は、C:/で検索し、次の手順のコマンドでPathを使用してください。
keytool.exeのパスを検出してそのdir /コマンドプロンプトに移動し、このコマンドを1行で実行します。
$ keytool -exportcert -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator.Android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
それはパスワードを要求します、それがすべてAndroidです。キーハッシュを取得します
LinuxおよびMac用
ターミナルを開く:
デバッグビルド用
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
".Android"フォルダにdebug.keystoreがあります。それをコピーしてデスクトップに貼り付け、上記のコマンドを実行します。
リリースビルド用
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
注:どちらの場合もパスワードを要求するようにしてください。パスワードを要求しない場合は、コマンドに問題があることを意味します。 debug.keystoreのパスワードは "Android"で、リリースするにはパスワードを入力する必要があります。あなたキーストアの作成中に設定。
これを試してください。
public static void printHashKey(Context pContext) {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i(TAG, "printHashKey() Hash Key: " + hashKey);
}
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "printHashKey()", e);
} catch (Exception e) {
Log.e(TAG, "printHashKey()", e);
}
}
OpenSSL:あなたのオペレーティングシステムがプレインストールされていない場合(例えば、Windowsはプレインストールされていません)インストールする必要があります。インストール方法はOSによって異なります(Windowsの場合はcoder_For_Life22で提供される link を確認してください)。
Windowsを使用している場合は、いじらずに最も簡単な方法は、そのopenssl.exeバイナリをkeytoolパスにコピーすることです。そうしたくない場合は、それをPATH
環境変数に追加する必要があります。その後、ドキュメントに記載されているコマンドを実行します。
keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64
-keystore
の後の引数はデバッグキーストアを指すことに注意してください。この場所はオペレーティングシステムによっても異なります。次のいずれかの場所にあります。
すべてうまくいった場合は、パスワードの入力を求められます。これはデバッグ証明書のAndroid
です。パスワードが正しい場合、コンソールはハッシュ(ややランダムな文字と数字)を表示します。
それを持ってそれをfacebookのあなたのアプリの設定の中のAndroid key hash
フィールドにコピーしてください。そこにたどり着くには、 developers.facebook.com/apps に移動してアプリを選択し、Edit settings
に移動して下にスクロールします。その後、変更が有効になるまで数分待ちます。
ローカルコンピュータでキーハッシュを生成するには、Androidデバッグキーストアに対してJavaのkeytoolユーティリティ(コンソールのパスにあるはずです)を実行します。これは、デフォルトではあなたの家の.Androidディレクトリにあります。 OS Xでは、以下を実行します。
keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64
Windowsでは、以下を使用してください -
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.Android\debug.keystore | openssl sha1 -binary | openssl base64
これがあなたを助けることを願っています
Ref - 開発者向けフェイスブックサイト
短い解決策もあります。アプリでこれを実行するだけです。
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));
FB SDKを必要としないもっと長いもの(解決法に基づく はこちら ):
public static void printHashKey(Context context) {
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (Android.content.pm.Signature signature : info.signatures) {
final MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i("AppLog", "key:" + hashKey + "=");
}
} catch (Exception e) {
Log.e("AppLog", "error:", e);
}
}
結果は "="で終わります。
私のような人のためにここに完全な詳細があります(Windowsの場合)
1。ダウンロード OpenSSl 3番目またはあなたのシステム32bitまたは64bitに基づいて4番目(eと一緒によりうまくいくでしょう)。
2。ダウンロードしたZipファイルをCディレクトリの中に展開します。
3。展開したフォルダをbinまで開き、パスをコピーします。最後にC:\openssl-0.9.8k_X64\bin\openssl
のようにします(最後に\ opensslを追加します)。
4。(Jdkのbinフォルダへのパスを取得する方法がわかっている場合は、これを無視してください)。
Android Studioの〜ファイル〜のプロジェクト構造(Ctrl + Alt + Shift + S)を開き、左側のパネルでSDKの場所を選択し、JDKの場所をコピーして/ binを追加します。
したがって、最終的なJDKの場所はC:\Program Files\Android\Android Studio\jre\bin
のようになります。
あなたは私のように埋め込まれたjdkを使用するかもしれないので、私たちはJdkの位置を取得するためにこのメソッドに従います
今、あなたはOpenSSlの場所とJDKの場所を持っています
5。デバッグキーストアの場所が必要になります。そのためにはC〜> Users〜> YourUserName〜> .Androidにdebug.keystoreというファイル名が必要です。パスの場所をコピーしてください。
C:\Users\Redman\.Android\debug.keystore
6。コマンドを開くプロンプトとタイプコマンド
cd YourJDKLocationFromStep4
私の場合
cd "C:\Program Files\Android\Android Studio\jre\bin"
7。は次のコマンドを作成します
keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
私の場合、コマンドは次のようになります
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.Android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
これで、コマンドプロンプトでこのコマンドを入力します。正しいことをした場合は、パスワードの入力を求められます(パスワードはAndroidです)。
Enter keystore password: Android
つまり、キーハッシュが与えられます。コピーして使用するだけです。
署名付きKeyHashの場合は、次のコマンドを作成します。
keytool -exportcert -alias YOUR_ALIAS_FOR_JKS -keystore YOUR_JKS_LOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
あなたのキーストアのパスワードを入力してください、あなたが間違ったパスワードを入力した場合、それは間違ったKeyHashを与えるでしょう
NOTE
何らかの理由でエラーが発生した場合は、そのパスを二重引用符で囲んでください。Windowspower Shellがうまく機能しなかった場合は、git bashを使用しました(またはコマンドプロンプトを使用します)。
例
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.Android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
Windowsの場合
keytool -exportcert -alias androiddebugkey -keystore%HOMEPATH%。アンドロイド\ debug.keystore | openssl sha1 - バイナリ| openssl base64
パスワードを入力してください:Android - > Hit Enter
生成されたハッシュキーをコピーする - >開発者アカウントでFacebookにログイン
あなたのFacebookアプリ - >設定 - > "キーハッシュ"オプションにハッシュキーを貼り付け - >変更を保存してください。
今すぐFacebookのログイン/共有などであなたのAndroidアプリをテストします.
それが私が私の手に入れた方法です:
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (exception != null) {
new AlertDialog.Builder(FriendActivity.this)
.setTitle(R.string.login_failed_dialog_title)
.setMessage(exception.getMessage())
.setPositiveButton(R.string.ok_button, null)
.show();
}
そのため、キーなしで入力しようとすると、例外が発生します。 Facebookはこの例外にRIGHTキーを置きました。あなたがする必要があるのはそれをコピーすることだけです。
API 26以降、KOTLINのコードを使用してハッシュキーを生成することができます。 Facebook SDKが必要です。
fun generateSSHKey(context: Context){
try {
val info = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val hashKey = String(Base64.getEncoder().encode(md.digest()))
Log.i("AppLog", "key:$hashKey=")
}
} catch (e: Exception) {
Log.e("AppLog", "error:", e)
}
}
アプリでこれを実行します。
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)+"=");
またはこれ:
public static void printHashKey(Context context) {
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (Android.content.pm.Signature signature : info.signatures) {
final MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i("AppLog", "key:" + hashKey + "=");
}
} catch (Exception e) {
Log.e("AppLog", "error:", e);
}
}
そしてログを見てください。
結果は "="で終わります。
次に、パスシステム変数にopenssl\binを追加します。
[マイコンピュータ] - > [プロパティ] - > [詳細設定] - > [詳細設定] - > [システム変数] - > [システム変数]の下にあるパスを見つけ、これを末尾に追加します。; yourFullOpenSSLDir\bin
それではjdk\binフォルダC:\ Program Files\Java\jdk1.8.0_40\binにあるコマンドラインを開き(Windowsではshiftキーを押したまま右クリック - >ここでコマンドラインを開く)、次のコマンドを使用します。
keytool -exportcert -alias keystorealias -keystore C:\yourkeystore\folder\keystore.jks | openssl sha1 -binary | openssl base64
パスワードを入力した後に生成される28桁の番号をコピーします。
ブラウザコンソールで1行のJavaScriptを使用するだけで、16進マップキーをbase64に変換できます。最新のブラウザー(WindowsのF12)でコンソールを開き、コードを貼り付けてSHA-1
、SHA-256
Google PlayがRelease Managment
> App signing
で提供する16進マップ:
> btoa('a7:77:d9:20:c8:01:dd:fa:2c:3b:db:b2:ef:c5:5a:1d:ae:f7:28:6f'.split(':').map(hc => String.fromCharCode(parseInt(hc, 16))).join(''))
< "p3fZIMgB3fosO9uy78VaHa73KG8="
あなたは https://console.developers.google.com/projectselector/apis/credentials からすべてのあなたの指紋を得ることができます
そして、このKotlinコードを使用してそれをキーハッシュに変換します。
fun main(args: Array<String>) {
listOf("<your_production_sha1_fingerprint>",
"<your_debug1_sha1_fingerprint>",
"<your_debug2_sha1_fingerprint>")
.map { it.split(":") }
.map { it.map { it.toInt(16).toByte() }.toByteArray() }
.map { String(Base64.getEncoder().encode(it)) }
.forEach { println(it) }
}
簡単-> opensslをインストールしないでください-> GIT BASHを使用してください!
keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64
デフォルトのパスワードは「Android」です
私たちのほとんどはGit Bashをインストールしているので、これが私のお気に入りの方法です。
https://developers.facebook.com/docs/Android/getting-started/
4.19.0 - 2017年1月25日
Facebook SDK
修正済み
アプリケーションの起動時にFacebook SDKが自動的に初期化されるようになりました。ほとんどの場合、FacebookSDK.sdkInitialize()の手動呼び出しは不要になりました。詳しくは アップグレードガイド をご覧ください。
デバッグ用
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
私は最もシンプルなツールを見つけて何度も使ってきました。それは完璧に機能しています。それをチェックしてください、それは役立ちます。
詳しくは this と答えてください。
私は同じ正確な問題を抱えていました、私はパスワードを要求されていませんでした、そしてそれは私がキーストアファイルへの間違ったパスを持っていたようです。
実際、keytoolが設定したキーストアを見つけられなかった場合、正しいキーストアを使用していないので、作成して間違ったキーを渡します。
一般的な規則として、パスワードの入力を求められていないと、間違ったキーが生成されます。
あなたはこれを使用することができます apk
1.first install the app from the Google Play Store
2.install the above apk
3.launch the apk and input the package name of your app
4.then you will get the hash code you want
これは初心者にも役立ちます。
@ coder_For_Life22の回答に詳細を追加するだけです。
この回答が役立つ場合は、投票することを忘れないでください。それは私たちのやる気を引き出します。
このためには、アプリのキーストアファイルとパスワードのパスを既に知っている必要があります
この例では、キーが「c:\ keystorekey\new.jks」に保存されていることを考慮してください
1。このページを開く https://code.google.com/archive/p/openssl-for-windows/downloads
2。 Windows OSごとに32ビットまたは64ビットのZipファイルをダウンロードします。
3。ダウンロードしたファイルを好きな場所に解凍し、パスを覚えておいてください。
4。この例では、ダウンロードフォルダー内のフォルダーを抽出したと見なします。
したがって、ファイルアドレスは「C:\ Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe」になります。
5。キーボードでwindows + rボタンを押します。
6。これにより、実行ボックスが開きます。
7。 cmdと入力して押します Ctrl + Shift + Enter。
8。これにより、管理者としてコマンドプロンプトが開きます。
9。ここで、Javaのbinフォルダーに移動します。
Android Studioが提供するjreを使用すると、次のようなパスが見つかります。
a。 Androidスタジオを開きます。
b。ファイル->プロジェクト構造
c。左ペインで、「SDK location」をクリックします
d。右側のペインで、「JDKの場所」の下にjreパスがあります。
e。必要なファイル「keytool.exe」がこのフォルダ内にあるため、このパスの最後に「\ bin」を追加します。
この例では、Javaを個別にインストールしており、以下がパスです
"C:\ Program Files\Java\jre-10.0.2\bin"
32ビットJavaをインストールした場合は、
"C:\ Program Files(x86)\ Java\jre-10.0.2\bin"
10。今、上記のパスで次のようにコマンドを実行します:
keytool -exportcert -alias androiddebugkey -keystore "c:\keystorekey\new.jks" | "C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary |"C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe" base64
エラー:取得した場合:
---
'keytool'は内部コマンドまたは外部コマンドとして認識されません
---
これは、Javaが別の場所にインストールされていることを意味します。