Fb登录错误状态关闭登录失败

时间:2014-07-30 13:21:29

标签: android facebook

我在Facebook登录android时面临问题,我使用facebook提供的方法创建密钥哈希并将其添加到facebook开发者控制台。 我更新了我的清单 -

 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 <meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/fb_app_id"/>
 <activity android:name="com.facebook.LoginActivity" 
               android:screenOrientation="portrait">

以下是我的活动代码 -

private Session.StatusCallback callback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }
};
 @Override
    public void onResume() {
    super.onResume();
    Session session = Session.getActiveSession();
    if(session != null && (session.isOpened() || session.isClosed())) {
        onSessionStateChange(session, session.getState(), null);
    }
    else{
        if(isFbClick){
            Session s = new Session(mContext);
            Session.setActiveSession(s);
            s.openForRead(new Session.OpenRequest(this).setCallback(callback).setPermissions(Arrays.asList("basic_info","email")));
        }
    }
    uiHelper.onResume();
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

   @SuppressWarnings("deprecation")
private void onSessionStateChange(final Session session, SessionState state, Exception exception) {
    flag = true;
    if(session.isClosed()){
        state  = SessionState.CLOSED;
    }
    if (session.isOpened() && state.isOpened()) {
            accessToken = session.getAccessToken();
            accessExpir = session.getExpirationDate();
            Log.i(TAG, "Logged in...");
            if (state.isOpened()) {
                if(mDialog==null){
                    mDialog = new ProgressDialog(mContext);
                }
                if(!mDialog.isShowing()){
                    mDialog.setMessage("please wait...");
                    mDialog.setCancelable(false);
                    mDialog.show();
                }
                 Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                     public void onCompleted(GraphUser user, Response response) {
                          session.close();
                          session.removeCallback(callback);
                          getUserFacebookData(user);
                     }
                 });
             }
    }else if(state.equals(SessionState.CLOSED_LOGIN_FAILED)){

    }
    else if (state.isClosed()) {
        Log.i(TAG, "Logged out...");
    }
}


 @Override
protected void onStart() {
    super.onStart();
     Session session = Session.getActiveSession();
     if(session.isOpened()){
         session.close();
         session = null;
     }
}

我的oncreate中的代码是 -

     uiHelper = new UiLifecycleHelper(this, callback);
     uiHelper.onCreate(savedInstanceState);
     authButton = (LoginButton) findViewById(R.id.authButton);
        authButton.setReadPermissions(Arrays.asList("basic_info","email"));
        authButton.setBackgroundResource(R.drawable.fb_login);
        authButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0,0);
        authButton.setText("");
        authButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                isFbClick = true;
                Session s = new Session(mContext);
                Session.setActiveSession(s);
                s.openForRead(new Session.OpenRequest((Activity) mContext).setCallback(callback).setPermissions(Arrays.asList("public_profile","email")));
            }
        });

在我点击Facebook按钮结束时,用户登录后返回错误 - 会话状态:CLOSED_LOGIN_FAILED。 我在Mobile(安装了facebook应用程序,未安装)和模拟器上都尝试过。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您是否已在developers.facebook.com上为您的应用添加了keyHash?

检查出来。有一种方法可以获得你的keyHash。 https://stackoverflow.com/a/15287332/3025055

答案 1 :(得分:0)

这可能不是问题,但这是一个常见问题(当我实施Facebook时,它适合我)。有可能你有错误的哈希键。把它放在你的onCreate方法中:

try {
PackageInfo info = getPackageManager().getPackageInfo(
        "com.example.com.tvishi.fb", 
        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尝试使用的哈希键。如果您将该哈希键复制到Facebook开发人员的控制台中,它可能会解决您的问题。