簡體   English   中英

關閉facebook登錄對話框android

[英]Dismiss facebook login dialog android

我已將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 登錄對話框(Web 視圖)。

在您的 loginWorks() 方法中,您實際上是在調用 login 兩次,這可能實際上顯示了 2 個不同的登錄屏幕,以及為什么在您完成其中一個之后對話框似乎沒有關閉。 嘗試刪除 loginWithPublishPermissions 調用,並在您確實需要時將其放入讀取權限調用的回調中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM