私のアプリはシンプルなFacebookログインを使用しています。アプリダッシュボードのkey_hashセクションにキーハッシュを入力しました。正常にログインできました。今、私はアプリを公開してログインしようとしましたが、ウェブビューにエラーメッセージが表示されています
"Invalid Android_key parameter. The key rX6qeRitkFCWui3de74rxB_qc1s does not match any allowed key. Configure your app key hashes at http://developers.facebook.com/apps/<my_fb_app_id>".
実際、rX6qeRitkFCWui3de74rxB_qc1sは、ネイティブアプリにあるキーハッシュではありません。どこから来たの?とにかく、ネイティブアプリでもこのキーハッシュを入力しましたが、同じエラーメッセージが表示され、まだログインできませんでした。どこがおかしいの?私を助けてください。
コーディングを通じてハッシュキーを生成できます。1つのことを行うだけです。このコードをメインクラス(ファーストクラス)に貼り付けてから、アプリを実行し、ハッシュキーを見つけるlogcatを確認します。
もう1つ、このパッケージ名「com.example.creeper」をパッケージ名に置き換えます。
try{
PackageInfo info = getPackageManager().getPackageInfo(
"com.example.creeper", 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 (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
この問題に直面している場合は、このキーを developer.facebook.com に入れてください
次に、アプリがliveon developer.facebook.com であることを確認します
そうでない場合は、この2つの手順に従ってアプリを公開します
ステップ1アプリケーションに移動->設定して連絡先メールアドレスを追加し、変更を保存します
Setp 2次にStatus&Reviewオプションに移動し、このトグルがYesであることを確認しますスクリーンショットを追加しました
公開したアプリの署名に使用するアプリのキーストアファイルを使用して、新しいキーハッシュを生成してみてください。この問題は、署名されていないapkファイルでのみ機能するデバッグキーストアによって生成されたキーハッシュを提供することによって発生する可能性があります。キーハッシュの生成方法を理解するには、次のリンクのステップ5を参照してください https://developers.facebook.com/docs/getting-started/facebook-sdk-for-Android/3.0/
facebookのアプリ設定ページでも同じように更新します。
パッケージ名とクラス名が正しいかどうかも確認してください。
.AndroidフォルダーにあるAndroidのdebug.keystoreを含むデバッグキーストアを使用すると、奇妙な問題が発生していました。 Androidアプリでfacebookのログインボタンを使用したログインは、初めて希望どおりに行われます。しかし、ログアウトしてログインしようとすると、次のようなエラーがスローされます。アプリにAndroidキーハッシュが構成されていません。http:// ...にアクセスしてください。
Keytoolコマンド(keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -sigalg SHA1withRSA -keysize 2048 -validity 10000)を使用してキーストアを作成し、このキーストアをプロジェクトの最上位の親フォルダーに配置して、プロジェクトbuild.gradleファイルに次のエントリを入力すると、問題が解決しました。
signingConfigs {
release {
storeFile file("my-release-key.keystore")
storePassword "passpass"
keyAlias "alias_name"
keyPassword "passpass"
} }
コマンドを使用する代わりに、Androidアクティビティのキーのハッシュ値を取得する(アプリのdeveloper.facebook.comサイトに登録する)のonCreate()内で常に次のメソッドを使用することに注意してください。 line(keytool -exportcert -alias -keystore | openssl sha1 -binary | openssl base64)いくつかのケースでコマンドラインが間違ったキーハッシュを出力する可能性があるため、ハッシュ値を生成します。
public void showHashKey(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo("com.superreceptionist",
PackageManager.GET_SIGNATURES);
for (Android.content.pm.Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("KeyHash:", sign);
// Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
Log.d("KeyHash:", "****------------***");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
Debug.keystoreからキーハッシュするか、リリースキーで署名した場合は、それよりもキーハッシュする必要があります。エイリアス名も正しいことを確認してください。それはあなたのキーハッシュに影響を及ぼします。
これを確認してください: Facebookキーハッシュの作成方法
たとえば、エラーで提供されるキーは"rX6qeRitkFCWui3de74rxB_qc1s"
、次にFacebookのハッシュコードのリスト、このコードを末尾の最後に配置してみます"="
取得 rX6qeRitkFCWui3de74rxB_qc1s=
そして、それが機能するかどうかを確認します。
Facebookの開発者で新しいキーハッシュを生成して編集し、新しいキーハッシュでアプリを再度登録してください。
Xamarinサンプルを機能させようとしている人のために、C#バージョンを紹介します。
public void showHashKey(Context context)
{
try {
PackageInfo info = context.PackageManager.GetPackageInfo("com.facebook.samples.hellofacebook", PackageInfoFlags.Signatures);
foreach (Android.Content.PM.Signature signature in info.Signatures) {
MessageDigest md = MessageDigest.GetInstance("SHA");
md.Update(signature.ToByteArray());
var sign = Base64.EncodeToString(md.Digest(), Base64Flags.Default);
Log.Info("KeyHash:", sign);
}
Log..Info("KeyHash:", "****------------***");
} catch (PackageManager.NameNotFoundException e) {
e.PrintStackTrace();
} catch (NoSuchAlgorithmException e) {
e.PrintStackTrace();
}
}
私にとっては、keytoolコマンドを実行してパスワードの入力を求められたとき、これをハッシュのパスワードを選択する必要があると解釈しました。実際、キーストア(ハッシュが保持されている場所)にパスワードを提供する必要があります。面白いのは(面白くない、「ハハ」)、パスワードを受け入れてハッシュを出力します。そのため、ハッシュが一致しませんでした。幸運なことに、私はずっと前にOS Xキーチェーンにパスワードを保存していたので、本当にそれが何であるかを見つけました。正しいパスワードを試してみたところ、異なるハッシュが得られました。デフォルトのキーストアのパスワードはAndroid
であるため、試してみてください。不足している可能性があります。
ハッシュを出力するのではなく、間違ったパスワードはあなたを拒否すべきだと本当に思っています。これがバグかどうかは疑問です。もしそうなら、コメントにバグレポートのリンクを残してください。