2015-08-03 80 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刪除此片段。

相關問題