web-dev-qa-db-ja.com

Android Facebook統合無効キーハッシュ

私のアプリの1つでは、Facebookのデータを取得する必要があります。

私はアプリIDを作成しました。正常にログインしましたが、ログアウトした後にログインすると、次のように表示されます。

Screenshot of invalid key hash error Facebook

私がしていることは何が悪いのですか? Facebook SDK...を使用していることをお勧めしますこれは作り付けのFacebookアプリケーションがインストールされていないエミュレータでうまく動作しています。

これは私のコードです:

if (FB_APP_ID == null) {
    Builder alertBuilder = new Builder(this);
    alertBuilder.setTitle("Warning");
    alertBuilder.setMessage("A Facebook Applicaton ID must be " +
                            "specified before running this example: see App.Java");
    alertBuilder.create().show();
}

// Initialize the dispatcher
Dispatcher dispatcher = new Dispatcher(this);
dispatcher.addHandler("login", LoginHandler.class);
dispatcher.addHandler("stream", StreamHandler.class);
dispatcher.addHandler("logout", LogoutHandler.class);

// If a session already exists, render the stream page
// immediately. Otherwise, render the login page.
Session session = Session.restore(this);
if (session != null) {
    dispatcher.runHandler("stream");
}
else {
    dispatcher.runHandler("login");
}
169
Android

ハッシュキーの生成が間違っています。ハッシュキーは2つのステップで取得できます。 1つはコマンドプロンプトによるものです。もう一つはコーディングです。コマンドプロンプトを使用してハッシュキーを作成するのは初回のみです。理由はわかりません。私も同じ問題を抱えています。だから私はプログラムを通してそれを試してみました。

この手順に従ってください。

次のコードをoncreate()に貼り付けます。

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                "com.example.packagename", 
                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) {

}

上記のコーディングであなたのパッケージ名で "com.example.packagename"を必ず修正してください(あなたはあなたのパッケージ名をAndroid Manifestファイルで見つけることができるでしょう)。

アプリケーションを実行してください。上記のコードを貼り付けたアクティビティに移動します。 logcatで "KeyHash"を検索してください。キーハッシュが見つかりました。キーハッシュをコピーしてFacebookアプリケーションダッシュボードページに移動します。設定に行き、下の画像のように詳細を入力してください。

enter image description here

上記のステップを終えたら。アプリをもう一度再起動すると、Facebookにログインできます。キーハッシュの詳細については、 リンクを確認してください

設定ページに誤った情報を追加した場合は、エラーが発生します。そこで正しい情報を使ってください。そして、あなたのアプリケーション以外で一般の人があなたのアプリケーションを使用する必要がある場合は、permission(change "yes" in the "Status & Review" next to setting)を有効にする必要があります。

261

Google Playアプリの署名を使用している場合

Google PlayコンソールにあるApp署名セクションを開き、SHA1ofにアクセスします。アプリ署名証明書、それからこのツールでbase64に変換します。 http://tomeko.net/online_tools/ hex_to_base64.php?lang = en

console screenshot

convert to base64 screenshot

134
Rafal Malek

あなたがこの問題に直面しているなら、あなたの developer.facebook.com にこのキーを入れてください

enter image description here

それからあなたのアプリがライブであることを確認してください

developer.facebook.com

この緑色の丸はアプリがライブであることを示しています

enter image description here

そうでない場合は、この2つの手順に従ってアプリをライブにします。

ステップ1アプリケーションに移動します - >設定=> andaddメールで連絡して保存を適用

Setp 2それからgotoApp Reviewオプションを選択し、このトグルがYesになっていることを確認しますスクリーンショットを追加しました

enter image description here

注:ハッシュ・キーをコピーしたい場合は、LogcatのBlueServiceQueueを確認してください。

109
Arpit Patel

私は同じ問題を抱えていました。私はその解決策を見つけました。

私のコンピュータでdebugハッシュキーを生成するとき、私は自分のシステムのパスワードを入力しました。次のようになります -
キーストアのパスワードを入力してください: "Android"
これが私の場合の唯一の問題でした。

-----Debugキーハッシュを生成するには、このコマンドを使用します -

keytool -exportcert -alias androiddebugkey -keystore〜/ .Android/debug.keystore | openssl sha1 - バイナリ| openssl base64

キーストアのパスワードを入力してください: 'Android'

-----リリースキーハッシュを生成するには、このコマンドを使用します -

keytool -exportcert -alias "キーストアのエイリアス" -keystore "アプリに署名するときのキーストアへのパス" | openssl sha1 - バイナリ| openssl base64

このコマンドを実行した後、キーストアのパスワードを入力してください。

71
Akash Bisariya

私は同じ問題を経験しました。私はこの奇妙な振る舞いの考えられる理由について短い研究をしました、そして、私は以下を見つけました:

  • 新しいFacebookアプリを最初に実行したときには、接続/ログインが可能になります キーハッシュを指定しなくても

  • 私にとって、Facebookが提供したチュートリアルは正しいキーハッシュを生成しませんでした、なぜならそれは 間違った設定 を与えていたからです。実行時

    keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.Android\debug.keystore | openssl sha1 -binary | openssl
    base64
    

HOMEPATH、キーストアの存在など、すべてのプロパティを必ず確認してください。おそらくパスワードも入力する必要があります。

  • 正しい設定を生成したのは @ Mahendranが提案した解決策 でした。

  • また、最初に投稿されたエラー( http://i.stack.imgur.com/58q3v.png )が表示される場合は、おそらく - 画面に表示されるキーハッシュはあなたの本当のものです。 他に何もうまくいかない場合は、Facebookで入力してみてください。

これらすべての結果は、Windows 7 64ビット版、Android Studio 1.2.2、JDK 7で得られました。

21
Martin Doychev

によると Android用Facebookログイン では、キーハッシュ値を入力する必要があります。それを取得するために、あなたはあなたのアプリケーションに署名するために使用される キー が必要になります。

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64
12
JP Ventura

私は上記のすべてを試してみましたが、私のクライアントに対する私の訴訟には何も助けになりませんでした!私のクライアントが覚えていたより彼は彼のデバイスにインストールされたFacebookアプリを持っていた。彼がそれを削除した後、ログインは完全に機能しました。ハッシュキーが変更され、私はFacebook Developers Consoleで古いハッシュキーをエラーからのキーで置き換えた(上記で示唆されたように)、そしてそれはうまくいく! Facebookアプリ自体が問題になる可能性があるので、Facebookアプリがインストールされているデバイスと、Facebookアプリがインストールされていないデバイスの両方でこれを解決し、両方のケースを処理する必要があります。

7
Matan Dahan

デバッグ用とリリース用の2つのキーハッシュを作成する必要があります。

Debugキーハッシュの場合:

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

デバッグキーがソースをハッシュします

Releaseキーハッシュの場合:

OS Xでは、次のコマンドを実行します。(<>の間の値を自分の値に置き換えます)

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Windowsでは、を使用します(<>の間の値を自分の値に置き換えます)

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

リリースキーハッシュソース

6
MBH

私は同じ問題を抱えていました。 最初のログイン、問題ないが無効なキーハッシュ

これはUnityスレッドではありませんが、私はここで私の答えを見つけました。他の誰かが(私のように迷った)つまずいた場合に備えて、私は自分の答えを残します。

Unity用Facebook SDKが間違ったキーハッシュを取得します。それは "C:\ Users \"あなたのユーザー ".Android\debug.keystore"からキーを取得し、そして完璧な世界では、それはあなたのプロジェクトで作成したキーストアから取得する必要があります。これが、キーハッシュが登録されていないことを知らせている理由です。

Madi が示唆するように、この リンク の手順に従うことができます。正しいキーを見つけてください。あなたのプロジェクト内のキーストアにそれらを指させるだけで、そうでなければあなたは正しいキーを手に入れることができません。

このコードはあなたにfacebookのためのあなたのハッシュを与えるでしょう、しかしあなたはリリース候補ハッシュを得るためにこれらのステップに従わなければなりません。 1.このコードをコピーしてあなたのmainactivityに貼り付けます

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                "com.example.packagename", 
                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) {

}
  1. 署名付きapkを生成します。
  2. あなたの携帯電話をラップトップに接続し、それが接続されたままであることを確認してください。
  3. 手動でrelease apkを電話機に移動して、apkを電話機にインストールして実行します。

  4. 今Androidのlogcatを見てください(フィルタKeyHashを使ってください:)あなたはfacebookのためのあなたのリリースハッシュキーを見るべきです。単にそれをコピーしてあなたの https://developers.facebook.com/apps に貼り付けてください。

  5. 今、あなたはそれが完全にうまくいくはずであるアプリをテストすることができます。

    がんばろう。

3
abdul jalil

長い研究の結果、解決策が見つかりました。

権限を次のように設定しました。

loginButton.setReadPermissions(public_profile email);

これは初めて機能しましたが、FBに再ログインしたときに無効ハッシュエラーが発生しました。

簡単な解決策は、上記の行を次のように変更することでした。

    loginButton.setReadPermissions(Arrays.asList(
            "public_profile", "email"));

そしてそれは至福のように働いた!

うまくいけば、これは誰かに役立ちます。

Facebookは、誤解を招くような無効なハッシュキーエラーではなく、正しい例外を返すべきです。

2
user3663906

たくさんの試みの後、私はこれに対する解決策を見つけました。デバッグキーとリリースキーの両方を生成してFacebook開発者コンソールに追加しましたが、それでもエラーが発生します。

私のために働いた唯一の解決策は、GoogleからOpenSSLプログラムをアンインストールし、 http://slproweb.com/products/Win32OpenSSL.html からダウンロードすることでした

それは本当に魔法のように働きます

2
Uchenna Nnodim

あなたのOnCreateメソッドに次のコードを貼り付けてください

try {
    PackageInfo info = getPackageManager().getPackageInfo(
            "com.example.packagename", 
            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) {
  e.printStackTrace();

} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

パッケージ名を変更するだけです。次にLog catに行き、ここでDebug searchを選択してください。そうするとハッシュキーが見つかります。このハッシュキーをコピーしてからdeveloper.facebook.app_idサイトに移動し、ハッシュキーを編集して[保存]を押します。今すぐあなたのAndroidプロジェクトをもう一度実行してください私は問題が解決されると思います。

1
pavel_coder

これが私がこの問題を解決した方法です

まず、あなたはSHA-1値を得なければなりません。そのためには、2つの方法があります。
- > Android StudioでSHA-1の値を取得します。

  1. Gradleをクリック
  2. 署名レポートをクリック
  3. SHA-1値をコピー

または - >キーストアファイルからSHA-1値を取得する。

keytool -list -v -keystore keystore_file_name.jks -alias key0

このCD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84のようにSHA1の値をクリップボードにコピーします。

そして、 http://tomeko.net/online_tools/hex_to_base64.php を開いて、SHA1値をbase64に変換します。
これはFacebookが要求するものです
生成されたハッシュ "******************** ="を取得して、ハッシュキーをFacebookアプリケーションにコピーします。

1
Sajid Zeb

手動でキーハッシュを入力する場合(たとえば、モバイルからFacebookダッシュボードまで)は、必ず小さいLと大文字のIを区別してください。

1
Kashif Nazar

アプリをデバッグしていたときにも同じ問題がありました。添付画像の中で消えてしまったハッシュ(Facebookが無効であると言っているもの)を書き直し、それをFacebookの開発者コンソールの主要なハッシュに追加しました。ただタイプミスに注意してください。

この解決策は、適切な解決策よりも簡単な回避策のようなものです。

1
Piotr Sagalara

これは同じ問題を抱える人を助けるかもしれません

  1. 以下のコードを使ってキーハッシュを生成する

keytool -exportcert -alias <your_keystore> alias -keystore <your_keystore_file> | openssl sha1 -binary | openssl base64

keytoolの使い方

2. Facebook開発者の必須フィールドに貼り付けます

3.Androidスタジオのファイル - >プロジェクトの構造 enter image description here

署名パラメータを追加する

4.味を選ぶ enter image description here

作成した署名設定を選択します

5.ビルドタイプを選択します enter image description here

6.ビルドバリアントを選択してビルドします

enter image description here

1
CLIFFORD P Y

同じ問題がありました。あなたがFacebookの開発者セクションに格納されているハッシュキーを生成したのと同じデバイスでAPKを構築することを確認してください。

0
genericname

以下をMainApplication.onCreateに追加することでこれを修正しました。

      try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.genolingo.genolingo",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String hash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
                KeyHash.addKeyHash(hash);
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("PackageInfoError:", "NameNotFoundException");
        } catch (NoSuchAlgorithmException e) {
            Log.e("PackageInfoError:", "NoSuchAlgorithmException");
        }

それから私はこれをGoogleの開発者コンソールにアップロードしてから派生APKをダウンロードしました。これは何らかの理由でまったく異なるキーハッシュを持っています。

それからlogcatを使って新しいキーハッシュを決定し、他のユーザーが概説したようにそれをfacebookに追加しました。

0
Michael

使用されているフェイスブックは、デフォルトのパスワードおよびデバッグ用のエイリアスではありません。あなたはそれを次のように変える必要があります、そしてそれは働きます。

/usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64

デフォルトのパスワードで何も変更していなければ、Androidになります。 build.gradleファイルで設定することもできます。しかし、同じエイリアスパスワードを使ってハッシュを生成する必要があります。

Android{
    signingConfigs {
        release {
            storeFile file("~/.Android/debug.keystore")
            storePassword "Android"
            keyAlias "androiddebugkey"
            keyPassword "Android"
        }
    }
}
0
abhi shukla
try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "www.icognix.infomedia",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("YourKeyHash :", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
0
ZafarHussain

ここのみんなは正しい答えがたくさんあります。たったひとつ。受け取ったハッシュをアプリケーション - >設定 - >メインに貼り付けてください。

0
Chuck

これは私のために働きました。

Program Files\Java\jdkX.X.X_XXX\binフォルダにあるAPKをPCにコピーします。

私の場合はC:¥Program Files¥Java¥jdk1.8.0_191¥binです。

このディレクトリでCMDを開き、次のように入力します。

keytool -list -printcert -jarfile YOUR_APK_NAME.apk

SHA1値をクリップボードにコピーします。これは次のようになります。79:D0:E6:80:4E:28:1E:D1:88:28:CB:D7:E6:BE:2E:0C:FB:24:98:52

次に、 http://tomeko.net/online_tools/hex_to_base64.php に移動して、SHA1値をbase64に変換します。

これは、Facebookが生成されたハッシュ "******************** ="を取得し、あなたのFacebook開発者のアプリ設定にキーハッシュをコピーすることを要求するものです。

0
Muhammad Ovi