3

在我的 android 应用程序中,用户可以喜欢我的 facebook 页面。因此,我使用一个 webview 来加载一个网页,该网页包含一个类似 facebook 的框。该页面已很好地加载到 webview 中,然后发生以下情况:

  1. WebView 使用类似 facebook 的框加载我的网页
  2. 通过点击 Like 按钮,用户被重定向到 facebook 登录页面
  3. 登录后,用户再次重定向回我的自定义喜欢页面
  4. 但是当点击like按钮时,用户再次被重定向到facebook登录页面

所以我希望,登录后可能会发生类似的事情。似乎webview不记得登录了。因此,我该怎么做才能修复它。

以下屏幕截图序列显示了正在发生的事情: 在此处输入图像描述

我想避免使用 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...

压倒一切也没有用

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

2 回答 2

0

你有这个错误,因为 WebView 不记得 cookie。阅读关于 SO 的问题:Android 上的 WebView 和 Cookies

于 2013-08-28T17:13:36.107 回答
0

不确定您是否已经得到问题的答案,但我尝试了这些说明和下面的代码的组合,这对我有用:

@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 中已弃用:请参阅 CookieSyncManager 类的详细信息

于 2015-07-09T02:44:36.417 回答