77

アプリケーションを Facebook に統合しました。このために、Facebook のGraph APIを使用しています。プロフィールと友達の情報を取得しています。Android 2.3 (Gingerbread) を搭載した私のデバイスでは問題なく動作していますが、最近、クライアントが私のアプリから Facebook に接続しようとしているときに問題が発生しました。彼のデバイスにはAndroid 4.0 (Ice Cream Sandwich) が搭載されています。Facebook のログイン画面に移動するアプリのボタンをクリックすると、ログイン後に次のメッセージが表示されます。

Facebook ログイン用にアプリが正しく構成されていません。OK を押すと、Facebook に接続せずにアプリケーションに戻ります。

フェイスブックのエラーメッセージ

Androidのバージョンが関係しているのか、何が問題なのかわかりません。

この問題を解決するにはどうすればよいですか?

4

18 に答える 18

90

私はフェイスブックで働いていますが、これは取り組むべき重要な問題です。この質問に対するもう 1 つの回答は、SSO を無効にすることは非常に悪いことであり、ユーザーの Facebook 資格情報を盗む可能性のある悪意のあるアプリに対してアプリを開くことを示唆しています。

このハックは、SSO を使用せずに Facebook に対して WebView ダイアログを起動し、ユーザーはそのダイアログにログイン資格情報を入力する必要があります。悪意のあるアプリは、この情報を簡単に盗むことができます。アプリのセキュリティを確保し、ユーザーの機密データを保護するために、Facebook SSO を正しく実装することを常にお勧めします。

このエラー メッセージを追加する前は、ダイアログは警告なしで自動的に閉じ、警告なしで失敗していました。このエラー メッセージを追加して、Facebook アプリ ダッシュボードでアプリの構成に問題があることを視覚的に表示しました。Android の場合、LogCatを確認すると、「OK」を押した後に、認証が失敗した原因についてのより技術的な説明を表示するエラー メッセージが表示されるはずです。

たとえば、Hackbook の例を使用し、ソースに独自の APP_ID を指定せず、ハッシュ キーをダッシュ​​ボードに追加しなかった場合、ネイティブ SSO ダイアログで [OK] を押すと、LogCat にこのエラーが表示されます ( Util.ENABLE_LOG が true に設定されている):

D/Facebook-authorize(24739): ログインに失敗しました: invalid_key:Android キーが一致しません。キー「uk3udeH7vrOGNFH2FJjdJbdWJWI」は、アプリケーション設定で指定された許可されたキーと一致しません。http://www.facebook.com/developersでアプリケーションの設定を確認してください

役立つ視覚的なエラー メッセージを追加しました。理論的には、最初から正しく実装されていれば、以前の実装が壊れることはありません。このエラー メッセージが表示された場合は、ダッシュボードでアプリの設定が正しく構成されていないことを意味します。
Android クラス/パッケージ名、Android ハッシュ キーなどを再確認してください。すべてを正しく行った場合、このメッセージは表示されません。

要約すると、ダッシュボードの Android ハッシュ キーの不一致など、アプリの構成に問題があるため、このエラー メッセージが表示されます。Facebook がこのエラー メッセージを追加する前は、ダイアログが起動し、自動的に閉じて失敗していました。これを修正するには、LogCat でエラー メッセージを確認し、すべてが正しく実装されていることを確認してください。ドキュメントを読んで、すべてが正しいことを確認してください。この質問に対して受け入れられた回答を使用しないでください。

また、Facebook 開発者が報告した外部バグ レポートをフォローして、さらなる更新を確認することもできます。

于 2012-09-15T02:01:49.123 に答える
15

次のように設定してみてください。

最初にOpenSSLをダウンロードします(64 ビット マシンを使用している場合は、出力が無効になるため、最新バージョンのopenssl-0.9.8k X64ではなく、 openssl-0.9.8e X64 をダウンロードする必要があります)。ファイルを抽出し、opensslたとえば C:/ にフォルダーを作成し、そこにファイルをコピーします。

keyto へのパスを見つけます。私のは C:\Program Files\Java\jdk1.7.0_05\bin です。

への道を見つけてくださいdebug.keystoreEclipse でメニューWindow -> Preferences -> Android -> Buildを開くと、パスが何であるかを確認できます。Default Debug keystore:とパスが表示されます。

への道を見つけてくださいopenssl。私のは C:\openssl8e\bin/ です。

コマンドを開いて次のように入力します。

"C:\Program Files\Java\jdk1.7.0_05\bin\keytool" -exportcert -alias androiddebugkey -keystore "C:\Users\User.android\debug.keystore" | "C:\openssl8e\bin\openssl" sha1 -バイナリ | 「C:\openssl8e\bin\openssl」base64

Aそして を押しEnterます。

パスワードを挿入:android

のハッシュキーを取得しますdebug.keystore

署名済みAPKをエクスポートし、アプリケーションのキーストアを作成する場合は、cmd debugkeystore alias をアプリのエイリアスに置き換え、キーストア パスをアプリ用に新しく作成したキーストアへのパスに置き換え、app.keystore.署名済みアプリの新しいハッシュ キーを取得します。

于 2012-09-23T14:24:04.333 に答える
12

Jesse Chen からの回答は問題ありません。Facebooks SDK は問題なく動作します。壊れないでください。

私は再びこの問題に遭遇し、Facebook SDK のドキュメントが修正され、現在は非常に優れていることがわかりました。現在、ハッシュキーを設定してデバッグおよびリリースする方法をガイドしています。言われた通りにするだけ。

以下は私の昔話です。古いPlay ストアのデバッグ用と署名されてリリースされたアプリケーション用の 2 つのハッシュ キーを設定できることが不足しています。


Facebook SDK のドキュメントで、問題私の場合にあることがわかりました。これにより、デバッグ キー ハッシュを使用して Facebook のアプリ構成に配置するようになりました。ハッシュは次のように誘導されます。

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Eclipseからアプリケーションをデバッグまたは実行している場合、これは正常に機能します。

ただし、アプリケーションを Android Play に公開する場合は、署名済みの .apk ファイルをエクスポートするために独自の発行者キーを使用する必要があります。その .apk を使用すると、Facebook アプリ コンソールのハッシュは無効になります。次のように、開発者キーのハッシュを取得する必要があります。

keytool -exportcert -alias <developer alias> -keystore ~/.android/<developer keystore> | openssl sha1 -binary | openssl base64

そして、公開されたアプリケーションの Facebook アプリ コンソールの Android キー ハッシュに入れます。その後、署名された .apk ファイルに対して SSO が再び正常に機能します。

于 2012-09-24T20:09:15.003 に答える
8

私が集めた限りでは、これは Facebook の問題であり、報告されています。しかし、問題は解決しません。

これを回避する方法 (2.3.3 でテスト済み) は、Facebook SDK をハックし、2 つの承認メソッドを探して、 DEFAULT_AUTH_ACTIVITY_CODEFORCE_DIALOG_AUTHに変更することです。これにより、シングル サインオン機能が無効になります。

あなたが好きなら

public void authorize(Activity activity, String[] permissions,
            int activityCode, final DialogListener listener) 

startSingleSignOn部分を無効にします。最終的には Facebook が問題を解決し、古い定数を元に戻すだけで済むため、そうしないことが望ましいです。

編集

このソリューションは、セキュリティ上の問題を引き起こします。ジェシー・チェンの回答を確認してください。

于 2012-09-12T16:34:00.500 に答える
5

私は同じ問題に直面しました.24時間かけて多くの検索を行った後、この方法を使用して問題を解決しました.

  1. たとえば、Xcode プロジェクトの現在のバンドル識別子を確認してください: com.yourcompanyname.yourappname

  2. Facebook でアプリを作成する場合は、同じ com.yourcompanyname.yourappname バンドル識別子を使用してください。添付ファイルを参照してください。

ここに画像の説明を入力

于 2012-12-21T05:02:32.733 に答える
3

ほんの数分前に4.0.4でこの問題が発生しましたが、問題は解決したようです。

于 2012-09-12T13:03:52.563 に答える
3

遅くなりましたが、まだ役に立ちます: *正しい方法は次のとおりです (デバッグ キーの場合は、リリースに応じて変更します): *

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\<User>\.android\debug.keystore" > <Drive letter>:\debug.txt
openssl sha1 -binary "<Drive letter>:\debug.txt" > "<Drive letter>:\debug_sha.txt"
openssl base64 -in "<Drive letter>:\debug_sha.txt" > "<Drive letter>:\debug_base64.txt"

ハッシュは、最後に生成されたファイル debug_base64.txt にあります。それを開いて、ハッシュをコピーします。

"" を、選択したユーザー名とドライブ文字に置き換えることを忘れないでください

于 2013-01-24T04:05:09.727 に答える
2

キー ハッシュを作成すると、 ga0RGNYHvNM5d0SLGQfpQWAPGJ8=のように、末尾に等号「=」が含まれる可能性があります。Facebook は等号をキー ハッシュの一部として喜んで受け入れますが、機能させるには等号を削除する必要があります。

さらに、ログイン中にAndroid Facebook SDK 3.0が「remote_app_idが保存されたIDと一致しません」という受け入れられた回答を確認してください。デバッグキーストアのキーハッシュを取得するときは、パスワード「android」を使用してください。そうしないと、キーハッシュが正しくなくなり、質問で指定されたエラーが表示されます(役に立った場合は、回答に投票してください)。

于 2012-12-27T10:48:05.347 に答える
1

通常、この問題は次の 2 つのチェックで解決できます。

  • Facebookコンソールでフラグを立てて、Facebook設定をライブで公開します
  • API キーの不一致
于 2015-01-13T14:52:00.183 に答える
1

ubuntu のような Debian システムでは、ディレクトリの下にあるkeytoolof を 使用して、このように生成しますjava/usr/lib/jvm/jdk*.*.*/bin/keytool

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

このようにして、Facebook のアプリ ハッシュの下に置くことができる本物のハッシュ キーを取得します。

于 2012-12-16T09:08:07.470 に答える
1

リリース バージョンの正しいハッシュ キーがあることを確認することで、Android での Facebook の設定ミスで発生していた問題を解決することができました。

リリース バージョンのハッシュ キーを取得するには、アプリケーションの署名に使用したキーを見つけて、次の手順を実行します。キーストア エイリアスの名前を挿入します (括弧なし)。エイリアスがわからない場合は、アプリを署名付きアプリとしてエクスポートすることで見つけることができます。エイリアスはウィザードの 2 ページ目にあります。キーストアへのパスも挿入します (括弧なし)。

keytool -exportcert -alias [Alias of your keystore] -keystore [Path to keystore] | openssl sha1 -binary | openssl base64
于 2012-09-20T13:34:07.797 に答える
1

OWN キーストアで署名されたアプリについて: この問題を解決するために数時間を費やした後、私はついにそれを手に入れ、まだ苦しんでいる人に答えを提供したいと思います:

私の手順: 自分のキーストア ファイル (debug.keystore ではない) を使用して、Eclipse 経由でアプリに署名しました。コマンドラインと既知のコマンド (keytool -exportcert -alias -keystore ~/.android/ | openssl sha1 -binary | openssl base64) を使用して、キー ハッシュを正常に受け取りました。開発者ダッシュボードにキー ハッシュを貼り付け、数分待った - > それでも同じエラー (上記の質問で指定したとおり)。いくつかのjdkなどで、いくつかの異なるキーツールを試しました...何も変わりませんでした。

解決策: マニフェストでデバッグ可能を有効にし、facebook SDK でデバッグを有効にしました。次に、自分のキーストアで apk に署名し、実際のデバイスにアップロードしました。USB経由でデバイスを接続し、DDMSパースペクティブを開いて、デバイス上のlogcatを表示しました。
アプリを起動して、エラー メッセージが表示されるようにしました。keytool によって生成されたキーとはまったく異なるキーが出力されます。このキーをlogcatから取得し、開発ダッシュボードに貼り付けて出来上がり->すべてが機能します

なぜこれが起こるのか、何が間違ったキーを引き起こしているのかはまだわかりませんが、この方法でうまくいきます.

于 2012-10-05T00:15:30.320 に答える
0

これはキーストアの問題です。アプリが構成されたのと同じキーストアを使用するようにEclipseを構成します。

于 2012-12-17T06:52:27.147 に答える
0

例外を実行したToastところ、キーの不一致例外がスローされ、今日FBアプリページにキーが追加され、正常に動作することがわかりました

于 2012-09-13T07:41:13.147 に答える
0

この問題も発生しました。

ここから Facebook 開発者向けの開始ページにアクセスしてください。

そしてステップ4に従ってください - コマンドラインでのこと。

私のために働いた。

楽しみ。

于 2012-10-26T20:54:11.803 に答える
0

同様の問題がありましたが、iOSの場合です。

解決策は、Facebook 開発者ダッシュボードで Facebook アプリを構成することです。

iOS の場合、次の 2 つのことを行う必要があります。

  1. Facebookログインを有効にしました

  2. バンドル ID はアプリと同じでなければなりません

于 2012-12-12T00:56:40.367 に答える
0

私は同じ問題を抱えていましたが、解決策は非常に簡単でした。ダッシュボードでアプリを作成したとき、Android デバッグ キーストアのキー ハッシュのみを追加しました。この場合、USB ケーブルを介して開発者としてアプリをインストールすると、これはすべて正常に機能します。

Play ストアでアプリを入手したら、プロダクション キーを使用してアプリに署名します。これは、デバッグ キーのように製品キーのキー ハッシュを取得し、それをネイティブ アプリ ハッシュのリストに 2 番目のハッシュとして追加する必要があることも意味します。

キーハッシュがどのように機能するかを覚えておいてください:keytool -exportcert -alias -keystore ~/keys/android_keystore | openssl sha1 -バイナリ | openssl base64

それが役立つことを願っています!

于 2012-10-31T08:13:25.940 に答える
0

数日前に同じエラーが発生しました。私の場合は、Android キーの不一致が原因でした。それがあなたにも役立つ場合は、次のように修正しました。

Facebook SDK で Util.java を開き、 を設定しprivate static boolean ENABLE_LOG = true;ます。アプリを実行し、メール ID とパスワードを入力します。キーの不一致がある場合、Facebook は署名を返します。このキー (署名) はLogCatにあります。このキーをコピーして、アプリのダッシュボードに貼り付けるだけです。これで問題は解決するはずです。private static boolean ENABLE_LOG = true;false に戻すことを忘れないでください。

于 2012-09-23T14:42:43.537 に答える