2013-06-04 14 views
22

facebook SDKを使用するアプリを開発するにはアンドロイドスタジオを使用しています。私は、次のコマンドfacebookハッシュキー使用する場合はアンドロイドスタジオ

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 

を使用する場合、このハッシュキーのFacebookを使用しているとき、それはy5EquINHD6DvwVJFyJTuUEY3NSU =

を返さ

はエラー

無効android_keyパラメータを示しています。キーc33Tm0FL_-kxyaPZq1JBLDh767Uは、 の許可されたキーと一致しません。

eclipseとandroid studioを使用するときに、facebookに必要なハッシュキーが異なるのですか?これらのうち正しいハッシュキーですか?

私は両方のハッシュキーをfacebookで自分のアプリに追加しました。アプリは無効なandroid_keyパラメータを表示します。

+0

コードhttp://stackoverflow.com/questions/16767672/key-hash-doesnt-match-while-facebookにより、ハッシュキーを生成します-login-in-android/16768681#16768681 –

+0

それはc33Tm0FL_-kxyaPZq1JBLDh767Uを返す、私はFacebookのページでこれを与えた。それでも無効なandroid_keyパラメータが表示されます –

+0

https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/#sigこれはハッシュキーを生成する別の方法ですこのコードを開始クラスに配置することをお勧めします。 –

答えて

43

このコードを試して、使用しているハッシュキーをチェックアウトしないでください。 Facebookのドキュメントから:

鍵のハッシュ生成手順をもう一度確認するだけでなく、正しい鍵ハッシュを使用しているかどうかを確認する別のオプションもあります。サンプルアプリケーションの1つでコードを変更して、Facebookに送信された署名を印刷します。同様の見える文字O0または1リットルに関していかなる混乱がないようにあなたがFacebookアプリの設定にopensslの出力からコピー&ペーストしなかったと仮定すると、

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

    } 
} 
+0

このコードは、c33Tm0FL_-kxyaPZq1JBLDh767Uを返します。私はFacebookのページでこれを与えました。それでも無効なandroid_keyパラメータが表示されます –

+0

c33Tm0FL_-kxyaPZq1JBLDh767Uは間違いなく有効なキーではないようです。 – Tarun

0

|またはG6 ...

最近、Playストアに、携帯端末のすべてのアプリにインストールされているキーハッシュを示す診断プログラムを掲載しました。 「GetKeyHash」を検索します。最後に更新されたときにソートされたデバイス上のすべてのアプリケーションが表示され、それらのいずれかを展開してキーのハッシュ(複数可)、パッケージ名、有効なアクティビティ名を表示することができます。正しいGetKeyHashアプリケーションは、特別な権限を要求したり使用したりすることはありません。

シミュレータで実行するには、http://rightparen.com/android/GetKeyHash.apkでも利用できます。

IDEでデバッグバージョンのアプリケーションをビルドすると、キーハッシュはPlayストアに出荷されるリテールバージョンとは異なることに注意してください。 Facebookデベロッパーコンソールで、アプリの複数のキーハッシュを追加して、小売りキーと同様にデバッグキーを許可することができます。

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

+0

apkをインストールしようとすると、次のエラーが表示されます。W/PackageParser:/data/local/tmp/GetKeyHash.apkのAndroidManifest.xmlを読み取ることができません。 java.io.FileNotFoundException:AndroidManifest.xml –

+1

@KamenDobrevありがとう私は知っている。他の答えはおそらくあなたが望むことをするでしょう。 Fwiw、デベロッパー契約が失効してGoogle Playからアプリが削除されたと私に伝えていた。私はちょうどそれを更新したので、運が良ければ明日にそれをインストールできるはずです。ご迷惑おかけして申し訳ありません。 – rightparen

-1

Eclipseを使用している場合は、Androidのデバッグキーを使用してこのキーハッシュを生成する必要があります。あなたのアプリケーションを公開する準備ができたら、あなたの署名されたアプリケーションが動作する前に、あなたの署名キーのキーハッシュを生成し、この値をFacebookで更新する必要があります。

は下記を見ては、ここで

Android Facebook SDK: How to generate a non-debug hash key?

Do I need to add new key hash to Facebook app setting every time I change computer?

2

を結ぶ持っているFacebookのハッシュキーを作成するためのリンクです:hereから取ら

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

コード。

+1

私たちはそれをハードコードするのではなくgetPackageName()を使うべきですか? – Nanoc

+0

はい、@Nanocする必要があります –

0

現在のエイリアスをそのファイル内にリストすることができます。そして、正しい名前を使ってハッシュを得ることができます... 。ただ、Enterキーを押して、空白にパスワードを残す...

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つのキーをtheresの。..あなたが走ったときに具体的なことを書きませんでした:

{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= 
1

ちょうど私が個人的にアプリケーションbuild.gradleファイル内の私のハッシュを生成したいの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(); 
    } 

} 
0

それを実行します。

このbuild.gradle機能は、Windows(あなたのOpenSSLバイナリの場所に変更C:\\OpenSSL-Win64\\bin\\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 
関連する問題