0

Facebookアプリケーションを開発しましたが、デバイスにインストールすると、デバイスにFacebookアプリケーションがインストールされていない場合は正常に動作し、Facebookアプリケーションがインストールされている場合はセッションを開くことができません。以下のような私のコード、

Session.openActiveSession(this, true,
            new Session.StatusCallback() {
                // callback when session changes state
                @Override
                public void call(Session session, SessionState   state,
                        Exception exception) {
                    if (session.isOpened()) {

                        // make request to the /me API
                        Request.executeMeRequestAsync(session,
                                new Request.GraphUserCallback() {
                                    @Override
                                    public void onCompleted(GraphUser user,
                                            Response res) {
                                        if (user != null) {
                                            User.getInstance().setProfile(user);

                                        }
                                    }
                                });
                    }
                }
            });

      @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      Session.getActiveSession().onActivityResult(this, requestCode, resultCode,  data);
      if(Session.getActiveSession().isOpened()) {
          Log.i("here opened", "thnx");

      }
}
4

1 に答える 1

2

皆さん、上記の問題に直面している方のために、この情報を共有したいと思います。

Facebook アプリケーションを開発しているときに、keytool でハッシュ キーを生成する必要がある場合があります。このコマンドで生成できます。 bin\bin\openssl" sha1 -binary |"C:\bin\bin\openssl" base64 パスワードとして android を入力 ".

上記の方法の問題は、JDK のバージョンに依存し、openssl アプリケーションを使用しているため、Facebook アプリケーションにログインできないため、間違ったハッシュ キーが生成されることがあります。

問題を解決するには、アクティビティのコードの下に記述し、生成されたハッシュ キーを代わりに使用すると、すべてが正常に機能します。

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.kartag.gui", 
                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) {

    }
于 2013-04-26T13:12:58.673 に答える