私はFacebookアプリの投稿機能を統合したいAndroidアプリに取り組んでいます。私はFacebook-Android SDKをダウンロードし、そこにreadme.md(テキストファイル)を取得しました。そこには、Androidのキーハッシュを生成することが記載されています。どうすれば生成できますか?
私はFacebookアプリの投稿機能を統合したいAndroidアプリに取り組んでいます。私はFacebook-Android SDKをダウンロードし、そこにreadme.md(テキストファイル)を取得しました。そこには、Androidのキーハッシュを生成することが記載されています。どうすれば生成できますか?
回答:
ここに手順があります
Googleのコードからopensslをダウンロードします(64ビットマシンの場合は、 openssl-0.9.8e X64を最新バージョンではなくダウンロードます)。
それを抽出します。C:/にフォルダー-OpenSSLを作成し、抽出したコードをここにコピーします。
debug.keystoreファイルのパスを検出します。uが見つからなかった場合は、C:/で検索し、次のステップのコマンドでパスを使用します。
keytool.exeパスを検出し、コマンドプロンプトでそのdir /に移動して、このコマンドを1行で実行します-
$ keytool -exportcert -alias androiddebugkey -keystore "C:\ Documents and Settings \ Administrator.android \ debug.keystore" | "C:\ OpenSSL \ bin \ openssl" sha1 -binary | "C:\ OpenSSL \ bin \ openssl" base64
詳細はこちらをご覧ください
$
。
[2020を編集]-> ここで答えを完全にお勧めします。アンドロイドスタジオを使用する方がずっと簡単で、コードを書く必要もありません。
このコードはどのアクティビティでも使用できます。デバッグキーである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());
}
キーを知った後でコードを削除できます;)
keytool
コマンドを使用して、間違ったキーハッシュを取得していました(理由がわからないので、調査する必要がないと判断しました)。これは機能し、文字通りデバッグとリリースのキーハッシュを取得するのに5分かかりました。+1
WindowsとMac OS X用の小さなツールを作成しました。キーストアファイルを投入して、ハッシュキーを取得してください。
デフォルトのdebug.keystoreファイルが必要な場合は、デフォルトのエイリアスとパスワードを使用します。それ以外の場合は、独自のキーストアファイルと値を使用します。
チェックして、Windowsバージョンをダウンロードするか、Mac OS Xバージョンをダウンロードしてください。 (Dev-Hostがダウンしていることがあります...リンクが壊れている場合は、PMに連絡して修正します)。
皆さんのお役に立てれば幸いです...
2014年12月31日-編集: ホストをAFHに変更。リンクが壊れている場合はお知らせください
2013年11月21日-編集:
ユーザーの要求に応じて、デフォルトのキーストアの場所と[寄付]ボタンを追加しました。私があなたを助けたなら、それを自由に使ってください。:)
keytool
コマンドラインを使用する場合と比較して、なぜツールが異なるSHAキーを提供するのですか?同じキーストアファイルに適用した場合、同じ結果が生成されるはずではありませんか?
現在FacebookのAndroidチュートリアルにある手順は、Windowsでは うまく機能しません。それらの例は、keytoolの出力をopensslにパイプする方法を示していますが、Windowsでこれを試行すると、何らかの理由で出力が無効になります。適切に機能させるには、中間ファイルを使用する必要があることがわかりました。これが私のために働いたステップです:
まず、Googleからopenssl for Windowsをダウンロードします。
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ビットマシンを使用している場合は、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\
、ユーザー名のみを入力します\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
myKeyStore
、リリースキーのパスを指定します。上記のコードはデバッグキー用です
私が見つけた最も簡単な解決策はこれです:
ログで次のような行を探します。
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領域に貼り付けます。
KeyHash: XWwXXXXX/5xxxxxxxxxxx=
助けてくれました!
SHA-1キーからキーハッシュを取得できます。PlayストアからSHA-1(Signed APK)キーを取得する必要があるのは非常に簡単で、以下の画像を確認してください。
次に、そのSHA-1キーをコピーして、このWebサイトhttp://tomeko.netに貼り付けます。以下の画像も確認して、キーハッシュを取得します。
この方法でLinux OSとWindows OSを実行しました。
keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64
必要に応じて、パスとエイリアス名とキーストアを変更してください。
端末はキーストアのパスワードを要求します。あなたはしなければならないパスワードを入力すると同じのためのキーストア。
したがって、最後にリリースハッシュキーを取得します。
ハッシュキーをリリースする 手順:
keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64
必要に応じて、パスとエイリアス名とキーストアを変更してください。
端末はキーストアのパスワードを要求します。あなたはしなければならないパスワードを入力すると同じのためのキーストア。
したがって、最後にリリースハッシュキーを取得します。
できた
ここでWindows用のopenSSLをダウンロードします。ここで64ビットと32ビットを見つけることができます。
ダウンロードしたファイルを抽出する
C:\ Users \ username \ .android \ debug.keystore
keytool -exportcert -alias androiddebugkey -keystore C:\ Users \ username.android \ debug.keystore | "C:\ openSSL \ bin \ openssl" sha1 -binary | 「C:\ openSSL \ bin \ openssl」base64
android
は24桁のハッシュをa
与え、タイピングは28桁のハッシュを与えます。なぜだかわかりません!
Androidサイトで説明されている手順のように、Androidの署名付きアプリのキーツールでキーストアを作成する必要があります。その後、cygwinをインストールしてから、Googleコードからopensslをインストールし、次のコマンドを実行するだけでハッシュを取得できます。 androidのキーを作成し、作成したFacebookアプリケーションにそのハッシュキーを挿入します。次に、Androidアプリケーションを介してFacebookアプリケーションにアクセスして、ウォールを投稿できます( "publish_stream")がその例です。
$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64
上記のコマンドをcygwinから実行する必要があります。
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)
それはアンドロイドであるパスワードを要求します。
メインアクティビティファイルを開いて、下記の関数を作成するだけです。
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」で検索して、ハッシュキーをコピーします。
ハッシュキーを生成すると、この関数を削除できます。
1)アプリケーションに署名するためのキーを作成し、エイリアスを覚えておきます。
2)OpenSSLをインストールします。
3)OpenSSLのbinフォルダーをパスに配置します。
4)FB-Android-SDK ページの「シングルサインオンのセットアップ」で説明されている手順に従い、ハッシュキーを生成します。正しいエイリアスとキーストアファイル名を入力してください。
5)Facebokでアプリケーションを作成し、[モバイルデバイス]タブでこのハッシュキーを入力します。
Facebook開発者サイトの公式ドキュメント:
@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) {
}
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
キーハッシュが得られますが、キーハッシュが保存されているキーハッシュと一致しません
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
Linuxの場合
ターミナルを開く:
デバッグビルド用
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
「.android」フォルダからdebug.keystoreを見つけてコピーし、デスクトップに貼り付けて、上記のコマンドを実行します
リリースビルド用
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) {
}
}
答え同様の問題に私は私のために動作してこれを見つけました:
リリースキーのハッシュを生成するには、MacまたはWindowsで次のコマンドを実行して、リリースキーのエイリアスとキーストアへのパスを置き換えます。
Windowsでは、以下を使用します。
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
このコマンドは、28文字の文字列を生成します。それを忘れないでくださいCOPYをしてPASTE自分のFacebookのApp IDのAndroidの設定には、このリリースキーハッシュを。
画像: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
これを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){
}
Android Studioでも私のものを解決しましたが、アプローチは少し異なります。
Android StudioでSHA-1値を取得する。
SHA-1値は次のようになりますCD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84
http://tomeko.net/online_tools/hex_to_base64.phpを開き、SHA1値をbase64に変換します。これはFacebookが生成されたハッシュ「******************** =」を取得し、キーハッシュをFacebookアプリコンソールにコピーするために必要です。
この回答の一部は、ここGithubリンクから取得
複雑な方法と簡単な方法の2つの方法があります。
メソッド1 :(少し複雑)
まず最初にssl をダウンロードする必要があります。64bit
それに32bit
応じて、次を含む名前のファイルをダウンロードしてください。e
バージョンのコードの後openssl-0.9.8e_X64.zip OR openssl-0.9.8e_WIN32.zipないとk
バージョンコードの後に、
そして、AndroidStudio / jre / binディレクトリに配置します。配置する場所がわからない場合は、次のようにandroid studioショートカットを右クリックして、このディレクトリを見つけることができます。
今、あなたは1つの場所で2つの必要なものを管理しましたが、それでもあなたの道を見つける必要があります debug.keystore
。これは、常にで見つけることができます"C:\Users\yourusernamehere\.android\debug.keystore"
。
注 アプリが既に公開されている場合、または公開しようとしている場合は、デバッグ署名を使用できるよりも開発モードでテストしている場合にのみ、公開署名キーストアを使用してください。
すべてが設定されたら、ハッシュキーを生成するために実行したいコマンドを配置します。 base64 format
ます。コマンドは次のようになります。
keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64
debug.keystore(デフォルトではandroid)のパスワードを入力するように求められます。自分のキーを使用している場合は、パスワードも自分のものになります。すべてが期待どおりに進んだ場合、出力は次のようになります。
2番目の方法(それぞれ簡単な方法)
上記のすべての手順を実行したくない場合は、次の方法を使用してhaskeyをログに記録します。
private void printKeyHash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
Log.e("KeyHash:", e.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("KeyHash:", e.toString());
}
}
出力:
最善の方法は、次のコードを使用することです。
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 <-
楽しい :)
心に留めておくべき小さな間違いをしました。キーストアを使用している場合は、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ではなくキーストアのパスワードを入力します。
涼しい。
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());
}
}
});
}
}
ハッシュキーを取得するKotlinコード
private fun logHashKey() {
try {
val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
for (signature in info.signingInfo.signingCertificateHistory) {
val md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
val something = Base64.getEncoder().encodeToString(md.digest());
Log.e("hash key", something);
}
} catch (e1: PackageManager.NameNotFoundException) {
Log.e("name not found", e1.toString());
} catch (e: NoSuchAlgorithmException) {
Log.e("no such an algorithm", e.toString());
} catch (e: Exception) {
Log.e("exception", e.toString());
}
}
デバッグおよびリリース環境では、ビルド設定に従って変更されるため、キーを生成することを忘れないでください。
これを試して :
1)コマンドラインを使用してハッシュキーを取得します(公式ドキュメント:https : //developers.facebook.com/docs/android/getting-started)
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64
または
2)コードを使用してハッシュキーを取得する
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Hask Kay generation
GetKeyHase();
}
private void GetKeyHase() {
try {
PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = (MessageDigest.getInstance("SHA"));
md.update(signature.toByteArray());
String hashkey_value = new String(Base64.encode(md.digest(), 0));
Log.e("hash key", hashkey_value);
//check you logcat hash key value
}
}catch (Exception e) {
Log.e("exception", e.toString());
}
}