¿Abrir la página de Facebook desde la aplicación de Android?

157

desde mi aplicación de Android, me gustaría abrir un enlace a un perfil de Facebook en la aplicación oficial de Facebook (si la aplicación está instalada, por supuesto). Para iPhone, existe el fb://esquema de URL, pero intentar lo mismo en mi dispositivo Android arroja un ActivityNotFoundException.

¿Existe la posibilidad de abrir un perfil de Facebook en la aplicación oficial de Facebook desde el código?

Björn Marschollek
fuente
2
Hay un hilo que no tiene una respuesta en los foros de desarrollo de Facebook: forum.developers.facebook.net/viewtopic.php?pid=255227 (agregándolo aquí porque muestra que no hay una respuesta obvia, y tal vez obtenga respondió allí algún día ...)
James Moore
Puedes ver mi respuesta desde aquí .
Mohammad Sommakia

Respuestas:

152

En Facebook versión 11.0.0.11.23 (3002850) fb://profile/y fb://page/ya no funciona. Descompilé la aplicación de Facebook y descubrí que puedes usarla fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]. Aquí está el método que he estado usando en producción:

/**
 * <p>Intent to open the official Facebook app. If the Facebook app is not installed then the
 * default web browser will be used.</p>
 *
 * <p>Example usage:</p>
 *
 * {@code newFacebookIntent(ctx.getPackageManager(), "https://www.facebook.com/JRummyApps");}
 *
 * @param pm
 *     The {@link PackageManager}. You can find this class through {@link
 *     Context#getPackageManager()}.
 * @param url
 *     The full URL to the Facebook page or profile.
 * @return An intent that will open the Facebook page/profile.
 */
public static Intent newFacebookIntent(PackageManager pm, String url) {
  Uri uri = Uri.parse(url);
  try {
    ApplicationInfo applicationInfo = pm.getApplicationInfo("com.facebook.katana", 0);
    if (applicationInfo.enabled) {
      // http://stackoverflow.com/a/24547437/1048340
      uri = Uri.parse("fb://facewebmodal/f?href=" + url);
    }
  } catch (PackageManager.NameNotFoundException ignored) {
  }
  return new Intent(Intent.ACTION_VIEW, uri);
}
Jared Rummler
fuente
44
@DjHacktorReborn ya no deberías usar los identificadores. Solo usa el enlace normal.
Jared Rummler
2
@DjHacktorReborn Acabo de marcar, trabajando aquí. En la versión de Facebook 13.0.0.13.14
Jared Rummler
1
@AbdulWasae Ha funcionado en aplicaciones con millones de descargas. Si tiene una mejor solución, publíquela en lugar de rechazar una solución que funcione.
Jared Rummler
44
¿Alguien puede confirmar que esto todavía funciona? (a partir de junio de 2019). Todavía reciboActivityNotFoundException
nVxx
55
Esto abre la página de Facebook, pero a diferencia de las páginas regulares de Facebook, no vemos el botón Me gusta, las fotos de perfil y de portada, etc. Abre directamente la información de contacto y muestra todas las publicaciones de la página.
Neeraj Dwivedi
235

Esto funciona en la última versión:

  1. Vaya a https://graph.facebook.com/ < user_name_here > ( https://graph.facebook.com/fsintents por ejemplo)
  2. Copia tu identificación
  3. Usa este método:

    public static Intent getOpenFacebookIntent(Context context) {
    
       try {
        context.getPackageManager().getPackageInfo("com.facebook.katana", 0);
        return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/<id_here>"));
       } catch (Exception e) {
        return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/<user_name_here>"));
       }
    }

Esto abrirá la aplicación de Facebook si el usuario la tiene instalada. De lo contrario, abrirá Facebook en el navegador.

EDITAR: desde la versión 11.0.0.11.23 (3002850) la aplicación de Facebook ya no es compatible de esta manera, hay otra forma, verifique la respuesta a continuación de Jared Rummler.

joaomgcd
fuente
1
Gracias por esto, me ayudó mucho! Ahora, si tan solo hubiera una manera de hacerlo por Twitter
Evan R.
3
Para obtener una lista de los esquemas de URL disponibles en iOS, visite wiki.akosma.com/IPhone_URL_Schemes , algunos de ellos también deberían funcionar en Android
FrancescoR
77
Y aquí está la respuesta a ese problema; use "página" en lugar de perfil - stackoverflow.com/a/15872383/1433187
Khobaib
1
Solo para tener en cuenta que fb: // profile / NO es compatible con la aplicación de Facebook v1.3.2 que se incluye en stock Nexus One 2.3.6
Marque
3
DjHacktorReborn tiene razón, ni fb: // profile / <fpid> ni fb: // page / <fpid> ya no funcionan a partir de fb v11
sam
38

¿No es esto más fácil? Por ejemplo dentro de un onClickListener?

try {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/426253597411506"));
    startActivity(intent);
} catch(Exception e) {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.facebook.com/appetizerandroid")));
}

PD. Obtenga su identificación (el gran número) de http://graph.facebook.com/[userName]

Juan
fuente
Estoy de acuerdo, esto es mejor porque no hace suposiciones sobre el nombre del paquete de la aplicación de Facebook o los filtros de intención. Sin embargo, es peor por la misma razón porque otras aplicaciones también pueden especificar filtros de intención coincidentes. Depende de lo que quieras. Tal vez agregue do.inten.setPackageName ("com.facebook.katana") para asegurarse de que no se llame a otras aplicaciones.
Mark
Pero abre el navegador y se muestran los datos de Facebook, ¿cómo es posible usar la aplicación de Facebook (para llamar a la aplicación de Facebook)?
Mikheil Zhghenti
32

Para la página de Facebook:

try {
    intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/" + pageId));
} catch (Exception e) {
    intent =  new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/" + pageId));
}

Para el perfil de Facebook:

try {
    intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/" + profileId));
} catch (Exception e) {
    intent =  new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/" + profileId));
}

... porque ninguna de las respuestas señala la diferencia

Ambos probados con Facebook v.27.0.0.24.15 y Android 5.0.1 en Nexus 4

Murmel
fuente
hola, ¿cómo saber la diferencia entre perfil y página?
alvarodoune
1
El perfil es para una persona privada, donde una página es para empresas, lugares, marcas. Ver: facebook.com/help/217671661585622 [Título: ¿En qué se diferencian las páginas de los perfiles personales?]
Murmel
para notas: intento = nuevo intento (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
voodoo98
1
Para encontrar la identificación de la página pública, evento, perfil, puede usar FindMyFbId
Carlos Zerga el
El perfil no se abre en la aplicación de Facebook.
Hammad Nasir
27

Esta es la forma de hacerlo en 2016, funciona muy bien y es muy fácil.

Descubrí esto después de analizar cómo los correos electrónicos enviados por Facebook abrieron la aplicación.

// e.g. if your URL is https://www.facebook.com/EXAMPLE_PAGE, you should put EXAMPLE_PAGE at the end of this URL, after the ?
String YourPageURL = "https://www.facebook.com/n/?YOUR_PAGE_NAME";
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(YourPageURL));

startActivity(browserIntent);
Someguy123
fuente
1
Funciona perfectamente, incluso en 2016. Resuelve también un problema cuando navega en Facebook desde Bélgica (cuando las cookies están deshabilitadas cuando no está conectado).
dudas el
3
Cuando uso esto, falta el encabezado de la página de Facebook a la que me refiero en la aplicación de Facebook, por ejemplo, la imagen de perfil de la página y las pestañas Página / Actividad / Información.
Daniel Persson
Esto funciona si tiene el nombre de la página (como se indica) pero no si tiene la ID numérica de la página.
Eric B.
55
Ok, pero no me lleva a una página limpia donde el usuario pueda hacer un me gusta de mi página fácilmente ... ¡Todavía estoy buscando esto! Alguna solución ?
Regis_AG
Alguien tiene una solución para @Regis_AG?
adrianvintu
22

este es el código más simple para hacer esto

public final void launchFacebook() {
        final String urlFb = "fb://page/"+yourpageid;
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(urlFb));

        // If a Facebook app is installed, use it. Otherwise, launch
        // a browser
        final PackageManager packageManager = getPackageManager();
        List<ResolveInfo> list =
            packageManager.queryIntentActivities(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
        if (list.size() == 0) {
            final String urlBrowser = "https://www.facebook.com/"+pageid;
            intent.setData(Uri.parse(urlBrowser));
        }

        startActivity(intent);
    }
MBH
fuente
esto no está funcionando. cuando configuro el enlace " facebook.com/pages/"+pageid "
BSKANIA
Omita las 'páginas /' - parte -> use "facebook.com/" + pageId
Murmel
sigue trabajando como hoy! muchas gracias cambié esta parte "" facebook.com/pages/"+pageid ; " con este "" facebook.com/"+pageid ; "
naitbrahim
@naitbrahim ¡Gracias por informarnos que aún funciona! He editado la respuesta. por cierto, la respuesta fue publicada en 2013 :) Feliz de haberlo ayudado
MBH
15

Un enfoque más reutilizable.

Esta es una funcionalidad que generalmente usamos en la mayoría de nuestras aplicaciones. Por lo tanto, aquí hay una pieza de código reutilizable para lograr esto.

(Similar a otras respuestas en términos de hechos. Publíquelo aquí solo para simplificar y hacer que la implementación sea reutilizable)

"fb://page/no funciona con versiones más recientes de la aplicación FB. Debe usar fb://facewebmodal/f?href=para versiones más nuevas. ( Como se menciona en otra respuesta aquí )

Este es un código de trabajo completo actualmente en vivo en una de mis aplicaciones:

public static String FACEBOOK_URL = "https://www.facebook.com/YourPageName";
public static String FACEBOOK_PAGE_ID = "YourPageName";

//method to get the right URL to use in the intent
public String getFacebookPageURL(Context context) {
        PackageManager packageManager = context.getPackageManager();
        try {
            int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;
            if (versionCode >= 3002850) { //newer versions of fb app
                return "fb://facewebmodal/f?href=" + FACEBOOK_URL;
            } else { //older versions of fb app
                return "fb://page/" + FACEBOOK_PAGE_ID;
            }
        } catch (PackageManager.NameNotFoundException e) {
            return FACEBOOK_URL; //normal web url
        }
    }

Este método devolverá la URL correcta para la aplicación si está instalada o la URL web si la aplicación no está instalada.

Luego comienza una intención de la siguiente manera:

Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
String facebookUrl = getFacebookPageURL(this);
facebookIntent.setData(Uri.parse(facebookUrl));
startActivity(facebookIntent);

Eso es todo lo que necesitas.

AndroidMechanic - Viral Patel
fuente
Lanzó "android.content.ActivityNotFoundException: no se encontró actividad para manejar la intención {act = android.intent.action.VIEW dat = fb: // page / ####}"
Rajbir Shienh
9

Pierre87 ha realizado ingeniería inversa en el foro FrAndroid , pero no puedo encontrar ningún sitio oficial que lo describa, por lo que debe tratarse como indocumentado y puede dejar de funcionar en cualquier momento:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.facebook.katana", "com.facebook.katana.ProfileTabHostActivity");
intent.putExtra("extra_user_id", "123456789l");
this.startActivity(intent);
Jon Colverson
fuente
Sí, la solución dejó de funcionar. El error es: "java.lang.SecurityException ?: Denegación de permiso: intención de inicio {flg = 0x10080000 cmp = com.facebook.katana / .ProfileTabHostActivity? (Tiene extras)} de ProcessRecord?". Activity ProfileTabHostActivity no tiene un indicador android: exportado en AndroidManifest, por lo que, de forma predeterminada, android: exported = "false" para esta actividad. Como resultado, ProfileTabHostActivity no puede ser lanzado por otras aplicaciones. La única esperanza es que los desarrolladores de FB solucionen este problema en las versiones con funciones de la aplicación FB.
dvpublic
Creo que la solución fue cerrar esta "API accidental".
Vaiden
7

prueba este código:

String facebookUrl = "https://www.facebook.com/<id_here>";
        try {
            int versionCode = getPackageManager().getPackageInfo("com.facebook.katana", 0).versionCode;
            if (versionCode >= 3002850) {
                Uri uri = Uri.parse("fb://facewebmodal/f?href=" + facebookUrl);
                   startActivity(new Intent(Intent.ACTION_VIEW, uri));
            } else {
                Uri uri = Uri.parse("fb://page/<id_here>");
                startActivity(new Intent(Intent.ACTION_VIEW, uri));
            }
        } catch (PackageManager.NameNotFoundException e) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookUrl)));
        }
Ravi Makvana
fuente
7

Para hacer esto, necesitamos la "identificación de la página de Facebook", puede obtenerla:

  • desde la página vaya a "Acerca de".
  • vaya a la sección "Más información".

introducir la descripción de la imagen aquí

Para abrir la aplicación de Facebook en la página de perfil especificada,

Puedes hacerlo:

 String facebookId = "fb://page/<Facebook Page ID>";
  startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookId)));

O puede validar cuando la aplicación de Facebook no está instalada, luego abrir la página web de Facebook.

String facebookId = "fb://page/<Facebook Page ID>";
String urlPage = "http://www.facebook.com/mypage";

     try {
          startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookId )));
        } catch (Exception e) {
         Log.e(TAG, "Application not intalled.");
         //Open url web page.
         startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        }
Jorgesys
fuente
No vi esto Page IDen la pestaña acerca de. ¿Es privado?
RoCk RoCk
5

Después de muchas pruebas, he encontrado una de las soluciones más efectivas:

private void openFacebookApp() {
    String facebookUrl = "www.facebook.com/XXXXXXXXXX";
    String facebookID = "XXXXXXXXX";

    try {
        int versionCode = getActivity().getApplicationContext().getPackageManager().getPackageInfo("com.facebook.katana", 0).versionCode;

        if(!facebookID.isEmpty()) {
            // open the Facebook app using facebookID (fb://profile/facebookID or fb://page/facebookID)
            Uri uri = Uri.parse("fb://page/" + facebookID);
            startActivity(new Intent(Intent.ACTION_VIEW, uri));
        } else if (versionCode >= 3002850 && !facebookUrl.isEmpty()) {
            // open Facebook app using facebook url
            Uri uri = Uri.parse("fb://facewebmodal/f?href=" + facebookUrl);
            startActivity(new Intent(Intent.ACTION_VIEW, uri));
        } else {
            // Facebook is not installed. Open the browser
            Uri uri = Uri.parse(facebookUrl);
            startActivity(new Intent(Intent.ACTION_VIEW, uri));
        }
    } catch (PackageManager.NameNotFoundException e) {
        // Facebook is not installed. Open the browser
        Uri uri = Uri.parse(facebookUrl);
        startActivity(new Intent(Intent.ACTION_VIEW, uri));
    }
}
Javier Amor Penas
fuente
4

Mi respuesta se basa en la respuesta ampliamente aceptada de joaomgcd. Si el usuario tiene Facebook instalado pero deshabilitado (por ejemplo, usando la Cuarentena de la aplicación), este método no funcionará. Se seleccionará la intención de la aplicación de Twitter, pero no podrá procesarla porque está deshabilitada.

En vez de:

context.getPackageManager().getPackageInfo("com.facebook.katana", 0);
return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));

Puede usar lo siguiente para decidir qué hacer:

PackageInfo info = context.getPackageManager().getPackageInfo("com.facebook.katana", 0);
if(info.applicationInfo.enabled)
    return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));
else
    return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/620681997952698"));
igordc
fuente
4

La mejor respuesta que he encontrado, está funcionando muy bien.

Simplemente vaya a su página en Facebook en el navegador, haga clic derecho y haga clic en "Ver código fuente", luego busque el page_idatributo: debe usarlo page_idaquí en esta línea después de la última barra diagonal inversa:

fb://page/pageID

Por ejemplo:

Intent facebookAppIntent;
try {
    facebookAppIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/1883727135173361"));
    startActivity(facebookAppIntent);
} catch (ActivityNotFoundException e) {
    facebookAppIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://facebook.com/CryOut-RadioTv-1883727135173361"));
    startActivity(facebookAppIntent);
}
Shahid Ahmad
fuente
Esto solo tiene sentido para aplicaciones estáticas.
Irshu
4

A partir de marzo de 2020, esto funciona perfectamente.

private void openFacebookPage(String pageId) {
    String pageUrl = "https://www.facebook.com/" + pageId;

    try {
        ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo("com.facebook.katana", 0);

        if (applicationInfo.enabled) {
            int versionCode = getPackageManager().getPackageInfo("com.facebook.katana", 0).versionCode;
            String url;

            if (versionCode >= 3002850) {
                url = "fb://facewebmodal/f?href=" + pageUrl;
            } else {
                url = "fb://page/" + pageId;
            }

            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        } else {
            throw new Exception("Facebook is disabled");
        }
    } catch (Exception e) {
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(pageUrl)));
    }
}
DeveScie
fuente
2
Intent intent = null;
    try {
        getPackageManager().getPackageInfo("com.facebook.katana", 0);
        String url = "https://www.facebook.com/"+idFacebook;
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://facewebmodal/f?href="+url));
    } catch (Exception e) {
        // no Facebook app, revert to browser
        String url = "https://facebook.com/"+idFacebook;
        intent = new Intent(Intent.ACTION_VIEW);
        intent .setData(Uri.parse(url));
    }
    this.startActivity(intent);
Desarrollador Tiger
fuente
2

A partir de julio de 2018, esto funciona perfectamente con o sin la aplicación de Facebook en todos los dispositivos.

private void goToFacebook() {
    try {
        String facebookUrl = getFacebookPageURL();
        Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
        facebookIntent.setData(Uri.parse(facebookUrl));
        startActivity(facebookIntent);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private String getFacebookPageURL() {
    String FACEBOOK_URL = "https://www.facebook.com/Yourpage-1548219792xxxxxx/";
    String facebookurl = null;

    try {
        PackageManager packageManager = getPackageManager();

        if (packageManager != null) {
            Intent activated = packageManager.getLaunchIntentForPackage("com.facebook.katana");

            if (activated != null) {
                int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;

                if (versionCode >= 3002850) {
                    facebookurl = "fb://page/1548219792xxxxxx";
                }
            } else {
                facebookurl = FACEBOOK_URL;
            }
        } else {
            facebookurl = FACEBOOK_URL;
        }
    } catch (Exception e) {
        facebookurl = FACEBOOK_URL;
    }
    return facebookurl;
}
Immy
fuente
La aplicación FB Lite tiene un nombre de paquete separado, si lo usa de esta manera, también debe verificar com.facebook.lite, aunque no he verificado si Lite manejará estas URL
Androidguy
@androidguy No tengo FB Lite. Sería bueno saber si el código funciona con él. Si pudiera probarlo de alguna manera y poner sus hallazgos aquí, eso ayudaría a otros que aún vienen aquí. Apreciado, gracias
Immy
@Immy -> Yourpage-1548219792xxxxxx en la URL es la identificación de la página o la URL de la página. Entonces, por ejemplo: facebook.com/PageName es la URL de mi página y la identificación es algo así como 2345676. Entonces, ¿la URL que se mencionará en el código será facebook.com/PageName u otra cosa?
Neeraj Dwivedi
@NeerajDwivedi Necesita ambos: el nombre de su página y el ID de la página en la URL. Algo así: 'String FACEBOOK_URL = " facebook.com/BeanRoaster-1548219792112345/" ;'
Immy
@Immy, he usado exactamente el mismo código que reemplaza el FACEBOOK_URL por " facebook.com/myPageName-myPageID " y obtengo una página en blanco con la barra de búsqueda en la parte superior. Estoy usando la última aplicación de Facebook en Android 9 (versión de la aplicación Fb - 237.0.0.44.120)
Neeraj Dwivedi
1

He creado un método para abrir la página de Facebook en la aplicación de Facebook, si la aplicación no existe, abrir en Chrome

    String socailLink="https://www.facebook.com/kfc";
    Intent intent = new Intent(Intent.ACTION_VIEW);
    String facebookUrl = Utils.getFacebookUrl(getActivity(), socailLink);
    if (facebookUrl == null || facebookUrl.length() == 0) {
        Log.d("facebook Url", " is coming as " + facebookUrl);
        return;
    }
    intent.setData(Uri.parse(facebookUrl));
    startActivity(intent);

Utils.class agrega este método

public static String getFacebookUrl(FragmentActivity activity, String facebook_url) {
    if (activity == null || activity.isFinishing()) return null;

    PackageManager packageManager = activity.getPackageManager();
    try {
        int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;
        if (versionCode >= 3002850) { //newer versions of fb app
            Log.d("facebook api", "new");
            return "fb://facewebmodal/f?href=" + facebook_url;
        } else { //older versions of fb app
            Log.d("facebook api", "old");
            return "fb://page/" + splitUrl(activity, facebook_url);
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.d("facebook api", "exception");
        return facebook_url; //normal web url
    }
}

y esto

 /***
 * this method used to get the facebook profile name only , this method split domain into two part index 0 contains https://www.facebook.com and index 1 contains after / part
 * @param context contain context
 * @param url contains facebook url like https://www.facebook.com/kfc
 * @return if it successfully split then return "kfc"
 *
 * if exception in splitting then return "https://www.facebook.com/kfc"
 *
 */
 public static String splitUrl(Context context, String url) {
    if (context == null) return null;
    Log.d("Split string: ", url + " ");
    try {
        String splittedUrl[] = url.split(".com/");
        Log.d("Split string: ", splittedUrl[1] + " ");
        return splittedUrl.length == 2 ? splittedUrl[1] : url;
    } catch (Exception ex) {
        return url;
    }
}
Abdul Rizwan
fuente
3
En la última versión, esto en realidad me lleva a la página acerca de mientras estoy buscando navegar a la página de inicio. Algun consejo ?
Balaji Katika
¿Has encontrado la solución?
Aman Verma
1

Para iniciar la página de Facebook desde su aplicación, deje urlString = "fb: // page / your_fb_page_id"

Para iniciar Facebook Messenger, deje urlString = "fb-messenger: // user / your_fb_page_id"

La identificación de la página de FB suele ser numérica. Para obtenerlo, vaya a Buscar mi ID de FB ingrese su URL de perfil, algo como www.facebook.com/edgedevstudio y luego haga clic en "Buscar ID numérico".

Voila, ahora tienes tu identificación numérica fb. reemplace "your_fb_page_id" con el ID numérico generado

 val intent = Intent(Intent.ACTION_VIEW, Uri.parse(urlString))
 if (intent.resolveActivity(packageManager) != null) //check if app is available to handle the implicit intent
 startActivity(intent)
EdgeDev
fuente
1

Declarar constantes

  private String FACEBOOK_URL="https://www.facebook.com/approids";
    private String FACEBOOK_PAGE_ID="approids";

Método de declaración

public String getFacebookPageURL(Context context) {
        PackageManager packageManager = context.getPackageManager();
        try {
            int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;

            boolean activated =  packageManager.getApplicationInfo("com.facebook.katana", 0).enabled;
            if(activated){
                if ((versionCode >= 3002850)) {
                    Log.d("main","fb first url");
                    return "fb://facewebmodal/f?href=" + FACEBOOK_URL;
                } else {
                    return "fb://page/" + FACEBOOK_PAGE_ID;
                }
            }else{
                return FACEBOOK_URL;
            }
        } catch (PackageManager.NameNotFoundException e) {
            return FACEBOOK_URL;
        }
    }

Función de llamada

Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
                String facebookUrl = getFacebookPageURL(MainActivity.this);
                facebookIntent.setData(Uri.parse(facebookUrl));
                startActivity(facebookIntent);
Abhishek Agarwal
fuente
0

Respondiendo esto en octubre de 2018. El código de trabajo es el que usa el pageID. Lo acabo de probar y es funcional.

public static void openUrl(Context ctx, String url){
    Uri uri = Uri.parse(url);
    if (url.contains(("facebook"))){
        try {
            ApplicationInfo applicationInfo = ctx.getPackageManager().getApplicationInfo("com.facebook.katana", 0);
            if (applicationInfo.enabled) {
                uri = Uri.parse("fb://page/<page_id>");
                openURI(ctx, uri);
                return;
            }
        } catch (PackageManager.NameNotFoundException ignored) {
            openURI(ctx, uri);
            return;
        }
    }
franzesz
fuente
0

Implementé en este formulario en webview usando fragment- inside oncreate:

 webView.setWebViewClient(new WebViewClient()
{
    public boolean shouldOverrideUrlLoading(WebView viewx, String urlx)
                {
     if(Uri.parse(urlx).getHost().endsWith("facebook.com")) {
                        {
                            goToFacebook();
                        }
                        return false;
                    }
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlx));
                    viewx.getContext().startActivity(intent);
                    return true;
                }

});

y fuera de onCreateView:

 private void goToFacebook() {
        try {
            String facebookUrl = getFacebookPageURL();
            Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
            facebookIntent.setData(Uri.parse(facebookUrl));
            startActivity(facebookIntent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //facebook url load
    private String getFacebookPageURL() {
        String FACEBOOK_URL = "https://www.facebook.com/pg/XXpagenameXX/";
        String facebookurl = null;

        try {
            PackageManager packageManager = getActivity().getPackageManager();

            if (packageManager != null) {
                Intent activated = packageManager.getLaunchIntentForPackage("com.facebook.katana");

                if (activated != null) {
                    int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;

                    if (versionCode >= 3002850) {
                        facebookurl = "fb://page/XXXXXXpage_id";
                    }
                } else {
                    facebookurl = FACEBOOK_URL;
                }
            } else {
                facebookurl = FACEBOOK_URL;
            }
        } catch (Exception e) {
            facebookurl = FACEBOOK_URL;
        }
        return facebookurl;
    }
silvertech048
fuente
0

abrir fb al hacer clic en el evento de botón sin usar Facebook SDK

 Intent FBIntent = new Intent(Intent.ACTION_SEND);
    FBIntent.setType("text/plain");
    FBIntent.setPackage("com.facebook.katana");
    FBIntent.putExtra(Intent.EXTRA_TEXT, "The text you wanted to share");
    try {
        context.startActivity(FBIntent);
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(context, "Facebook have not been installed.", Toast.LENGTH_SHORT).show( );
    }
Drashti Vyas
fuente
0
fun getOpenFacebookIntent(context: Context, url: String) {
    return try {
        context.packageManager.getPackageInfo("com.facebook.katana", 0)
        context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/$url/")))
    } catch (e: Exception) {
        context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
    }
}
Hardik Patel
fuente
0

1-para obtener su identificación, vaya a su perfil de imagen y haga clic derecho y tome la dirección del enlace de copia.

        try {
                Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("fb://profile/id"));
                startActivity(intent);
            } catch(Exception e) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("facebook url")));
            }
        }
    });
Mohamed Gemy
fuente
-1
try {
       String[] parts = url.split("//www.facebook.com/profile.php?id=");
       getPackageManager().getPackageInfo("com.facebook.katana", 0);
       startActivity(new Intent (Intent.ACTION_VIEW, Uri.parse(String.format("fb://page/%s", parts[1].trim()))));
    } catch (Exception e) {
       startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
    }
Juan
fuente
-2

Puede abrir la aplicación de Facebook al hacer clic en el botón de la siguiente manera: -

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            startNewActivity("com.facebook.katana");
        }
    });

}

public void startNewActivity( String packageName)
{
    Intent intent = MainActivity.this.getPackageManager().getLaunchIntentForPackage(packageName);
    if (intent != null)
    {
        // we found the activity
        // now start the activity
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    else
    {
        // bring user to the market
        // or let them choose an app?
        intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse("market://details?id="+packageName));
        startActivity(intent);
    }
}
Deepak Sharma
fuente