安卓Facebook登录:如何在没有XML中的LoginButton的情况下使用LoginManager检查登录

3

我已经在我的安卓应用中使用LoginButton进行了Facebook登录检查,但我想使用LoginManager进行检查。我该如何修改代码使其能够实现这个功能?

   LoginButton loginButton = (LoginButton) findViewById(R.id.fb_login_button);
    loginButton.setReadPermissions("user_friends");

    shareDialog = new ShareDialog(this);

    //Login Callback registration
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show();

            //Login success - process to Post
            if (ShareDialog.canShow(ShareLinkContent.class)) {
                String description = "description";
                ShareLinkContent linkContent = new ShareLinkContent.Builder()
                        .setContentTitle("title")
                        .setContentDescription(description)
                        .setContentUrl(Uri.parse("http://google.com"))
                        .setImageUrl(Uri.parse("http://google.com"))
                        .build();

                shareDialog.show(linkContent, ShareDialog.Mode.FEED);
            }

        }

        @Override
        public void onCancel() {
            Toast.makeText(getApplicationContext(), "in LoginResult on cancel", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(FacebookException exception) {
            Toast.makeText(getApplicationContext(), "in LoginResult on error", Toast.LENGTH_LONG).show();
        }
    });

如果用户在打开共享对话框之前未登录,则我希望您能打开Facebook登录对话框。登录对话框应与共享对话框相同(在弹出窗口中)。如何实现?谢谢!

你需要检查什么?用户是否已经登录了吗??? - Heshan Sandeepa
是的,检查用户是否已登录。如果没有,显示登录对话框。如果已经登录,则像我现在展示的那样直接显示共享对话框。 - skool99
我之前是在点击“登录”按钮时检查登录状态。但现在我想移除“登录”按钮并使用“LoginManager”来实现。我该怎么做? - skool99
3个回答

3
您可以通过调用LoginManager方法logInWithReadPermissions来检查用户是否已登录,手动启动登录过程,而无需按钮。您可以在onCreate方法中执行此操作。如果用户已登录,则会立即调用onSuccess回调方法,在其中可以调用您的shareDialog。如果用户未登录,则会显示登录屏幕。如果登录成功(即用户已登录),将调用onSuccess方法。
实际上,您可以从代码中删除所有有关login button的提及,并在末尾添加一行代码。
LoginManager.getInstance().logInWithReadPermissions(this, "user_friends"); //Log in to FB

您还可以使用WritePermissions。您可以在此处阅读所需的权限

以下是您的代码,但作为登录方法包装,没有任何登录按钮实例。您可以在需要检查用户是否已登录时在任何地方调用它。

public void checkLogin() {
    //Login Callback registration
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show();

            //Login success - process to Post
            if (ShareDialog.canShow(ShareLinkContent.class)) {
                String description = "description";
                ShareLinkContent linkContent = new ShareLinkContent.Builder()
                        .setContentTitle("title")
                        .setContentDescription(description)
                        .setContentUrl(Uri.parse("http://google.com"))
                        .setImageUrl(Uri.parse("http://google.com"))
                        .build();

                shareDialog.show(linkContent, ShareDialog.Mode.FEED);
            }

        }

        @Override
        public void onCancel() {
            Toast.makeText(getApplicationContext(), "in LoginResult on cancel", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(FacebookException exception) {
            Toast.makeText(getApplicationContext(), "in LoginResult on error", Toast.LENGTH_LONG).show();
        }
    });

    LoginManager.getInstance().logInWithReadPermissions(this, "user_friends"); //Log in to FB
}

1

您可以获取用户配置文件,尝试这个:

    Profile dd = Profile.getCurrentProfile().getCurrentProfile();
    if(dd != null)
    {
        //user has logged
    }
    else
    {
        //not logged
    }

您可以通过以下方式重新启动登录,而无需使用LoginButton:
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(<required permissions>));

你需要为上述请求实现回调函数。

好的,如果用户没有登录,我该如何启动Facebook登录?以前是在XML中单击LoginButton时启动的。现在我已经从XML中删除了LoginButton。 - skool99

0

您可以以类似的方式使用ProfileTracker来跟踪当前配置文件中的更改:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FacebookSdk.sdkInitialize(this.getApplicationContext());
    callbackManager = CallbackManager.Factory.create();

    profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(
                Profile oldProfile,
                Profile currentProfile) {
            // here if session exist
        }
    };
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

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

从这里获取源代码:https://developers.facebook.com/docs/facebook-login/android/v2.3#get_current


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接