android - Facebook/Android - 如何检查用户是否已经注册,现在只需登录

标签 android facebook

我在使用 Android 实现 Facebook 登录/注册时遇到问题。文档不充分,他们的用例很奇怪(他们谈论的只是那里的 fragment ,这让注意力远离了主要主题)

我创建的是工作登录(注册),但如果我没有检查用户是否已经登录,那么应用程序会尝试将它们重新插入数据库,从而导致错误。

我也不知道 uiHelper 是做什么用的,所以我已经从我的代码中完全删除了它。

我的问题是如何检查用户是否已经通过 Facebook 注册,现在只需登录即可。

编辑:我想说的是,用户在这两种情况下都没有登录,但在其中一种情况下,他们已经通过 fb 注册了,我只想让他们登录。在另一种情况下,他们还没有通过 fb 和他们的第一种方法注册,所以我想在数据库中注册它们并登录(我已经完成了后者)

@Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.authButton) {
            OpenRequest openrequest = new OpenRequest(this).setPermissions(Arrays.asList("basic_info", "email", "user_likes", "user_status"));
            Session session = new Session(Login.this);
            session.openForRead(openrequest);
}

private Session.StatusCallback callback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }
};

private void onSessionStateChange(Session session, SessionState state, Exception exception) {

    if (state.isOpened()) {
         makeMeRequest(session);
    } else if (state.isClosed()) {

        System.out.println("closed"); //debugging
        Session sessionw = new Session(this);
        Session.setActiveSession(sessionw);
        sessionw.openForRead(new Session.OpenRequest(this).setCallback(callback).setPermissions(Arrays.asList("basic_info", "email", "user_likes", "user_status")));
    }
}


private void makeMeRequest(final Session session) {
    // Make an API call to get user data and define a 
    // new callback to handle the response.
    Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
        @Override
        public void onCompleted(GraphUser user, Response response) {
            // If the response is successful
            if (session == Session.getActiveSession()) {
                if (user != null) {
                    userFBId = user.getId();
                    userName = user.getName();
                    userEmail = (String) user.asMap().get("email");
                    userSex = (String) user.getProperty("gender");
                    userFacebookAvatar = "http://graph.facebook.com/"+user.getId()+"/picture?type=square";

                    new RegisterFacebookUser(Login.this, Login.this, userName, userEmail, userSex, userFacebookAvatar).execute(); //this is an async task that inserts the user in the db
                }
            }
            if (response.getError() != null) {
                System.out.println(response.getError().toString());
            }
        }
    });
    request.executeAsync();
} 


@Override 
public void OnFacebookUserRegisteredSuccess(int userId) {
    editor = sharedPrefs.edit();
    editor.putBoolean("userLoggedInState", true);
    editor.putBoolean("userHasRegisteredViaFacebook", true);
    editor.putInt("currentLoggedInUserId", userId);
    editor.putString("userFBId", userFBId);
    editor.commit();
    Intent signupSuccessHome = new Intent(this, Home.class);
    startActivity(signupSuccessHome);
    finish();

}

@Override
public void OnFacebookUserRegisteredFailure() {

    toastMaker.toast(net.asdqwe.activities.Login.this, Configurationz.ErrorMessages.FACEBOOK_LOGIN_FAILURE, Toast.LENGTH_LONG);
}

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

        Session session = Session.getActiveSession();
        int sanitizedRequestCode = requestCode % 0x10000;
        session.onActivityResult(this, sanitizedRequestCode, resultCode, data);

    }
}

最佳答案

您不应该依赖自己的偏好来确定用户之前是否注册过,因此只能“让他们登录”。 Facebook 允许用户注册应用程序,但用户将来可能会从他们的控制台取消注册或删除您的应用程序。之后 Facebook 将重置它发送到您的应用程序的许可 token ,并且任何 Activity (例如代表用户发帖)都将被拒绝。

所以要回答您的问题,只需执行您正在执行的注册和登录流程即可。如果用户已经注册,Facebook 将弹出一些权限 UI 流程,用户无需执行任何操作(因为所有权限都已授予)。您将在您的应用程序中取回 session token 。在您的应用中更新此 session token ,并在未来代表用户将其用于所有请求。

注意:我认为您使用的是旧版本的 Facebook SDK。您应该升级到最新版本 (3.6)。他们已经解决了很多注册/登录问题,您的用户会非常感谢您。

关于android - Facebook/Android - 如何检查用户是否已经注册,现在只需登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658446/

相关文章:

iphone - iOS Facebook SDK - 检查权限

python - 尝试将 facebook 好友加载到 Google App Engine facebook 示例时如何解析 JSON 数组?

php - 如何在 android/ios 应用程序中配置 facebook 注册功能

java - 从 ArrayList<String> 中删除索引

android - 使用 camera2 api 在前置摄像头中全屏录制视频

java - Android 软键盘在按钮单击时不显示

java - Retrofit 2 - 获取错误对象 JSON(同一请求的几个 POJO)

facebook - 具有基本 http 身份验证和 Facebook 社交插件、Twitter 按钮的网站

android - Scrollview 多个 LinearLayouts

javascript - 是否可以在页面加载事件之前通过 javascript 编辑元标记内容?