私はAndroidアプリを開発しています。このアプリではFacebookの投稿機能を統合したいと考えています。私はFacebook-Android SDKをダウンロードし、そこにreadme.md(テキストファイル)を持ってきました。そこにはAndroid用のキーハッシュを生成することが述べられています。どうやってそれを生成するのですか?
ここにステップがあります -
Opensslを Googleコード からダウンロードしてください(64ビットマシンをお持ちの場合は、 openssl-0.9.8e X64をダウンロードしてください 最新バージョンではありません)
それを解凍します。 C:/にOpenSSLというフォルダを作成し、抽出したコードをここにコピーします。
debug.keystoreファイルのパスを検出します。 uが見つからなかった場合は、C:/で検索し、次の手順のコマンドでPathを使用してください。
keytool.exeのパスを検出してそのdir /コマンドプロンプトに移動し、このコマンドを1行で実行します。
$ keytool -exportcert -alias androiddebugkey -keystore "C:¥Documents and Settings¥Administrator.Android¥debug.keystore" | "C:\ OpenSSL\bin\openssl" sha1バイナリ| "C:\ OpenSSL\bin\openssl" base64
詳細については こちらを参照してください
このコードはあらゆる活動で使用できます。ハッシュキーをlogcatに記録します。これはデバッグキーです。これは簡単で、SSLを使うよりも安心です。
PackageInfo info;
try {
info = getPackageManager().getPackageInfo("com.you.name", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
//String something = new String(Base64.encodeBytes(md.digest()));
Log.e("hash key", something);
}
} catch (NameNotFoundException e1) {
Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
Log.e("exception", e.toString());
}
キーを知ってからコードを削除できます;)
私はWindowsとMac OS X用の小さなツールを作成しました。キーストアファイルを投入してハッシュキーを取得するだけです。
デフォルトのdebug.keystoreファイルが必要な場合は、デフォルトのエイリアスとパスワードを使用してください。それ以外の場合は、独自のキーストアファイルと値を使用してください。
Windows版をダウンロードする または Mac OS X版をダウンロードする (Dev-Hostがダウンしている可能性があるので、リンクが壊れている場合はPM私と私はそれを修正します)。
皆さんのお役に立てばと思います...
2014年12月31日 - 編集:ホストをAFHに変更。リンクが切れている場合はお知らせください
2013年11月21日 - 編集:
ユーザーの要求に応じて、デフォルトのキーストアの場所とDONATEボタンを追加しました。私があなたを手伝ってくれたのなら、遠慮なくそれを使ってください。 :)
FacebookのAndroid Tutorial の現在の手順は、Windowsではうまく機能しません。彼らの例はkeytoolの出力をopensslにパイプする方法を示していますが、Windowsでこれを試した場合、出力は何らかの理由で無効になります。正しく動作させるためには、中間ファイルを使用する必要があることがわかりました。これが私のために働いたステップです:
Googleから Windows用openssl をダウンロードすることから始めます。
C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin
C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin
C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt
これらのコマンドを実行した後、有効なハッシュはファイルbase64.txtに保存されます。これをコピーしてFacebookのアプリ設定に貼り付けます。
これが Facebookの公式ページ :にあるものです。
keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64
このコマンドを断片にしてみましょう。
"keytool.exe"
を探してください。あなたはC:ドライブでそれを検索することができます。 "Java jdk"
または"Java jre"
にあります。複数のバージョンをインストールした場合は、どれかを選択してください。
CMDプロンプトを開き、"keytool.exe"
が見つかった上記のディレクトリに移動します。
「exe」を切り取って、Facebookページに表示されている上記のコマンドを貼り付けます。
これを入力すると、OpenSSLが入出力コマンドのように認識されないというエラーが発生します。解決策: OpenSSL から "Openssl"をダウンロードしてください(64ビットマシンをお持ちの場合は download openssl-0.9.8e X64 )。解凍してどこにでも保存できます... C:ドライブのOpenSSl
フォルダーに保存しました。
パイプの後の両方の場所で、 "|"で、OpenSSLのエラーが発生していた上記のコマンドのopensslを "C:\ OpenSSL\bin\openssl"に置き換えます。
パスワードの入力を求められたら、Android
を入力します。
そしてハッシュキーを取得します。さらなる手順については、Facebookページを再度参照してください。
このコードをあなたの活動のonCreate
に追加すると、logCatのKeyHashタグの下にハッシュが表示されます。
try {
PackageInfo info = getPackageManager().getPackageInfo(
getPackageName(),
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) {
}
あなたはあなたのアカウントに複数のハッシュキーを追加することができます、あなたがデバッグで実行しているのであればリリースモードでこれをもう一度実行することを忘れないでください。
Androidのキーハッシュコードを取得するには、次の手順に従います。
cd C:\Program Files\Java\jdk1.6.0_26\bin
と入力keytool -export -alias myAlias -keystore C:\Users\
your user name\.Android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
だけをタイプしてください。私が見つけた最も簡単な解決策はこれです:
ログ内で次のような行を探します。
04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch.
Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
application settings. Check your application settings at
http://www.facebook.com/developers
「abcdefgHIJKLMN + OPqrstuvwzyz」をコピーして、FacebookのAndroid Key Hash領域に貼り付けます。
ここにWindows用のopenSSLをダウンロードしてください ここで64bitと32bitを見つけることができます
ダウンロードしたファイルを解凍する
C:\ Users\username\.Android\debug.keystore
keytool -exportcert -alias androiddebugkey -keystore C:\ Users\username.Android\debug.keystore | "C:\ openSSL\bin\openssl" "C:\ openSSL\bin\openssl" base64
Androidサイト に記載されている手順のように、Android用の署名付きアプリ用のkeytoolでキーストアを作成する必要があります。その後、cygwinをインストールする必要があります。 google code からopensslをインストールするには、次のコマンドを実行するだけでAndroid用のハッシュキーが取得され、そのハッシュキーがFacebookアプリケーションに追加されます。作成した。そして、あなたはウォールを投稿するためのAndroidアプリケーション( "publish_stream")を介してfacebookアプリケーションにアクセスできます。
$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 - バイナリ| openssl base64
あなたはcygwinから上記のコマンドを実行する必要があります。
単にあなたのメインアクティビティファイルを開き、下記のメンション関数を作成します。
try {
PackageInfo info = getPackageManager().getPackageInfo(
"your.application.package.name",
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 (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
1.1あなたのアプリケーションを実行してください、これはあなたのアプリケーションのためのハッシュキーを生成します。
さて、log catを開いて "KeyHash"で検索し、ハッシュキーをコピーしてください。
ハッシュキーを生成したら、この関数を削除することができます。
OpenSSLをダウンロードする- >インストールする- >通常インストールされるC:\ OpenSSL
それからcmdを開いてタイプする
cd../../Program Files (Enter)
Java (Enter)
dir (Enter)
cd jdk1.6.0_17 (varies with jdk versions) (Enter)
jdkのバージョンを確認するにはC:/ program files/Java/jdk_versionに行きます。
cd bin (enter)
keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.Android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)
Androidのパスワードを聞いてきます。
1)アプリケーションに署名するための鍵を作成し、別名を覚えておいてください。
2)OpenSSLをインストールしてください。
3)OpenSSLのbinフォルダをパスに入れてください。
4)FB-Android-SDKの「シングルサインオンの設定」 ページ の手順に従って、ハッシュキーを生成します。必ず正しい別名と鍵ストア・ファイル名を入れてください。
5)Facebokでアプリケーションを作成し、[モバイルデバイス]タブの下にこのハッシュキーを入力します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add code to print out the key hash
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.hellofacebook",
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) {
}
Linuxの場合
ターミナルを開く:
デバッグビルド用
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
debug.keystore from ".Android"フォルダからコピーしてデスクトップに貼り付け、上記のコマンドを実行します。
リリースビルド用
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
注:どちらの場合もパスワードを要求する必要があります。パスワードを要求しない場合は、コマンドに問題があることを意味します。
Androidアプリケーションの場合
このコードは、Facebook統合のためにあなたのAndroidアプリケーションのハッシュキーを取得するために使用されます。すべてのデバイスをテストしましたが、正常に動作しています。このコードのパッケージ名のみを変更してください。
private void facebookHashKey() {
try {
PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String hashCode = Base64.encodeToString(md.digest(), Base64.DEFAULT);
System.out.println("Print the hashKey for Facebook :"+hashCode);
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
}
keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.Android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64
これは私のために働きました...
ステップ:
1) Open command line go to - > Java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.Android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64
.................... give proper debug.keystore path and openSSL path ..
4) Finley it may be ask u password .. so give password -> Android ...
5) you will get 28 characters that will be your has key
Kotlinの印刷キーハッシュにこれを使用してください
try {
val info = context.getPackageManager().getPackageInfo(context.packageName,
PackageManager.GET_SIGNATURES);
for (signature in info.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("Key hash ", Android.util.Base64.encodeToString(md.digest(), Android.util.Base64.DEFAULT))
}
}catch (e:Exception){
}
リリースキーのハッシュを生成するには、リリースキーのエイリアスとキーストアへのパスを置き換えて、MacまたはWindowsで次のコマンドを実行します。
Windowsでは、以下を使用してください。
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
このコマンドは28文字の文字列を生成します。 COPYとPASTEをこのリリースキーのハッシュに入れることを忘れないでください。あなたのFacebookアプリIDのAndroid設定。
image:fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png
から参照してください: https://developers.facebook.com/docs/Android/getting-started#release-key-hash と http://note.taable.com
最も簡単な解決策:
最善の方法は、次のコードを使用することです。
private void getHashKey(String pkgName)
{
try
{
PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures)
{
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String hashKey = Base64.encodeBytes(md.digest());
_hashKey_et.setText(hashKey);
Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
}
}
catch (NameNotFoundException e)
{
e.printStackTrace();
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
}
しかし、私はFacebookアプリケーション用のHashKeyを生成するための簡単なツールがないという事実にとてもイライラしました。 OpensslやKeytoolを使ったり、署名からハッシュを取得するためにコードを使用したりする必要があるたびに...
だから私はあなたのためにその仕事をする簡単なKeyGenToolを書きました: - > Google PlayのKeyGenTool < -
楽しい :)
Sslをcドライブおよびopensslフォルダーに開いたままにしてから、このコマンドを使用してください。
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\AJAY SUNDRIYAL.Android\debug.keystore" | openssl sha1 -binary | openssl base64
まず、ローカルコンピュータでキーハッシュを生成するには、Androidのデバッグキーストアに対してJavaのkeytoolユーティリティ(コンソールのパスにあるはずです)を実行します。これは、デフォルトではあなたの家の.Androidディレクトリにあります。
ubuntuでは、それは私のコンピュータで目が覚めている
keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64
私は心に留めておくべき小さなミスをしました。キーストアを使用している場合は、androiddebugkeyではなく、エイリアス名を入力してください。
私は自分の問題を解決しました。 Facebookが私のデバイスにインストールされている場合は、今でも私のアプリはFacebookのログイン統合に関するデータを取得しています。ハッシュキーを気にするだけです。
下記を参照してください。
C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64
その後を押します Enter - パスワードの入力を求められたら、Androidではなくキーストアのパスワードを入力します。
クール。
コーディング方法を知らない人のために、グーグル上のAivarsDaの主要なgenツールは私が最も簡単な解決策を演じる。ハッシュキーを取得してFacebookアプリの設定にコピーするだけです。 keygenツールを共有すると、携帯電話でアプリがクラッシュするので、メモ帳で手動で入力してfbにコピーしました。欲求不満の日々の後、最後にこのステップを過ぎて
import Java.security.MessageDigest;
import Java.security.NoSuchAlgorithmException;
import Android.os.Bundle;
import Android.app.Activity;
import Android.content.pm.PackageInfo;
import Android.content.pm.PackageManager;
import Android.content.pm.PackageManager.NameNotFoundException;
import Android.content.pm.Signature;
import Android.text.Editable;
import Android.util.Base64;
import Android.util.Log;
import Android.view.Menu;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.EditText;
public class MainActivity extends Activity {
Button btn;
EditText et;
PackageInfo info;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button)findViewById(R.id.button1);
et=(EditText)findViewById(R.id.editText1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
info = getPackageManager().getPackageInfo("com.example.id", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
//String something = new String(Base64.encodeBytes(md.digest()));
et.setText("" + something);
Log.e("hash key", something);
}
} catch (NameNotFoundException e1) {
Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
Log.e("exception", e.toString());
}
}
});
}
}
Windowsの場合: -
1.Download openssl(openssl-for-windows)
2.Copy and Paste openssl folder into c drive.
3.C:\Android\.Android\debug.keystore => Debug Keystore path
4.C:\Program Files\Java\jdk1.8.0_181 => JDK PATH
5.Go to jdkpath=>Enter the below command. (keytool inside Debug keystore path)
keytool -exportcert -alias androiddebugkey -keystore C:\ Android.android\debug.keystore | "C:\ openSSL\bin\openssl" sha1-binary | "C:\ openSSL\bin\openssl" base64
keytool
を使ってKey Hashを生成しようとしましたが、どういうわけか生成されたハッシュは有効なものではありません。
packageManager
自体から取得できれば、時間と労力を節約できます。
try {
val info = this.packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
MessageDigest.getInstance("SHA").apply {
update(signature.toByteArray())
Log.d("KeyHash:", Base64.encodeToString(digest(), Base64.DEFAULT))
}
}
} catch (e: PackageManager.NameNotFoundException) {
Log.d("KeyHash Exception:", "${e.message}")
} catch (e: NoSuchAlgorithmException) {
Log.d("KeyHash Exception:", "${e.message}")
}