web-dev-qa-db-ja.com

Android-Facebookアプリのキーハッシュ

私はAndroidアプリを開発しています。このアプリではFacebookの投稿機能を統合したいと考えています。私はFacebook-Android SDKをダウンロードし、そこにreadme.md(テキストファイル)を持ってきました。そこにはAndroid用のキーハッシュを生成することが述べられています。どうやってそれを生成するのですか?

218
ravi babu

ここにステップがあります -

  1. Opensslを Googleコード からダウンロードしてください(64ビットマシンをお持ちの場合は、 openssl-0.9.8e X64をダウンロードしてください 最新バージョンではありません)

  2. それを解凍します。 C:/にOpenSSLというフォルダを作成し、抽出したコードをここにコピーします。

  3. debug.keystoreファイルのパスを検出します。 uが見つからなかった場合は、C:/で検索し、次の手順のコマンドでPathを使用してください。

  4. 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

    • それはパスワードを要求します、Androidを置きます
    • それで全部です。キーハッシュを取得します

詳細については こちらを参照してください

305
Avi C

このコードはあらゆる活動で使用できます。ハッシュキーを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());
}

キーを知ってからコードを削除できます;)

226
Bassem Samy

私はWindowsとMac OS X用の小さなツールを作成しました。キーストアファイルを投入してハッシュキーを取得するだけです。

デフォルトのdebug.keystoreファイルが必要な場合は、デフォルトのエイリアスとパスワードを使用してください。それ以外の場合は、独自のキーストアファイルと値を使用してください。

Windows版をダウンロードする または Mac OS X版をダウンロードする (Dev-Hostがダウンしている可能性があるので、リンクが壊れている場合はPM私と私はそれを修正します)。

皆さんのお役に立てばと思います...

2014年12月31日 - 編集:ホストをAFHに変更。リンクが切れている場合はお知らせください

2013年11月21日 - 編集:

ユーザーの要求に応じて、デフォルトのキーストアの場所とDONATEボタンを追加しました。私があなたを手伝ってくれたのなら、遠慮なくそれを使ってください。 :)

Screen shotScreen shot 2

132
Shahar

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のアプリ設定に貼り付けます。

59
Bryan Bedard

これが Facebookの公式ページ :にあるものです。

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

このコマンドを断片にしてみましょう。

  1. "keytool.exe"を探してください。あなたはC:ドライブでそれを検索することができます。 "Java jdk"または"Java jre"にあります。複数のバージョンをインストールした場合は、どれかを選択してください。

  2. CMDプロンプトを開き、"keytool.exe"が見つかった上記のディレクトリに移動します。

    「exe」を切り取って、Facebookページに表示されている上記のコマンドを貼り付けます。

  3. これを入力すると、OpenSSLが入出力コマンドのように認識されないというエラーが発生します。解決策: OpenSSL から "Openssl"をダウンロードしてください(64ビットマシンをお持ちの場合は download openssl-0.9.8e X64 )。解凍してどこにでも保存できます... C:ドライブのOpenSSlフォルダーに保存しました。

  4. パイプの後の両方の場所で、 "|"で、OpenSSLのエラーが発生していた上記のコマンドのopensslを "C:\ OpenSSL\bin\openssl"に置き換えます。

  5. パスワードの入力を求められたら、Androidを入力します。

そしてハッシュキーを取得します。さらなる手順については、Facebookページを再度参照してください。

47
DeltaCap019

このコードをあなたの活動の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) {

}

あなたはあなたのアカウントに複数のハッシュキーを追加することができます、あなたがデバッグで実行しているのであればリリースモードでこれをもう一度実行することを忘れないでください

31
Ilya Gazman

Androidのキーハッシュコードを取得するには、次の手順に従います。

  1. Windows用OpenSSLをダウンロード ここ
  2. 今Cドライブに解凍します
  3. CMDプロンプトを開く
  4. cd C:\Program Files\Java\jdk1.6.0_26\binと入力
  5. それから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だけをタイプしてください。
  6. 完了
23
noelyahan

私が見つけた最も簡単な解決策はこれです:

  • Log Catを開く
  • Android SDKを使ってFacebookにアクセスしてみる
  • ログ内で次のような行を探します。

    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領域に貼り付けます。

14
Ron
  • ここにWindows用のopenSSLをダウンロードしてください ここで64bitと32bitを見つけることができます

  • ダウンロードしたファイルを解凍する

  • cドライブにフォルダ名openSSLを作成する
  • 展開したすべてのアイテムをopenSSLフォルダ(bin、include、lib、openssl.cnf)にコピーします。
  • androidのデバッグキーストアを取得し、デフォルトの場所は

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

  • エンターキーを押すと28桁のキーコードが表示されます
11
Ashana.Jackol

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から上記のコマンドを実行する必要があります。

6
hossaindoula
  1. 単にあなたのメインアクティビティファイルを開き、下記のメンション関数を作成します。

         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あなたのアプリケーションを実行してください、これはあなたのアプリケーションのためのハッシュキーを生成します。

  1. さて、log catを開いて "KeyHash"で検索し、ハッシュキーをコピーしてください。

  2. ハッシュキーを生成したら、この関数を削除することができます。

6
mohit sharma

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のパスワードを聞いてきます。

6
Maniya Joe

1)アプリケーションに署名するための鍵を作成し、別名を覚えておいてください。

2)OpenSSLをインストールしてください。

3)OpenSSLのbinフォルダをパスに入れてください。

4)FB-Android-SDKの「シングルサインオンの設定」 ページ の手順に従って、ハッシュキーを生成します。必ず正しい別名と鍵ストア・ファイル名を入れてください。

5)Facebokでアプリケーションを作成し、[モバイルデバイス]タブの下にこのハッシュキーを入力します。

5

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) {

    }
5
Hardik Thaker

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

注:どちらの場合もパスワードを要求する必要があります。パスワードを要求しない場合は、コマンドに問題があることを意味します。

4
Biraj Zalavadia

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) {

    }
}
4
Ramkailash

として 答え 私はこれが私のために働いていることがわかった:同じような問題について:

  • ハッシュを知りたいapkname.apkファイルを 'Java\jdk1.7.0_79\bin'フォルダにコピーします。
  • このコマンドを実行してくださいkeytool -list -printcert -jarfile apkname.apk
  • SHA1値をコピーして、これを使用して変換してください site
  • 変換されたキーハッシュ値を使用します(例zaHqo1xcaPv6CmvlWnJk3SaNRIQ =
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
4
Pravin Mohol

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){

    }
3
Prashant Jajal

リリースキーのハッシュを生成するには、リリースキーのエイリアスとキーストアへのパスを置き換えて、MacまたはWindowsで次のコマンドを実行します。

Windowsでは、以下を使用してください。

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

このコマンドは28文字の文字列を生成します。 COPYPASTEをこのリリースキーのハッシュに入れることを忘れないでください。あなたの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-hashhttp://note.taable.com

3
HTML5 developer

最も簡単な解決策:

  1. ハッシュキーを追加しないで、他のすべてを実装する
  2. Facebookのログインを押すと、「無効なキーハッシュです。キーハッシュ「xxx」は保存されているどのキーとも一致しません。」というエラーが表示されます。
  3. Facebookアプリのダッシュボードを開き、ハッシュ "xxx ="(エラーからの "xxx"ハッシュ+ "="記号)を追加します。
2
Singed

最善の方法は、次のコードを使用することです。

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 < -

楽しい :)

1
AivarsDa

Sslをcドライブおよびopensslフォルダーに開いたままにしてから、このコマンドを使用してください。

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\AJAY SUNDRIYAL.Android\debug.keystore" | openssl sha1 -binary | openssl base64
1
SANJAY GUPTA

まず、ローカルコンピュータでキーハッシュを生成するには、Androidのデバッグキーストアに対してJavaのkeytoolユーティリティ(コンソールのパスにあるはずです)を実行します。これは、デフォルトではあなたの家の.Androidディレクトリにあります。

ubuntuでは、それは私のコンピュータで目が覚めている

keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64
1
Jamshid

私は心に留めておくべき小さなミスをしました。キーストアを使用している場合は、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ではなくキーストアのパスワードを入力します。

クール。

1
Pravin Mohol

コーディング方法を知らない人のために、グーグル上のAivarsDaの主要なgenツールは私が最も簡単な解決策を演じる。ハッシュキーを取得してFacebookアプリの設定にコピーするだけです。 keygenツールを共有すると、携帯電話でアプリがクラッシュするので、メモ帳で手動で入力してfbにコピーしました。欲求不満の日々の後、最後にこのステップを過ぎて

0
Undra Bailey
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());
                }
            }
        });
    }



}
0
Anil Bhatiya

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

0
priyanga

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}")
}
0
Delacrix Morgan