Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果(session.isOpen()),android上的facebook登录总是返回false_Android_Facebook_Session_Login - Fatal编程技术网

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

如果(session.isOpen()),android上的facebook登录总是返回false,android,facebook,session,login,Android,Facebook,Session,Login,我正试图在我的android应用程序中实现一个简单的活动,要求用户通过facebook登录,以便检索用户的“喜好”。显然,首先我要测试一个通过facebook的简单登录。我使用的代码与他们在“FacebookSDK Android版入门”中的代码完全相同——步骤6(),但由于某些原因,它不起作用。当我调试代码时,我意识到以下情况: if(session.isOpen()) 总是返回false,即使我已经登录了facebook。我已经尽了一切努力来修复它,但似乎没有任何效果 有人有这个问题或者

我正试图在我的android应用程序中实现一个简单的活动,要求用户通过facebook登录,以便检索用户的“喜好”。显然,首先我要测试一个通过facebook的简单登录。我使用的代码与他们在“FacebookSDK Android版入门”中的代码完全相同——步骤6(),但由于某些原因,它不起作用。当我调试代码时,我意识到以下情况:

if(session.isOpen()) 
总是返回false,即使我已经登录了facebook。我已经尽了一切努力来修复它,但似乎没有任何效果

有人有这个问题或者知道如何解决吗

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

提前谢谢

我确实尝试过这个解决方案,但是使用Java6或Java7仍然给出了相同的哈希键

编辑2:我也尝试过同样的方法,但方法略有不同。我仍然有同样的问题。session.isOpen()方法始终返回false

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

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输出:

您缺少onActivityResult覆盖(入门指南中代码段的最后一位)


onActivityResult是信息如何从FB应用程序(或webview)返回到您的应用程序中,并且必须被覆盖才能回拨到会话中。

我遇到了类似的问题,它是facebook中的哈希键错误,通过遵循以下代码,您可以获得已发送到facebook的哈希键。只需复制此哈希键并替换它。它将开始工作

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

    }

你必须在Facebook developer上添加密钥散列,它对我有用

我知道你只是在遵循教程,但请按原样发布你的代码,以及logcat中的任何错误。谢谢你的回复,我已经用代码和logcat输出更新了我的问题。我会试试看,不过我以前确实试过。我只是试了一下onactivity,结果又一次不走运了。为了以防万一,我也更新了logcat输出。您可以尝试在回调的call()方法中记录“状态”和任何“异常”吗?另外,你能确保你的onActivityResult方法被调用吗?啊,我刚刚意识到我正在记录一个错误。首先,我再次调试并调用了onActivityResult。但是,我在这里遇到了以下错误(authButton.setOneErrorListener):“远程应用程序id与存储的id不匹配”。我猜应用程序id不正确?我不明白,因为我100%确定我使用的是facebook提供的应用程序id。这是因为你的哈希键设置不正确。关于如何找出正确的hashkey(在命令行上生成的hashkey并不总是与在设备上生成的hashkey匹配),已经有很多帖子了。尽管我已经解决了这个问题,我还是感谢您的回答。这正是我必须使用的@DanielGrima你能告诉我你是如何解决这个问题的吗?@pOSEID0n只要看看我在上面发布的链接中的答案():)一旦你运行代码,它会在logcat中输出哈希键,然后确保你在facebook应用程序设置中复制并粘贴该哈希键:)希望这个帮助我按照你的建议设置哈希键,但是openActiveSession()的回调只在“打开”状态下被调用,所以会话仍然没有打开,我无法使用它,有什么建议吗。。。谢谢我找到了我问题的答案,我必须在我的活动中@Override onActivityResult(),如下所示:
private Session.StatusCallback statusCallback = new SessionStatusCallback();

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(final Session session, SessionState state,
            Exception exception) {

        try {
            new_session = session;
            if (state.equals(SessionState.OPENING)) {

            }

            if (state.equals(SessionState.OPENED)) {


            }

            if (state.equals(SessionState.CLOSED_LOGIN_FAILED)) {
                try {
                    PackageInfo info = context.getPackageManager()
                            .getPackageInfo("your package name",
                                    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));
                    }
                    Session.openActiveSession((Activity) context, true,
                            statusCallback);
                } catch (NameNotFoundException e) {

                } catch (NoSuchAlgorithmException e) {

                }
            }

            if (state.equals(SessionState.OPENED_TOKEN_UPDATED)) {



            }

    }
    catch(Exception e){}
  }
}

//if session is closed
Session.openActiveSession((Activity) context, true,
                    statusCallback);