关闭facebook登录对话框android

Posted

技术标签:

【中文标题】关闭facebook登录对话框android【英文标题】:Dismiss facebook login dialog android 【发布时间】:2016-04-27 10:04:54 【问题描述】:

我已将 facebook sdk v-4 与我的 android 应用程序集成。在这里,我在 2 项活动中使用了 facebook 登录。

1) 在一项活动中,fb 登录是通过 LoginButton 完成的。成功登录后,facebook sdk 会自动关闭 fb 登录对话框。

代码:

fbLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 
        ProfileTracker profileTracker;

        @Override
        public void onSuccess(LoginResult loginResult) 
            Logger.d("FBLOGIN", "login successful. User ID: "
                    + loginResult.getAccessToken().getUserId()
                    + "\n" +
                    "Auth Token: "
                    + loginResult.getAccessToken().getToken());

            com.facebook.Profile fbProfile = com.facebook.Profile.getCurrentProfile();

            if (fbProfile == null) 
                profileTracker = new ProfileTracker() 
                    @Override
                    protected void onCurrentProfileChanged(com.facebook.Profile oldProfile, com.facebook.Profile currentProfile) 
                        profileTracker.stopTracking();
                        doTaskWithFbProfile(currentProfile);
                    
                ;
                profileTracker.startTracking();
             else 
                doTaskWithFbProfile(fbProfile);
            

        

        @Override
        public void onCancel() 
            Logger.d(TAG, "fb Login attempt canceled.");
        

        @Override
        public void onError(FacebookException e) 
            Logger.e(TAG, "fb Login attempt failed." + e);
            Toast.makeText(LoginActivity.this,R.string.str_please_check_your_internet_connection,Toast.LENGTH_LONG).show();
        
    );

 private void doTaskWithFbProfile(com.facebook.Profile fbProfile) 
    Logger.d("FBLOGIN", "id - " + fbProfile.getId());
    Logger.d("FBLOGIN", "name - " + fbProfile.getName());
    Logger.d("FBLOGIN", "pic - " + fbProfile.getProfilePictureUri(150, 150));

    com.android.circlecare.models.common.Profile profile = new com.android.circlecare.models.common.Profile();
    profile.setFBID(fbProfile.getId());
    profile.setName(fbProfile.getName());
    profile.setProfilePhoto(fbProfile.getProfilePictureUri(150, 150).toString());

    Intent intent = new Intent(this, LoginWithFacebookActivity.class);
    intent.putExtra(LoginWithFacebookActivity.EXTRA_PROFILE, profile);

    startActivity(intent);
    finish();



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

2)另一方面,我使用 LoginManager 登录到 fb。成功登录后登录对话框不会被关闭,而是在登录后再次停留在前面。

代码:

 @Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

 FacebookSdk.sdkInitialize(this.getApplicationContext());

 mFacebookCallback = new FacebookCallback<LoginResult>() 
        ProfileTracker profileTracker;

        @Override
        public void onSuccess(LoginResult loginResult) 
            Profile fbProfile = Profile.getCurrentProfile();

            if (fbProfile == null) 
                profileTracker = new ProfileTracker() 
                    @Override
                    protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) 
                        profileTracker.stopTracking();
                        getAllFriends();
                    
                ;
                profileTracker.startTracking();
             else 
                getAllFriends();
            
        

        @Override
        public void onCancel() 
            Logger.d(TAG, "fb Login attempt canceled.");
        

        @Override
        public void onError(FacebookException error) 
            Logger.d(TAG, "Error : " + error.getMessage());
            finish();
        
    ;

    callbackManager = CallbackManager.Factory.create();

    if (hasAccess)
        getAllFriends();
    else
        loginWorks();



  private void loginWorks() 
    loginManager = LoginManager.getInstance();
    loginManager.registerCallback(callbackManager, mFacebookCallback);

    ArrayList<String> publishPermission = new ArrayList<>();
    publishPermission.add("publish_pages");
    publishPermission.add("publish_actions");
    loginManager.logInWithPublishPermissions(this, publishPermission);

    ArrayList<String> readPermission = new ArrayList<>();
    readPermission.add("user_friends");
    readPermission.add("public_profile");
    readPermission.add("user_about_me");
    loginManager.logInWithReadPermissions(this, readPermission);


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

我在这两种情况下都使用了几乎相同的代码,但我想知道为什么在使用 LoginManager 时登录对话框没有被关闭。

任何人都可以指出问题或是否有任何 api 可以关闭 fb 登录对话框(网络视图)。

【问题讨论】:

我认为我们需要查看您的代码。 【参考方案1】:

在您的 loginWorks() 方法中,您实际上是在调用 login 两次,这实际上可能显示了 2 个不同的登录屏幕,以及为什么在您完成其中一个后看起来对话框没有消失。尝试删除 loginWithPublishPermissions 调用,如果您确实需要,将其放入读取权限调用的回调中。

【讨论】:

感谢您解决问题。我想知道 facebook 使用不同权限进行不同登录的方法。真是一团糟。

以上是关于关闭facebook登录对话框android的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中单击 Facebook 登录按钮后未显示 Facebook 身份验证对话框

仅使用弹出对话框的本机(iOS 或 Android)Facebook 登录?

由于嵌入式浏览器,Android Facebook 分享对话框阻止登录

Facebook 登录对话框在加载后很快消失,没有登录屏幕或 Android 应用程序中的任何响应

点击 Facebook 登录按钮后 Facebook 登录对话框消失

SwiftUI Facebook 登录按钮对话框仍然打开?