java - Android - 打开 session 不适用于最新的 Facebook 应用程序版本,如果未安装 Facebook,则工作正常

标签 java android facebook facebook-graph-api

我开发了 facebook 应用程序,但是当它安装到设备上时,如果设备上没有安装 facebook 应用程序,并且当安装 facebook 应用程序时, session 无法打开,则它可以正常工作。我的代码如下,

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");

      }
}

最佳答案

大家好,我想与你们分享此信息,以帮助任何遇到上述问题的人。

有时,当您开发 facebook 应用程序时,您需要通过 keytool 生成哈希 key “您可以通过此命令生成它 keytool -exportcert -alias androiddebugkey -keystore C:\Users\YOURUSER.android\debug.keystore | ” C:\bin\bin\openssl"sha1 -binary |"C:\bin\bin\openssl"base64 输入 android 作为密码"。

上述方法中的问题有时会生成错误的哈希 key ,因为它取决于 JDK 版本和使用的 openssl 应用程序,因此您的 facebook 应用程序无法登录。

要解决这个问题,您可以在 Activity 中编写以下代码,并使用生成的哈希 key 代替上面的代码,一切都会正常工作。

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

    }

关于java - Android - 打开 session 不适用于最新的 Facebook 应用程序版本,如果未安装 Facebook,则工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16204547/

相关文章:

java - 停止正在进行的可运行 Android

java - android中的开关盒问题

Android:如果从通知栏恢复应用程序,则绘制的 Canvas 油漆消失了

java - 如何从改造中的 json java android 中的对象中删除所有 null 和空字符串值?

javascript - 如何在完成后自动关闭 Facebook Send Dialog (v2.9)?

java - 在另一个类中使用改造响应

java - 有没有办法重用知识库,而不是通过无状态知识 session 重新插入所有事实?

android - Android Studio 中的 React Native 应用程序 : Cause Argument type mismatch

ios - FacebookSDK 3.0 - Apple Mach-O 链接器错误

javascript - 如何使用内联样式调整 javascript 生成的 iframe 的大小?