次のコマンドを使用して、Android用のFacebookアプリコンソールのキーハッシュを生成しています
.\keytool.exe -exportcert -alias app_Android -keystore release.keystore | openssl sha1 -binary | openssl base64
Facebook開発者SDKヘルプ で言われたように
ヘルプページと開発者コンソールによると、キーハッシュは28文字の長さである必要がありますが、keytoolは32文字の長さのキーを生成します。
Javaバージョン:jdk1.8.0_31 OS:Windows 7
Android用に生成しています。
編集
@ Shreyash-mashruからの提案に従って、次のコードを使用してキーハッシュを取得しました
try {
PackageInfo info = getPackageManager().getPackageInfo(
"my.package.name",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString());
}
ただし、コマンドラインツールが28文字ではなく32文字の長さのキーハッシュを生成する理由を誰かが理解するのを手伝ってくれる場合は...
この問題にも遭遇しました。私はWindowsPowerShellを使用していて、32文字のキーを生成し続けました。プレーンな古いcmdに切り替えると、期待どおりに機能しました。
キャリッジリターンと改行が末尾に追加されているため、生成されるハッシュは32文字です。これを修正するには、次のいずれかを実行できます。
ハッシュの最後の5文字を削除し、最後に"="
を追加します。例:"1234567890abcdefghijklmnopqrstuv"
(32文字)-> "1234567890abcdefghijklmnopq="
(28文字)
または:
javascriptコンソールを開いて、次を使用します。
btoa(atob("your hash string").slice(0, -2))
ここで、"your hash string"
は32文字のハッシュです。
私も同じ問題を抱えていました。これは、既存のバージョンのopenSSL(64ビット)を使用することと関係がありました。 32ビットバージョンをダウンロードしました ここから そしてc:\ openSSLにインストールしました。次に、コマンドはこのバージョンのSSLをポイントし、28文字のハッシュを取得しました。
keytool -exportcert -alias androiddebugkey -keystore "C:\ Users\USERNAME.Android\debug.keystore" | "C:\ OpenSSL\bin\openssl" sha1 -binary | "C:\ OpenSSL\bin\openssl" base64
コマンドプロンプトでコマンドを試してください!
パスワードの入力を求められたら、ハッシュキーを取得します。
powershellで同じコマンドを実行しても、正しいハッシュキーが提供されません。