Cómo manejar facebook como con confirmar en android webview
Estoy tratando de implementar facebook como funcionalidad usando android webview. Está funcionando bien sin "confirmar" el diálogo. Pero no funciona cuando necesita confirmación. Aquí está el fragmento de código que estoy usando.
private void setUpWebView() { likeWebView.setVerticalScrollBarEnabled(false); likeWebView.setHorizontalScrollBarEnabled(false); likeWebView.setWebViewClient(new FacebookWebViewClient()); likeWebView.setWebChromeClient(new MyChromeClient()); likeWebView.getSettings().setJavaScriptEnabled(true); String url = getFacebookLikeUrl(); likeWebView.loadUrl(url); }
También estoy configurando ViewClient y WebChromeClient.
- Autenticación de Android facebook
- Openssl no se reconoce como un comando interno o externo
- Uso del API de logro de Facebook en Android
- Actualizado - Android Facebook api 3.0 error: No se puede llamar a LoginActivity con un paquete de llamada nula
- Utilizando facebook sdk en android studio
private String getFacebookLikeUrl() { return "http://www.facebook.com/plugins/like.php?" + "href=" + URLEncoder.encode(mUrl) + "&access_token=" + URLEncoder.encode(facebook.getAccessToken()); }
Por favor, ayúdame a solucionar este problema. Gracias por adelantado.
- Session.openActiveSession sólo llama OPENING en Facebook SDK de Android
- Inicio de sesión de Facebook con Android SDK 3.0 que provoca ANR o no funciona en absoluto
- LoginButton con Fragmento nativo
- No se pudo encontrar Facebook SDK.apk
- No se puede ejecutar dex: varios archivos dex definen Lcom / facebook / android / AsyncFacebookRunner $ 1;
- Actualización de la sesión después de revocar los permisos individuales
- Facebook SDK para Android 2.3?
- Android facebook sdk v4.0 no funciona
Facebook como confirmación se abre confirm_widget en una nueva ventana. Por lo tanto, su webview debe admitir la apertura de múltiples ventanas. para este setJavaScriptCanOpenWindowsAutomatically (true) y setSupportMultipleWindows (true) para su webview-
private void setUpWebView() { likeWebView = new WebView(getContext()); likeWebView.setWebViewClient(new FacebookWebViewClient()); likeWebView.setWebChromeClient(new MyChromeClient()); final WebSettings webSettings = likeWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setSupportMultipleWindows(true); String url = getFacebookLikeUrl(); likeWebView.loadUrl(url); likeWebView.setLayoutParams(FILL); mContent.addView(likeWebView); }
Facebook como la confirmación llama al método onCreateWindow (). SO anula el método onCreateWindow en WebChromeClient –
final class MyChromeClient extends WebChromeClient { // Add new webview in same window @Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) { WebView childView = new WebView(getContext()); childView.getSettings().setJavaScriptEnabled(true); childView.setWebChromeClient(this); childView.setWebViewClient(new FacebookWebViewClient()); childView.setLayoutParams(FILL); mContent.addView(childView); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(childView); resultMsg.sendToTarget(); return true; } // remove new added webview whenever onCloseWindow gets called for new webview. @Override public void onCloseWindow(WebView window) { mContent.removeViewAt(mContent.getChildCount() - 1); } }
confirm_widget for like calls onCloseWindow cuando el usuario hace clic en Like o Cancel. En este método se elimina la última vista web agregada.
Utilicé esto para Stripe Checkout, que abre una nueva ventana en dispositivos móviles para pagos.
Basado en la respuesta de @ Shweta:
En tu actividad:
package myapp.app; /*** imports ***/ public class LoggedActivity extends FragmentActivity { public WebView myWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.logged); // retrieve the main container LinearLayout container = (LinearLayout) findViewById(R.id.logged_webviews_container); // layout params applied to the webviews in order to fit 100% the parent container LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); myWebView = new WebView(this); myWebView.setLayoutParams(layoutParams); myWebView.setWebViewClient(new BetterWebViewClient(this)); WebSettings settings = myWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setSupportMultipleWindows(true); // on this instruction, we set our extended class below as the Parent Webview webchromeclient myWebView.setWebChromeClient(new PopupWebView(this, myWebView, container, layoutParams)); // load URL myWebView.loadUrl('http://www.mywebsite.com'); container.addView(myWebView); } }
Agregue esta clase que extiende WebChromeClient
package myapp.app; /*** imports ***/ public class PopupWebChromeClient extends WebChromeClient { protected Activity activity; protected WebView parentWebView; protected RelativeLayout container; protected WebView popupView; PopupWebChromeClient( Activity activity, WebView parentWebView, RelativeLayout container ) { super(); this.activity = activity; this.parentWebView = parentWebView; this.container = container; } @Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) { this.parentWebView.setVisibility(WebView.GONE); this.popupView = new WebView(this.activity); // setup popuview and add this.popupView.getSettings().setJavaScriptEnabled(true); this.popupView.setWebChromeClient(this); this.popupView.setWebViewClient(new ApkfWebViewClient(this.activity, true)); this.popupView.setLayoutParams(new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT )); this.container.addView(this.popupView); // send popup window infos back to main (cross-document messaging) WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(popupView); resultMsg.sendToTarget(); return true; } // remove new added webview on close @Override public void onCloseWindow(WebView window) { this.popupView.setVisibility(WebView.GONE); this.parentWebView.setVisibility(WebView.VISIBLE); } }
En el xml de su diseño, no defina las vistas en la Web, ya que las creamos de inmediato.
- ¿Cómo evitar la pantalla en negro mientras se invoca otra actividad en android?
- Archivo de documentos de Android 5.0 desde el árbol URI