2015-08-03 114 views
0

我正在使用Facebook LoginManager类将Facebook登录集成到我的应用程序中。所以当我第一次安装我的应用程序并尝试登录一切正常,我可以很容易地使用loginResult.getAccessToken().getToken()获取访问令牌。集成Facebook登录时无效的密钥哈希值

但是,一旦我卸载&重新安装我的应用程序,并尝试重新登录,它抛出我的Facebook Exception“无效的密钥散列。关键哈希NDMi5aisFkTeU6BlER3L8JZ + WHW =不匹配任何存储的密钥哈希值。配置您的应用程序键哈希在http://developers.facebook.com/apps/1646433015643090

那么,为什么这,卸载应用程序时有什么要做。

代码我用

FacebookSdk.sdkInitialize(getApplicationContext()); 
mCallbackManager = CallbackManager.Factory.create(); 

     LoginManager.getInstance().logInWithReadPermissions((Activity)mContext, Arrays.asList("email", "user_photos", "public_profile")); 

     LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) 
      { 
       new FacebookLoginLoaderTask(mContext, loginResult.getAccessToken().getToken()).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 

      } 

      @Override 
      public void onCancel() 
      { 
       System.out.print("Login Cancel"); 
      } 

      @Override 
      public void onError(FacebookException exception) 
      { 

      } 
     }); 
+0

是你的应用程序处于开发模式还是公开? –

+0

Devlopment模式..我可以如何公开它? – AndroidDev

+0

我正在上传这个答案。 :-) –

回答

1

下面写代码onCreate方法:

try { 
      PackageInfo info = getPackageManager().getPackageInfo(
        "your package name", PackageManager.GET_SIGNATURES); 
      for (android.content.pm.Signature signature : info.signatures) { 
       MessageDigest md = MessageDigest.getInstance("SHA"); 
       md.update(signature.toByteArray()); 
       String sign = Base64 
         .encodeToString(md.digest(), Base64.DEFAULT); 

       Toast.makeText(getApplicationContext(), sign, Toast.LENGTH_LONG) 
         .show(); 
      } 

     } catch (NameNotFoundException e) { 

     } catch (NoSuchAlgorithmException e) { 

     } 

调试您的应用程序。复制sign的代码。

After that go to your facebook app -> go to settings -> paste this key hashes over there after that make tab to yes for `Single Sign On` and saved it. 

现在去status & Review -> make make it public

它完成了。 !

+0

还有一件事,现在我已经在Facebook开发人员控制台中设置了我的发布密钥存储值。这很好,或者我需要使用debug.keystore值。 – AndroidDev

+0

首次设置应用程序时,请使用degub.keystore值。之后,进入设置并粘贴这个新的keyhashes值。 有两个键'1)开发密钥哈希 - 设置您的degub.keystore值。 2)释放密钥散列 - 设置这个值,你从上面的代码中获得了' –

+0

是的,它的工作.. :)谢谢,再见我想知道他们为什么不用我们的发布密钥库值做同样的事情,相反,发送他们的keyhash值,我们需要在控制台中进行替换。 – AndroidDev

0

在你活动的onCreate,使用此代码:

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

    } 

你会看到一些与此类似:12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=

复制一切都在Facebook的开发者控制台的D/KeyHash:(936):后,你是好去。

之后,您可以从您的onCreate删除此片段。