¿Abrir la página de Facebook desde la aplicación de Android?
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 error.ActivityNotFoundException
.
¿Existe la posibilidad de abrir un perfil de Facebook en la aplicación oficial de Facebook desde el código?
Esto funciona en la última versión:
- Vaya a https://graph.facebook.com/<user_name_here > ( https://graph.facebook.com/fsintents por ejemplo)
- Copia tu identificación
Utilice 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 admite esta forma, hay otra manera, consulte la respuesta a continuación de Jared Rummler.
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 usar fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]
. Este es 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);
}
¿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 número grande) de http://graph.facebook.com/[userName]