android - if(session.isOpen()),android 上的 facebook 登录总是返回 false

标签 android facebook session authentication

我试图在我的 android 应用程序中实现一个简单的 Activity ,要求用户通过 facebook 登录,以便检索用户的“喜欢”。所以很明显,首先我正在测试通过 facebook 进行的简单登录。我使用的是他们在“开始使用适用于 Android 的 Facebook SDK”- 第 6 步 (https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/) 上的确切代码,但由于某种原因它无法正常工作。当我调试代码时,我意识到以下情况:

if(session.isOpen()) 

总是返回 false,即使我已经登录到 facebook。我已经尝试了所有方法来修复它,但似乎没有任何效果。

有人遇到过这个问题或知道如何解决吗?

编辑:我直接在我的手机上而不是在模拟器上尝试这个测试。我不知道这是否是个问题。

提前致谢!

我确实尝试过这个解决方案 session.isOpened() returns false even if successfully logged in to Facebook但是使用 Java 6 或 7 仍然给出相同的哈希键。

编辑 2: 我也尝试过同样的事情,但方法略有不同。 http://sonyarouje.com/2011/09/18/facebook-hash-key-for-android-apps/我仍然有同样的问题。 session.isOpen() 方法总是返回 false。

编辑 3: 这是我尝试过的最新代码。我认为 logcat 中没有任何错误。无论如何,我会在此处链接它以防万一我遗漏了什么。

package com.example.danandroidapp;
import java.util.Arrays;

import com.facebook.FacebookException;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.OnErrorListener;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    private String TAG = "MainActivity";
    private TextView lblEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lblEmail = (TextView) findViewById(R.id.lblEmail);

        LoginButton authButton = (LoginButton) findViewById(R.id.authButton);

        authButton.setOnErrorListener(new OnErrorListener() {
            @Override
            public void onError(FacebookException error) {
                Log.i(TAG, "Error " + error.getMessage());
            }
        });

        authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
        authButton.setSessionStatusCallback(new Session.StatusCallback() {

        @Override
        public void call(Session session, SessionState state, Exception exception) {
            if(session.isOpened()) {
                Log.i(TAG, "Access Token " + session.getAccessToken());
                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if(user != null) {
                            Log.i(TAG, "User ID " + user.getId());
                            Log.i(TAG, "Email " + user.asMap().get("email"));
                            lblEmail.setText(user.asMap().get("email").toString());
                        }
                    }
                });
            }
        }
    });
}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

我的 logcat 输出:https://www.dropbox.com/s/7qg9zbhlpikfovf/log.txt

最佳答案

我有类似的问题,它是在 facebook 中的 hashkey 是错误的,通过下面的代码你可以得到已经发送到 facebook 的 hash key。只需复制此散列键并替换它即可。它将开始工作。

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.root.package", 
                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) {

    }

关于android - if(session.isOpen()),android 上的 facebook 登录总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176832/

相关文章:

Android防止屏幕超时

c# - Facebook C# SDK : An active access token must be used to query information about the current user

java - 使用 Java 发布到用户的 Facebook 流

Facebook iFrame 应用程序 - 如何使用 PHP SDK 获取预加载 FQL 结果?

PHP - session 变量的替代方法是什么

android - Bootstrap 导航栏响应下拉不响应触摸

android - 无法使用equalTo()查询Firebase检索任何值

java - 使用 BottomBar 可以防止 fragment 打开?

php - 如何使用 Firefox 开发者工具清除或删除浏览器 session

session - gorilla / session : Session be managed (persist changes) between handlers?