Facebook登录Android无法打开会话

时间:2014-01-07 10:19:30

标签: android facebook

我是Android的Facebook开发新手。我从this tutorial开始 但我的应用程序无法连接到Facebook。它总是在 if(session.isOpened())

中返回false

我已经搜索并阅读了很多关于这个问题的内容,我已经意识到在大多数情况下问题是密钥哈希。我用这段代码检查了我的哈希

try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "my package", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("FACEBOOK", "Hash: " + Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

并且还通过命令提示符:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore > C:\openssl\bin\debug.txt
C:\openssl\bin\openssl sha1 -binary C:\openssl\bin\debug.txt > C:\openssl\bin\debug_sha.txt
C:\openssl\bin\openssl base64 -in C:\openssl\bin\debug_sha.txt > C:\openssl\bin\debug_base64.txt

我已经通过两种方式获得了相同的哈希值,并在我的facebook应用程序的“Key Hashes”字段中输入了它。其他字段填充了我的包和类。沙箱模式处于活动状态。

这是我的确切代码:

facebookButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            //FACEBOOK LOGIN HERE
            // start Facebook Login
            Session.openActiveSession(StartMenu.this, true, new Session.StatusCallback() {
               // callback when session changes state
               @Override
               public void call(Session session, SessionState state, Exception exception) {

                   Log.d("FACEBOOK","Session opened?: " + session.isOpened());
                   if (session.isOpened()) {

                       // make request to the /me API
                       Request.newMeRequest(session, new Request.GraphUserCallback() {

                         // callback after Graph API response with user object
                         @Override
                         public void onCompleted(GraphUser user, Response response) {
                             if (user != null) {
                                  //USER LOGGED
                                 Log.d("FACEBOOK","Logged in!");
                                 facebookButton.setImageResource(R.drawable.facebook_thumbs_up);
                             }
                         }
                       }).executeAsync();

                   }

               }
            });

        }
    });

请注意,我正在使用 newMeRequest + executeAsync()方法而不是已弃用的 executeMeRequestAsync 但我已经测试了不推荐使用的方法同样的结果。

另外,我编码:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

此外,我在strings.xml上有我的app_id标签,并在清单文件中为facebook添加了元数据和活动标签。

我正在使用sdk 3.6.0。

我已经测试了三个设备,其中两个安装了facebook应用,一个没有应用。在我的应用无法连接的所有设备中。

我做错了什么?

提前致谢,请原谅我的英语。

更新:解决了!!我对app_id字符串做了一个错误的引用(对我很羞耻)。但是我注意到如果你安装了FB App,它将不会显示任何有关它的信息,并且logcat消息可能有点令人困惑,所以我将在没有fb app的设备中测试所有的facebook内容。谢谢你们!

0 个答案:

没有答案