ユーザーがFacebookでログインできるアプリを作成しています。
次のようなハッシュキーを作成しました。
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.app.package",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash", "KeyHash:"+ Base64.encodeToString(md.digest(),
Base64.DEFAULT));
Toast.makeText(getApplicationContext(), Base64.encodeToString(md.digest(),
Base64.DEFAULT), Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
デバッグモードでは、すべてがうまく機能します。
リリース用にプロジェクトをエクスポートすると、次のエラーが表示されます。
"Invalid key hash. The key hash ****************** does not match any stored key hashes"
Facebook Developerダッシュボードに印刷されたキーを貼り付けますが、アプリケーションは引き続きそのエラーを表示します。
私のアクティビティの完全なパッケージは "com.app.package.views
"とダッシュボードで(Google Playパッケージ名として)このパッケージを使用しようとしましたが、何も変更されませんでした。
どうすれば解決できますか?適切なリリースキーハッシュを生成するにはどうすればよいですか?
Facebookがログインアプリケーションの作成に提供する手順を実行しましたか?
リリースキーストアの開始時に取得した「Production keyhash」が必要です。
コマンドラインから:
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
そして、facebookアプリのページオプションにこのキーを追加します。
詳細: https://developers.facebook.com/docs/Android/getting-started/
私は解決策を見つけます。 Mac用
これを使用してYOUR_RELEASE_KEY_ALIASを取得します。
keytool -list -keystore /Users/***/Documents/keystore/***.jks
そして、これはあなたのリリースキーハッシュを取得します:
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore /Users/***/Documents/keystore/***.jks | openssl sha1 -binary | openssl base64
わたしにはできる。
最も簡単なソリューション。
1)APKに署名します。
2)デバイスをマシンに接続し、署名済みapkを実際のデバイスにインストールします。
3)Facebookのログインを押すと、logcatで「無効なキーハッシュです。キーハッシュ「xxx」は保存されたキーと一致しません。..」というエラーが表示されます。
4)logcatハッシュキーをコピーし、このキーをdevelopers.facebook.com/apps/104...../settings/に配置します
Word "openssl"をopenssl構造内の1つのファイルのパスに置き換える必要があります。
したがって、私のCMDコマンドは次のとおりです。
C:\Program Files\Java\jre1.8.0_45\bin>keytool -exportcert -alias Informatheus -keystore C:\Users\Atendimento\Dropbox\AndroidKeystore\Keystore | C:\Users\Atendimento\Desktop\openssl\bin\openssl sha1 -binary | C:\Users\Atendimento\Desktop\openssl\bin\openssl base64
動いた。
後で参照できるように、Playストアに既にアプリがある場合は、次のことができます。
_Release Management
_に移動します
_App Signing
_で_Release Management
_を選択します
SHA1キーは16進形式_App signing certificate
_で表示できます。
SHA1を16進形式でコピーし、base64形式に変換します。この link を使用して、16進の_SHA1:
_部分なしで実行できます。
Facebook開発者コンソールに移動し、_settings —> basic –> key hashes
_にキーを追加します(base 64への変換後)。
//このメソッドを最初のアクティビティに追加し、ログを開いてBase64タグを検索します。これがHashkeyです。
public void getHashkey(){
try {
PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.i("Base64", Base64.encodeToString(md.digest(),Base64.NO_WRAP));
}
} catch (PackageManager.NameNotFoundException e) {
Log.d("Name not found", e.getMessage(), e);
} catch (NoSuchAlgorithmException e) {
Log.d("Error", e.getMessage(), e);
}
}
Facebook SDKは2つの異なるキーを使用します。1つは開発フェーズで使用できるデバッグキーで、もう1つは署名済みアプリケーションパッケージを作成した後に使用されるリリースキーです。デバッグキーとリリースキーの作成方法に関するリンクを次に示します。
this SO post。
ハッシュキーでリリースされたapkを取得する最も簡単な方法は、次のコマンドを使用してリリースされたapkのSHA1キーを取得することです。
keytool -list -v -keystore keystore_path.jks -alias keystoreAlias
そのため、SHA1キーを取得します。そのキーをコピーし、次のサイトを使用してハッシュキーを生成します。
出力(base64)を取得します。コピーして、必要な場所で使用します。