2011-12-20 39 views
7

Tôi là người mới phát triển Android và ứng dụng webview và webview này đang giết tôi. Đây là kịch bản của tôi:Android không thể thực hiện nhận xét trên facebook trong chế độ xem web do trình duyệt mặc định

  1. tôi phải tải một trang web, trong đó có facebook social plugin (được sử dụng cho ý kiến ​​vào đó url cụ thể) và tôi đang sử dụng WebView cho nó
  2. Khi người dùng nhấp chuột bình luận bằng Facebook, ông/cô ấy là được trang đăng nhập trên cùng một webview (thay vì trình duyệt mặc định mở)
  3. Và một khi đăng nhập thành công, trang đầu tiên (một trong những chứa social plugin) là sẽ được hiển thị cho phép người dùng bình luận

Điều tôi phải làm là mô phỏng quy trình làm việc của lông mày er tức là người dùng khi đăng nhập, anh/cô ấy sẽ tự động được cấp quyền thêm nhận xét trên facebook.

Vấn đề của tôi:

Tôi không biết cách lấy tất cả xác thực từ trình duyệt và chuyển hướng trở lại trang web ứng dụng của tôi. Những gì tôi muốn là làm tất cả các quy trình trong webview ứng dụng của tôi thay vì đi đến trình duyệt mặc định.

Tôi đã kiểm tra tất cả các câu hỏi tràn ngăn xếp và hầu hết trong số họ đều khuyên bạn nên sử dụng các plugin Facebook nguồn mở như kết nối Facebook và Facebook android SDK. Hơn nữa, tôi có một số thông tin về số CookieManager, CookieSyncManager, WebViewClient, WebChromeClient nhưng tôi không thể triển khai sự cố của mình. Và gần nhất tôi thấy là thế này:

How to handle facebook like with confirm in android webview

Vì vậy, folks nếu bạn có thể chỉ cho tôi đi đúng hướng, tôi sẽ rất vui mừng. Tôi vẫn đang cố gắng tìm hiểu cách thực hiện tất cả các hành động trên một trang web và nếu bất cứ điều gì đến tôi chắc chắn sẽ đăng.

Cảm ơn trước

Cập nhật

tôi chỉ có thể thực hiện facebook đăng nhập nhưng không thể thực hiện AOL, HotmailYahoo đăng nhập. Đối với facebook đăng nhập chỉ cần tạo một WebViewClient tùy chỉnh và trên phương pháp shouldOverrideUrlLoading

if(url.contains("https://www.facebook.com/connect/window_comm.php")){ 
    webView.clearHistory(); 
    webView.loadUrl(remoteUrl); 
} 
return false; 

Để cho phép nhiều đăng nhập tôi đã thực hiện theo kỹ thuật nhưng nó không hoạt động

if(url.contains("https://www.facebook.com/connect/window_comm.php")){ 
    String cookieString = cookieManager.getCookie("facebook.com"); 
    if(cookieString != null){ 
     cookieManager.setCookie("remoteUrldomain.com", cookieString); 
     CookieSyncManager.getInstance().sync(); 
     webView.clearHistory(); 
     webView.loadUrl(remoteUrl); 
    } 
} 
return false; 

tôi vẫn đang làm hết sức mình để tìm ra giải pháp, và bất cứ ai ra khỏi đó sẽ hướng dẫn tôi theo hướng đúng đắn sẽ biết ơn. Cảm ơn trước

Trả lời

11

Câu trả lời được cung cấp trên How to handle facebook like with confirm in android webview sự là giải pháp tốt nhất mà tôi đã tìm thấy cho far.What Tôi đã học được là AndroidWebView không theo mặc định tải popup quan điểm html và cho rằng chúng ta cần phải sử dụng WebChromeClient xử lý tất cả những điều này.Nhìn vào đoạn mã sau

private String requestUrl="some web link containing facebook social comment"; 
private WebView webView,childView =null; 
private LinearLayout parentLayout; 
private Activity MyActivity; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 

    setContentView(R.layout.main); 

    getWindow().setFeatureInt(Window.FEATURE_PROGRESS,Window.PROGRESS_VISIBILITY_ON); 
    parentLayout =(LinearLayout)findViewById(R.id.parentLayout); 


    MyActivity = this; 


    webView = new WebView(this); 
    webView.setLayoutParams(getLayoutParams()); 

    webView.setWebViewClient(new FaceBookClient()); 
    webView.setWebChromeClient(new MyChromeClient()); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setAppCacheEnabled(true); 
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    webView.getSettings().setSupportMultipleWindows(true); 
    webView.getSettings().setSupportZoom(true); 
    webView.getSettings().setBuiltInZoomControls(true); 

    parentLayout.addView(webView); 
    webView.loadUrl(requestUrl); 

} 

    private LinearLayout.LayoutParams getLayoutParams(){ 
    return new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); 
} 


    final class MyChromeClient extends WebChromeClient{ 
    @Override 
    public boolean onCreateWindow(WebView view, boolean dialog, 
      boolean userGesture, Message resultMsg) { 
     childView = new WebView(SmCommentTestActivity.this); 
     childView.getSettings().setJavaScriptEnabled(true); 
     childView.getSettings().setSupportZoom(true); 
     childView.getSettings().setBuiltInZoomControls(true); 
     childView.setWebViewClient(new FaceBookClient()); 
     childView.setWebChromeClient(this); 
     childView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); 


     parentLayout.addView(childView); 


     childView.requestFocus(); 
     webView.setVisibility(View.GONE); 

      /*I think this is the main part which handles all the log in session*/ 
     WebView.WebViewTransport transport =(WebView.WebViewTransport)resultMsg.obj; 
     transport.setWebView(childView); 
     resultMsg.sendToTarget(); 
     return true; 
    } 


    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 
     MyActivity.setProgress(newProgress*100); 
    } 

    @Override 
    public void onCloseWindow(WebView window) { 
     parentLayout.removeViewAt(parentLayout.getChildCount()-1); 
     childView =null; 
     webView.setVisibility(View.VISIBLE); 
     webView.requestFocus(); 
    } 
} 

    private class FaceBookClient extends WebViewClient{ 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     Log.i("REQUEST URL",url); 
     return false; 
    } 
} 

    @Override 
    public void onBackPressed() { 
    if(childView != null && parentLayout.getChildCount()==2){ 
     childView.stopLoading(); 
     parentLayout.removeViewAt(parentLayout.getChildCount()-1); 
     if(webView.getVisibility() == View.GONE) 
      webView.setVisibility(View.VISIBLE); 
    }else{   
     super.onBackPressed(); 
    } 
} 

Đây là tất cả người ta phải làm gì để thực hiện Facebook Social Comment Plugin trên Android WebView và nếu ai đó tìm thấy bất kỳ lỗ hổng trong đó, sau đó tôi sẽ được hạnh phúc để sửa it.And hy vọng, giải pháp này sẽ tiết kiệm và thời gian trên bất kỳ nhà phát triển gặp khó khăn nào như tôi;)

+0

yêu cầu phải là gì trong mã này .. –

+0

Tôi có cần cài đặt bất kỳ bình nào vào thư mục lib không? –

+0

Tiếp tục làm mới trang sau khi tôi đăng nhập. – Minion

Các vấn đề liên quan