2011-12-20 2 views
7

Sono novizio per lo sviluppo Android e questo client webview e webview mi sta uccidendo. Questo è il mio scenario:Android non è in grado di implementare il commento di Facebook in una webview a causa del browser predefinito

  1. devo caricare una pagina web che contiene Facebook social plugin (utilizzato per commentare su quel particolare URL) e sto usando WebView per esso
  2. Quando l'utente fa clic commento utilizzando Facebook, ha/lei deve essere data pagina di login sullo stesso visualizzazione web (invece di apertura del browser di default)
  3. E una volta che l'accesso riesce, la prima pagina (quella che contiene social plugin) deve essere visualizzato permettendo all'utente di commentare

Quello che devo fare è emulare il processo di lavoro delle sopracciglia e cioè l'utente quando effettua il login, riceve automaticamente il permesso di aggiungere commenti su Facebook.

Il mio problema:

non so come ottenere tutta l'autenticazione dal browser e reindirizzare di nuovo al mio app WebView. Quello che voglio è fare tutto il processo nella mia webview dell'app piuttosto che andare al browser predefinito.

Ho controllato tutte le domande di overflow dello stack e la maggior parte consiglia di utilizzare i plugin di Facebook open source come Facebook Connect e Facebook Android SDK. Inoltre ho ricevuto alcune informazioni su CookieManager, CookieSyncManager, WebViewClient, WebChromeClient ma non ho potuto implementare sul mio problema. E la più vicina che ho trovato è questo:

How to handle facebook like with confirm in android webview

Così la gente se potesse puntare nella direzione giusta, sarei molto contento. Sto ancora cercando di capire come fare tutta l'azione su una webview e se qualcosa verrà pubblicato sicuramente.

Grazie in anticipo

Aggiornamento

ho potuto implementare solo facebook login ma non potevano implementare AOL, Hotmail e Yahoo login. Per facebook login basta creare una WebViewClient costume e sul metodo di shouldOverrideUrlLoading

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

per consentire l'accesso multiplo ho implementato seguente tecnica, ma non funziona

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; 

sto ancora facendo del mio meglio per trovare il soluzione, e chiunque là fuori mi avrebbe guidato nella giusta direzione che sarebbe grato. Grazie in anticipo

risposta

11

La risposta fornita sul How to handle facebook like with confirm in android webview è la soluzione migliore che ho trovato così far.What ho imparato è che AndroidWebView non lo fa di default caricare la comparsa di punti di vista html e per questo abbiamo bisogno di usare WebChromeClient che gestisce tutti questi.Guardate il seguente codice

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(); 
    } 
} 

Questo è tutto si deve fare per implementare Facebook Social Comment Plugin su Android WebView e se qualcuno trova alcun difetto in essa, allora sarei felice di correggere it.and speranza, questa soluzione permetterebbe di risparmiare e tempo su qualsiasi sviluppatore in difficoltà come me;)

+0

cosa dovrebbe essere requestUrl in questo codice .. –

+0

Devo installare qualsiasi jar nella cartella lib? –

+0

Si continua a rinfrescare la pagina dopo aver effettuato l'accesso. – Minion