Facebook SDK WebView无法注销

Fed*_*nzi 6 android facebook facebook-sdk-4.x

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

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

出于这个原因,我没有使用Facebook Android应用程序,但选择了webview替代方案.用户登录后,打开WebView(Chrome登录)登录并询问用户名,密码和权限.

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

LoginManager.getInstance().logOut();
Run Code Online (Sandbox Code Playgroud)

当下一个用户点击登录时Facebook,会打开一个WebView说我已经从该Facebook帐户访问过这个应用程序,所以我可以点击继续 - 甚至没有注销按钮.

这是因为它使用了先前的用户会话,该会话仍然在其中登录WebView.

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

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

    WebView mWebView = new WebView(getApplicationContext());

    mWebView.clearCache(true);
    mWebView.clearHistory();
    clearCookies(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

用户仍然使用chrome登录.甚至想到,这适用于"浏览器"应用程序(旧设备上可用).

Fed*_*nzi 3

我通过在登录按钮上使用这一行解决了问题:

    facebookLoginButton.setLoginBehavior(LoginBehavior.WEB_VIEW_ONLY);
Run Code Online (Sandbox Code Playgroud)

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

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