2014-10-08 59 views
0

我有这个问题,我创建FB登录与FB SDK的Android在Eclipse中的Java。当我在Android模拟器中调试并运行这个应用程序时,所有都是正确的,我可以登录我可以注销。但是,当我出口的应用程序开发版本(.apk文件),并在我的手机安装或genymotion模拟器我歌厅这样的错误:的Android FB登录应用程序 - 无效键哈希

"Invlaid key hash. The key hash xxxxxxxxxxxxxxxxxxx does not match any stored key hashes. Configure your app key hashes at http://developers.facebook.com/apps/72012084472886" 

哈希关键是创造correoct我用这个:

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

} 

你有一些想法,有什么不对?

谢谢。

+0

关注此https://developers.facebook.com/docs/android/getting-started/ – 2014-10-08 12:57:46

+0

谢谢,但我按照这个说明,当我创建我的应用程序... – 2014-10-08 13:04:20

+0

释放Apk使用不同的密钥签署.. – Selvin 2014-10-08 13:25:40

回答

1

当您运行通过ADB Eclipse的应用程序通常使用名为debug.keystore密钥库,这密钥库通常是你没有对生产应用程序使用的一个。当您导出应用程序并创建密钥库时,由于您更改了密钥库,keyhash将更改值。

您可以实现此代码到你的应用程序,所以你可以呼应keyhash你stackrace:

public static void printHashKey(Context pContext) { 
     try { 
      PackageInfo info = getPackageInfo(pContext, PackageManager.GET_SIGNATURES); 
      for (Signature signature : info.signatures) { 
       MessageDigest md = MessageDigest.getInstance("SHA"); 
       md.update(signature.toByteArray()); 
       String hashKey = new String(Base64.encode(md.digest(), 0)); 
       Log.i(TAG, "printHashKey() Hash Key: " + hashKey); 
      } 
     } catch (NoSuchAlgorithmException e) { 
      Log.e(TAG, "printHashKey()", e); 
     } catch (Exception e) { 
      Log.e(TAG, "printHashKey()", e); 
     } 
    } 

的片段是只适合于发展,不生产!

+0

谢谢,这项工作。 – 2014-10-20 22:27:25