Facebook webview在Android应用程序中调用了两次

时间:2015-03-05 15:32:30

标签: facebook authentication login webview

我在未安装 Facebook 应用程序的设备上测试我的应用。 因此,当我使用Facebook登录时,会打开 webview 。 奇怪的是,当我输入我的用户名和密码时,按下确定后,webview重新打开,我再次插入用户名和密码,我就可以登录了。 可能是什么?

authButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        authButton.setVisibility(View.GONE);
        logoutButton.setVisibility(View.VISIBLE);
        // start Facebook Login
        Session.openActiveSession(Login.this, true, new Session.StatusCallback() {
            // callback when session changes state

            SharedPreferences.Editor edit = pref.edit();
            @Override
            public void call(Session session, SessionState state,
                    Exception exception) {

                if (session.isOpened()) {

                    accesstoken = session.getAccessToken();

                    edit.putString("fbtoken", accesstoken);

                     if (session.getExpirationDate()!= null)
                            edit.putLong("com.facebook.sdk.AccessTokenExpires", session.getExpirationDate().getTime());

                    Log.d("FACEBOOK", "LOGGED IN");


                        }
                    });

                    List<String> permissions = session.getPermissions();
                    if (!isSubsetOf(PERMISSIONS, permissions)) {
                        Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
                                Login.this, PERMISSIONS);
                        session.requestNewReadPermissions(newPermissionsRequest);


                        return;
                    }

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

                        @Override
                        public void onCompleted(GraphUser user, Response response) {
                            Log.d("FACEBOOK", "onCompleted");

                            Log.d("",""+user);  
                            try {

                                name=user.getName();
                                email=user.getProperty("email").toString();
                                location=(user.getLocation().getProperty("name").toString());

                            } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

                            Log.d("ID", user.getId());


                        }
                    }).executeAsync();
                }



            }

        });

    }
});

2 个答案:

答案 0 :(得分:0)

我在iOS上遇到了同样的问题,所以这个问题可以联系起来。 我收到第一个回复后,通过删除代表解决了这个问题。

所以它可能适用于你的例子:

Session.openActiveSession(Login.this, true, new Session.StatusCallback() {
    // callback when session changes state
    if (logoutButton.getVisibility() == View.VISIBLE) {
         // Its visible so we end the callback
        return;
    }

    SharedPreferences.Editor edit = pref.edit();

答案 1 :(得分:0)

我的猜测是你将访问令牌保存到共享的pref中, 如果你不强迫它,它需要一些时间保存在磁盘上。 你应该添加

edit.putLong("com.facebook.sdk.AccessTokenExpires", ...);
edit.commit(); // <- this line

所以你确定下次通话时可以使用