私のアプリの1つでは、Facebookのデータを取得する必要があります。
私はアプリIDを作成しました。正常にログインしましたが、ログアウトした後にログインすると、次のように表示されます。
私がしていることは何が悪いのですか? 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");
}
ハッシュキーの生成が間違っています。ハッシュキーは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アプリケーションダッシュボードページに移動します。設定に行き、下の画像のように詳細を入力してください。
上記のステップを終えたら。アプリをもう一度再起動すると、Facebookにログインできます。キーハッシュの詳細については、 リンクを確認してください
設定ページに誤った情報を追加した場合は、エラーが発生します。そこで正しい情報を使ってください。そして、あなたのアプリケーション以外で一般の人があなたのアプリケーションを使用する必要がある場合は、permission(change "yes" in the "Status & Review" next to setting)
を有効にする必要があります。
Google PlayコンソールにあるApp署名セクションを開き、SHA1ofにアクセスします。アプリ署名証明書、それからこのツールでbase64に変換します。 http://tomeko.net/online_tools/ hex_to_base64.php?lang = en
あなたがこの問題に直面しているなら、あなたの developer.facebook.com にこのキーを入れてください
それからあなたのアプリがライブであることを確認してください
この緑色の丸はアプリがライブであることを示しています
そうでない場合は、この2つの手順に従ってアプリをライブにします。
ステップ1アプリケーションに移動します - >設定=> andaddメールで連絡して保存を適用
Setp 2それからgotoApp Reviewオプションを選択し、このトグルがYesになっていることを確認しますスクリーンショットを追加しました
注:ハッシュ・キーをコピーしたい場合は、LogcatのBlueServiceQueueを確認してください。
私は同じ問題を抱えていました。私はその解決策を見つけました。
私のコンピュータでdebugハッシュキーを生成するとき、私は自分のシステムのパスワードを入力しました。次のようになります -
キーストアのパスワードを入力してください: "Android"
これが私の場合の唯一の問題でした。
-----Debugキーハッシュを生成するには、このコマンドを使用します -
keytool -exportcert -alias androiddebugkey -keystore〜/ .Android/debug.keystore | openssl sha1 - バイナリ| openssl base64
キーストアのパスワードを入力してください: 'Android'
-----リリースキーハッシュを生成するには、このコマンドを使用します -
keytool -exportcert -alias "キーストアのエイリアス" -keystore "アプリに署名するときのキーストアへのパス" | openssl sha1 - バイナリ| openssl base64
このコマンドを実行した後、キーストアのパスワードを入力してください。
私は同じ問題を経験しました。私はこの奇妙な振る舞いの考えられる理由について短い研究をしました、そして、私は以下を見つけました:
新しい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で得られました。
によると Android用Facebookログイン では、キーハッシュ値を入力する必要があります。それを取得するために、あなたはあなたのアプリケーションに署名するために使用される キー が必要になります。
keytool \
-exportcert \
-alias YourKeyAlias \
-storepass YourStoreKeyPassword \
-keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64
私は上記のすべてを試してみましたが、私のクライアントに対する私の訴訟には何も助けになりませんでした!私のクライアントが覚えていたより彼は彼のデバイスにインストールされたFacebookアプリを持っていた。彼がそれを削除した後、ログインは完全に機能しました。ハッシュキーが変更され、私はFacebook Developers Consoleで古いハッシュキーをエラーからのキーで置き換えた(上記で示唆されたように)、そしてそれはうまくいく! Facebookアプリ自体が問題になる可能性があるので、Facebookアプリがインストールされているデバイスと、Facebookアプリがインストールされていないデバイスの両方でこれを解決し、両方のケースを処理する必要があります。
デバッグ用とリリース用の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
私は同じ問題を抱えていました。 最初のログイン、問題ないが無効なキーハッシュ
これは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) {
}
手動でrelease apkを電話機に移動して、apkを電話機にインストールして実行します。
今Androidのlogcatを見てください(フィルタKeyHashを使ってください:)あなたはfacebookのためのあなたのリリースハッシュキーを見るべきです。単にそれをコピーしてあなたの https://developers.facebook.com/apps に貼り付けてください。
今、あなたはそれが完全にうまくいくはずであるアプリをテストすることができます。
がんばろう。
長い研究の結果、解決策が見つかりました。
権限を次のように設定しました。
loginButton.setReadPermissions(public_profile email);
これは初めて機能しましたが、FBに再ログインしたときに無効ハッシュエラーが発生しました。
簡単な解決策は、上記の行を次のように変更することでした。
loginButton.setReadPermissions(Arrays.asList( "public_profile", "email"));
そしてそれは至福のように働いた!
うまくいけば、これは誰かに役立ちます。
Facebookは、誤解を招くような無効なハッシュキーエラーではなく、正しい例外を返すべきです。
たくさんの試みの後、私はこれに対する解決策を見つけました。デバッグキーとリリースキーの両方を生成してFacebook開発者コンソールに追加しましたが、それでもエラーが発生します。
私のために働いた唯一の解決策は、GoogleからOpenSSLプログラムをアンインストールし、 http://slproweb.com/products/Win32OpenSSL.html からダウンロードすることでした
それは本当に魔法のように働きます
あなたの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プロジェクトをもう一度実行してください私は問題が解決されると思います。
これが私がこの問題を解決した方法です
まず、あなたはSHA-1値を得なければなりません。そのためには、2つの方法があります。
- > Android Studioで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アプリケーションにコピーします。
手動でキーハッシュを入力する場合(たとえば、モバイルからFacebookダッシュボードまで)は、必ず小さいLと大文字のIを区別してください。
アプリをデバッグしていたときにも同じ問題がありました。添付画像の中で消えてしまったハッシュ(Facebookが無効であると言っているもの)を書き直し、それをFacebookの開発者コンソールの主要なハッシュに追加しました。ただタイプミスに注意してください。
この解決策は、適切な解決策よりも簡単な回避策のようなものです。
同じ問題がありました。あなたがFacebookの開発者セクションに格納されているハッシュキーを生成したのと同じデバイスでAPKを構築することを確認してください。
以下を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に追加しました。
使用されているフェイスブックは、デフォルトのパスワードおよびデバッグ用のエイリアスではありません。あなたはそれを次のように変える必要があります、そしてそれは働きます。
/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"
}
}
}
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) {
}
ここのみんなは正しい答えがたくさんあります。たったひとつ。受け取ったハッシュをアプリケーション - >設定 - >メインに貼り付けてください。
これは私のために働きました。
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開発者のアプリ設定にキーハッシュをコピーすることを要求するものです。