提问者:小点点

FacebookSDKWebView不注销


我正在开发一个应用程序,它将安装在一台设备上,每个用户都将使用我的设备共享图像。

他们需要登录Facebook才能在他们的个人资料中共享图像。共享图像后,应用程序应从facebook注销,以便让下一个用户登录。

因此,我没有使用Facebook Android应用程序,而是选择了webview替代方案。用户登录后,它会打开一个带有登录名的WebView(在Chrome上),并询问用户名、密码,然后是权限。

用户发布图像,应用调用:

LoginManager.getInstance().logOut();

当下一个用户到来时,点击使用Facebook登录,它会打开一个WebView,上面写着我已经从Facebook帐户访问了这个应用程序,所以我可以点击继续-甚至没有注销按钮。

这是因为它使用了先例用户会话,该会话仍在WebView中登录。

我需要一种方法从WebView注销用户。我正在使用Facebook sdk 4.31.0

我尝试使用此答案中描述的方法清除Cookie,但不起作用:

public static void clearCookies(Context context)
{

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
        Log.d(TAG, "Using clearCookies code for API >=" + String.valueOf(Build.VERSION_CODES.LOLLIPOP_MR1));
        CookieManager.getInstance().removeAllCookies(null);
        CookieManager.getInstance().flush();
    } else
    {
        Log.d(TAG, "Using clearCookies code for API <" + String.valueOf(Build.VERSION_CODES.LOLLIPOP_MR1));
        CookieSyncManager cookieSyncMngr=CookieSyncManager.createInstance(context);
        cookieSyncMngr.startSync();
        CookieManager cookieManager=CookieManager.getInstance();
        cookieManager.removeAllCookie();
        cookieManager.removeSessionCookie();
        cookieSyncMngr.stopSync();
        cookieSyncMngr.sync();
    }
}

然后:

    WebView mWebView = new WebView(getApplicationContext());

    mWebView.clearCache(true);
    mWebView.clearHistory();
    clearCookies(getApplicationContext());

用户仍在chrome上登录。即使这样想,这也适用于“浏览器”应用程序(可在旧设备上使用)。


共1个答案

匿名用户

我已经通过在我的登录按钮上使用此行解决了:

    facebookLoginButton.setLoginBehavior(LoginBehavior.WEB_VIEW_ONLY);

这会强制sdk使用自定义webview(与打开默认浏览器视图的web_only不同)。

比我可以使用问题的代码在交互结束时注销。