web-dev-qa-db-ja.com

Android studioを使用するときのfacebookハッシュキー

私はAndroid studioを使用してfacebook SDKを使用するアプリを開発しています。

私が次のコマンドを使用したとき

C:\Program Files\Java\jdk1.7.0_21\bin>keytool -exportcert -alias androiddebugkey
 -keystore "C:\Users\ninad\.Android\debug.keystore" | "D:\OpenSSL\bin\openssl" s
ha1 -binary |"D:\OpenSSL\bin\openssl" base64

返されたy5EquINHD6DvwVJFyJTuUEY3NSU =

このハッシュキーを使用すると、Facebookはエラーを表示します

無効なAndroid_keyパラメーター。キーc33Tm0FL_-kxyaPZq1JBLDh767は、許可されたキーと一致しません。

EclipseとAndroid studio?を使用する場合、facebookに必要なハッシュキーは異なりますか?これらのうち正しいハッシュキーはどれですか?

Facebookのアプリに両方のハッシュキーを追加しました。それでも、アプリには無効なAndroid_keyパラメーターが表示されます。

27
null pointer

このコードを試して、使用しているハッシュキーをチェックアウトする必要があるのはなぜですか。 Facebookのドキュメントから:

キーハッシュ生成手順をダブルチェックする以外に、正しいキーハッシュを使用していることを確認する別のオプションがあります。サンプルアプリの1つでコードを変更して、Facebookに送信された署名を印刷する必要があります。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.package", 
                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) {

    }
}
66
Tarun

Facebookハッシュキーを作成するためのリンクは次のとおりです。

public class FacebookHashKeyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_facebook_hash_key);
        try {
            PackageInfo info = getPackageManager().getPackageInfo("your.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 (NameNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

here から取得したコード。

7
Vijay Arora

oncreateメソッドで実行するだけです

private void printHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "-----------PUT YOUR 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) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

}
4
Gharjyot Singh

個人的には、アプリケーションbuild.gradleファイル内でハッシュを生成するのが好きです。

このbuild.gradle関数は、Windowsでハッシュを生成します(C:\\OpenSSL-Win64\\bin\\opensslをOpenSSLバイナリの場所に変更します):

def getFacebookHash = { ->
    try {
        def stdOut = new ByteArrayOutputStream()
        def stdIn = new ByteArrayInputStream()
        exec {

            commandLine "keytool", "-exportcert", "-alias", KEY_ALIAS, "-keystore", STORE_FILE, "-storepass", STORE_PASSWORD
            standardOutput = stdOut
        }
        stdIn = new ByteArrayInputStream(stdOut.toByteArray())
        stdOut = new ByteArrayOutputStream()
        exec {
            standardInput = stdIn
            commandLine "C:\\OpenSSL-Win64\\bin\\openssl", "sha1", "-binary"
            standardOutput = stdOut
        }
        stdIn = new ByteArrayInputStream(stdOut.toByteArray())
        stdOut = new ByteArrayOutputStream()
        exec {
            standardInput = stdIn
            commandLine "C:\\OpenSSL-Win64\\bin\\openssl", "base64"
            standardOutput = stdOut
        }
        def hashString = stdOut.toString().trim()
        return hashString
    }
    catch (error) {
        return error.toString();
    }
}

その後、Gradleスクリプトのどこにでも結果を印刷できます。

println "Facebook Release Key Hash: " + getFacebookHash()

gradle.propertiesに必要な詳細を保存します:

STORE_FILE=C:/Keystore.jks
STORE_PASSWORD=password
KEY_ALIAS=keystoreAlias
KEY_PASSWORD=password
0
Tim K

Opensslの出力からfacebookアプリの設定にコピー&ペーストしたので、似たような文字O0や1l |に関して混乱しないようにしています。またはG6 ...

最近、Playストアに診断プログラムを設置しました。このプログラムは、お使いの携帯電話のアプリにインストールされたキーハッシュを表示します。 「GetKeyHash」を検索します。デバイス上のすべてのアプリが最後に更新された日時で並べ替えられて表示され、それらを展開してキーハッシュ、パッケージ名、有効なアクティビティ名を表示できます。正しいGetKeyHashアプリは特別な権限を要求または使用しないため、インストール時にAndroidがそう言う必要があります。

シミュレータで実行するには、これも http://rightparen.com/Android/GetKeyHash.apk から入手できます。

IDEでアプリのデバッグバージョンをビルドする場合、キーハッシュはPlayストアに出荷する小売バージョンとは異なることに注意してください。 Facebook開発者コンソールでアプリに複数のキーハッシュを追加して、小売キーだけでなくデバッグキーも許可できます。

これで同じ結果が得られる場合は、バグがある可能性があります。潜在的な回避策をデバッグキーのみとして、〜/ .Android/debug.keystoreをバックアップしてそのファイルを削除できます。次回ビルドするとき、Androidシステムはバグを引き起こさないかもしれない新しいキーを生成します。この時点で、デバイスからアプリをアンインストールする必要があります。同じ証明書で署名する必要があるapkについてインストールしたら、上記のGetKeyHashまたは標準のメソッドを使用して新しいキーハッシュを取得し、facebookのアプリに追加します。

0
rightparen

そのファイル内にある現在のエイリアスをリストできます。そして、正しい名前を使用してハッシュを取得できます..。パスワードを空白のままにして、単にエンターキーを押してください...

keytool -list -keystore keystorefile

*****************  WARNING WARNING WARNING  *****************
* La integridad de la información almacenada en el almacén de claves  *
* NO se ha comprobado.  Para comprobar dicha integridad, *
* debe proporcionar la contraseña del almacén de claves.                  *
*****************  WARNING WARNING WARNING  *****************

Tipo de Almacén de Claves: JKS
Proveedor de Almacén de Claves: Sun

Su almacén de claves contiene 1 entrada

androiddebugkey, Sep 22, 2016, PrivateKeyEntry, 
Huella Digital de Certificado (SHA1): 3B:8F:DB:46:A0:B7:2E:37:E1:78:41:10:BD:D0:8A:FF:63:E0:94:22

ご覧のとおり.. androiddebugkeyという名前のキーが1つあります...おそらくあなたの場合、あなたはそれを持っています... o実行時に特定のものを書いていません:

{C:\Program Files\Java\jdk1.7.0_21\bin>keytool -exportcert -alias androiddebugkey
 -keystore "C:\Users\ninad\.Android\debug.keystore" | "D:\OpenSSL\bin\openssl" s
ha1 -binary |"D:\OpenSSL\bin\openssl" base64
}

この場合、必要なものはすべて返されます。

y5EquINHD6DvwVJFyJTuUEY3NSU=
0
superUser