3

私の Android アプリでは、ユーザーは私の Facebook ページに「いいね!」をすることができます。したがって、Facebook のようなボックスを含む Web ページをロードする Web ビューを使用します。ページが webview に適切に読み込まれると、次のことが起こります。

  1. WebView は、Facebook のようなボックスで Web ページを読み込みます
  2. Likeボタンをクリックすると、ユーザーはFacebookのログインページにリダイレクトされます
  3. ログイン後、ユーザーは再びカスタムのようなページにリダイレクトされます
  4. しかし、いいねボタンをクリックすると、ユーザーは再び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");

    }

編集:クッキーを受け入れるために次のことも試しましたが、どれも機能しませんでした

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とCookie

于 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 に答える