webview将不记得facebook登录

时间:2013-08-28 17:10:43

标签: android webview facebook-like

在我的Android应用程序中,用户可以喜欢我的Facebook页面。因此,我使用webview加载包含类似Facebook的网页。该页面已加载到webview中,然后发生以下情况:

  1. WebView使用类似Facebook的方框加载我的网页
  2. 通过单击“赞”按钮,用户将被重定向到Facebook登录页面
  3. 登录后,用户再次重定向回我的自定义页面
  4. 但是,当点击“赞”按钮时,用户将再次被重定向到Facebook登录页面
  5. 所以我希望,登录后可能就是这样。似乎某种方式似乎webview不记得登录。因此,我需要做些什么来修复它。

    以下屏幕截图序列显示了正在发生的事情: enter image description here

    我想避免使用facebook sdk for android!特别是这个程序在我的应用程序的iphone版本中运行得非常好。

    以下是一些用于实现所需功能的代码:

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final WebView fbWebView = (WebView) findViewById( R.id.facebookWebView );
            fbWebView.getSettings().setJavaScriptEnabled(true);
    
            fbWebView.setWebViewClient( new WebViewClient() {
                @Override
                public WebResourceResponse shouldInterceptRequest (WebView view, String url) {
                    Log.d("call url", url );
                    if ( url.contains("login.php?skip_api_login") ) {
                        fbWebView.loadUrl("http://www.example.de/iphone_facebook_like_page.html");
                        return null;
                    }
    
                    if( url.contains("user_successfully_liked") ) 
                        fbWebView.loadUrl("http://www.example-success.de");
                    return null;
                }
            });
    
            fbWebView.loadUrl("http://www.example.de/iphone_facebook_like_page.html");
    
        }
    

    编辑:我也尝试了以下内容来接受cookie,但这些都不起作用

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            CookieSyncManager.createInstance(this);
            CookieSyncManager.getInstance().startSync();
            CookieManager.setAcceptFileSchemeCookies(true);
            CookieManager.getInstance().setAcceptCookie(true);
            //rest is the same...
    

    Overrding也不起作用

    @Override  
          public boolean shouldOverrideUrlLoading(WebView view, String url)  
          {  
            view.loadUrl(url);  
            return true;  
          } 
    

2 个答案:

答案 0 :(得分:0)

您有错误,因为WebView不记得Cookie。在SO上阅读该问题:WebView and Cookies on Android

答案 1 :(得分:0)

不确定您是否已得到问题的答案,但我尝试了these instructions和以下代码的组合,这对我有用:

@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
...
WebView webView = new WebView();
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAppCacheEnabled(true);
settings.setDomStorageEnabled(true);
settings.setGeolocationEnabled(true); // this last one is probably optional
webView.setWebViewClient(new WebViewClient());
webView.loadUrl(<your url here>);
...
}

然后,您需要调用CookieSyncManager单例类的相应方法,如上面的链接所示。请注意,API级别21中不推荐使用同步类:see details on CookieSyncManager class