android - 如何检查用户已经登录 android (Facebook SDK 4.0)

标签 android facebook

这是我的代码:

public class LocationDetailActivity extends ActionBarActivity {

private CallbackManager mCallBackManager;
private FacebookCallback<LoginResult> mCallBack;
private ImageView mBtnBack;
AccessToken token;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.location_detail_layout);
    FacebookSdk.sdkInitialize(getApplicationContext());
    share = (ImageButton) findViewById(R.id.imageShare);
    token  = AccessToken.getCurrentAccessToken();

 share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(token == null) {
                    final Dialog dialog = new Dialog(LocationDetailActivity.this);
                    dialog.setContentView(R.layout.share_custom_dialog);
                    dialog.setTitle("Login as:");
                    dialog.show();
                    mCallBackManager = CallbackManager.Factory.create();
                    mCallBack = new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(LoginResult loginResult) {

                            Profile profile = Profile.getCurrentProfile();
                            if(profile!=null){
                                dialog.cancel();
                                ShareDialog shareDialog = new ShareDialog(LocationDetailActivity.this);
                                if(shareDialog.canShow(ShareLinkContent.class)){
                                ShareLinkContent content = new ShareLinkContent.Builder()
                                        .setContentUrl(Uri.parse("https://developers.facebook.com"))
                                        .build();
                                    shareDialog.show(content);
                                }
                            }
                        }

                        @Override
                        public void onCancel() {

                        }

                        @Override
                        public void onError(FacebookException e) {

                        }
                    };
                    LoginButton loginButton = (LoginButton)dialog.findViewById(R.id.login_button);
                    loginButton.setReadPermissions("user_friends");
                    loginButton.registerCallback(mCallBackManager, mCallBack);
                }
                else if(token != null){
                    ShareDialog shareDialog = new ShareDialog(LocationDetailActivity.this);
                    if(shareDialog.canShow(ShareLinkContent.class)){
                        ShareLinkContent content = new ShareLinkContent.Builder()
                                .setContentUrl(Uri.parse("https://developers.facebook.com"))
                                .build();
                        shareDialog.show(content);
                    }
                }
            }
        });

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

我想检查用户是否已经从 Facebook 的应用程序登录。如果他们不这样做,我的应用程序将显示带有登录按钮的自定义对话框。否则,我的应用程序将显示共享对话框,但当我点击我的按钮时,即使我登录了 Facebook,也会始终显示自定义对话框

更多信息: AccessToken token = AccessToken.getCurrentAccessToken();

最佳答案

检查登录状态

boolean isLoggedIn = accessToken != null && !accessToken.isExpired();

然后您可以稍后执行实际登录,例如在自定义按钮的 OnClickListener 中:

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

关于android - 如何检查用户已经登录 android (Facebook SDK 4.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30046939/

相关文章:

android - 无法找到可选库 : org. apache.http.legacy

android - Flutter是否有可用的Play核心库?

使用库的 Android Facebook 登录

ios - FBSDKLikeControl 标题文本不会根据设备区域设置改变 FBSDK ios

php - Facebook 访问 token 不起作用?或者我需要别的东西?

android - 循环浏览android中的 View

java - 如何通过单击按钮对数组按字母顺序在两个方向上进行排序

java - 带有 OkHttp3 和 Retrofit2 的 HTTP/2

ios - 错误域=NSCocoaErrorDomain 代码=3840

ios - 无法更新 FBSDKCoreKit POD iOS