Facebook SDK WebView 不注销
Facebook SDK WebView doesn't logout
我正在开发一个应用程序,它将安装在 一台 设备上,每个用户都将使用我的设备共享图像。
他们需要登录 Facebook
才能在他们的个人资料中分享图片。分享图片后,应用程序应该退出 facebook,以便让下一个用户登录。
出于这个原因,我没有使用 Facebook Android 应用程序,而是选择了 webview 替代方案。
用户登录后,它会打开一个 WebView
(在 Chrome
上)并询问用户名、密码和权限。
用户发布图片,应用调用:
LoginManager.getInstance().logOut();
当下一个用户出现时,点击使用 Facebook
登录,它会打开一个 WebView
,它说我已经从那个 Facebook
帐户访问了这个应用程序,所以我可以只需点击继续 - 甚至没有注销按钮。
这是因为它使用了先前的用户会话,该会话仍然在WebView
内登录。
我需要一种从 WebView
注销用户的方法。我正在使用 Facebook sdk 4.31.0
.
我尝试使用此 answer 中描述的方法清除 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 上登录。甚至认为,这适用于 "Browser" 应用程序(适用于旧设备)。
我已经通过在登录按钮上使用这一行解决了问题:
facebookLoginButton.setLoginBehavior(LoginBehavior.WEB_VIEW_ONLY);
这会强制 sdk 使用自定义 webview(不同于 web_only,它会打开默认浏览器的视图)。
然后我可以使用问题的代码在交互结束时注销。
我正在开发一个应用程序,它将安装在 一台 设备上,每个用户都将使用我的设备共享图像。
他们需要登录 Facebook
才能在他们的个人资料中分享图片。分享图片后,应用程序应该退出 facebook,以便让下一个用户登录。
出于这个原因,我没有使用 Facebook Android 应用程序,而是选择了 webview 替代方案。
用户登录后,它会打开一个 WebView
(在 Chrome
上)并询问用户名、密码和权限。
用户发布图片,应用调用:
LoginManager.getInstance().logOut();
当下一个用户出现时,点击使用 Facebook
登录,它会打开一个 WebView
,它说我已经从那个 Facebook
帐户访问了这个应用程序,所以我可以只需点击继续 - 甚至没有注销按钮。
这是因为它使用了先前的用户会话,该会话仍然在WebView
内登录。
我需要一种从 WebView
注销用户的方法。我正在使用 Facebook sdk 4.31.0
.
我尝试使用此 answer 中描述的方法清除 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 上登录。甚至认为,这适用于 "Browser" 应用程序(适用于旧设备)。
我已经通过在登录按钮上使用这一行解决了问题:
facebookLoginButton.setLoginBehavior(LoginBehavior.WEB_VIEW_ONLY);
这会强制 sdk 使用自定义 webview(不同于 web_only,它会打开默认浏览器的视图)。
然后我可以使用问题的代码在交互结束时注销。