Ouvrir la page Facebook depuis l’application Android?

À partir de mon application Android, j’aimerais ouvrir un lien vers un profil Facebook dans l’application Facebook officielle (si l’application est installée, bien sûr). Pour iPhone, il existe le schéma URL fb:// , mais essayer la même chose sur mon appareil Android génère une ActivityNotFoundException .

Est-il possible d’ouvrir un profil Facebook dans l’application Facebook officielle à partir du code?

Cela fonctionne sur la dernière version:

  1. Accédez à https://graph.facebook.com/ < user_name_here > ( https://graph.facebook.com/fsintents par exemple).
  2. Copiez votre identifiant
  3. Utilisez cette méthode:

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

Cela ouvrira l’application Facebook si l’utilisateur l’a installé. Sinon, il ouvrira Facebook dans le navigateur.

EDIT: depuis la version 11.0.0.11.23 (3002850), l’application Facebook ne prend plus en charge cette méthode, il existe un autre moyen, consultez la réponse ci-dessous de Jared Rummler.

Dans la version Facebook 11.0.0.11.23 (3002850) fb://profile/ et fb://page/ ne fonctionne plus. J’ai décompilé l’application Facebook et constaté que vous pouvez utiliser fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE] . Voici la méthode que j’ai utilisée en production:

 /** * 

Intent to open the official Facebook app. If the Facebook app is not installed then the * default web browser will be used.

* *

Example usage:

* * {@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, Ssortingng 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); }

N’est-ce pas plus facile? Par exemple dans 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"))); } 

PS Obtenez votre identifiant (le grand nombre) de http://graph.facebook.com/%5BuserName%5D

Pour la page 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)); } 

Pour profil 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)); } 

… car aucune des réponses ne fait la différence

Les deux testés avec Facebook v.27.0.0.24.15 et Android 5.0.1 sur Nexus 4

Voici comment procéder en 2016, fonctionne très bien et est très facile.

Je l’ai découvert après avoir regardé comment les emails envoyés par facebook ouvraient l’application.

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

c’est le code le plus simple pour ce faire

 public final void launchFacebook() { final Ssortingng 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 list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); if (list.size() == 0) { final Ssortingng urlBrowser = "https://www.facebook.com/pages/"+pageid; intent.setData(Uri.parse(urlBrowser)); } startActivity(intent); } 

Une approche plus réutilisable.

C’est une fonctionnalité que nous utilisons généralement dans la plupart de nos applications. Par conséquent, voici un morceau de code réutilisable pour y parvenir.

(Semblable à d’autres réponses en termes de faits. Afficher ici juste pour simplifier et rendre la mise en œuvre réutilisable)

"fb://page/ ne fonctionne pas avec les nouvelles versions de l’application FB. Vous devriez utiliser fb://facewebmodal/f?href= pour les nouvelles versions. ( Comme mentionné dans une autre réponse ici )

Ceci est un code de travail à part entière en direct dans l’une de mes applications:

 public static Ssortingng FACEBOOK_URL = "https://www.facebook.com/YourPageName"; public static Ssortingng FACEBOOK_PAGE_ID = "YourPageName"; //method to get the right URL to use in the intent public Ssortingng 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 } } 

Cette méthode renverra l’URL correcte pour l’application si elle est installée ou une URL Web si l’application n’est pas installée.

Ensuite, lancez une intention comme suit:

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

C’est tout ce dont vous avez besoin.

Cela a été inversé par Pierre87 sur le forum FrAndroid , mais je ne trouve nulle part officiel qui le décrit, il doit donc être considéré comme non documenté et susceptible de cesser de fonctionner à tout moment:

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

"fb://page/ ne fonctionne pas avec les nouvelles versions de l’application FB. Vous devriez utiliser fb://facewebmodal/f?href= pour les nouvelles versions.

Ceci est un code de travail à part entière:

 public static Ssortingng FACEBOOK_URL = "https://www.facebook.com/YourPageName"; public static Ssortingng FACEBOOK_PAGE_ID = "YourPageName"; //method to get the right URL to use in the intent public Ssortingng 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 } } 

Cette méthode renverra l’URL correcte pour l’application si elle est installée ou une URL Web si l’application n’est pas installée.

Ensuite, lancez une intention comme suit:

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

essayez ce code:

 Ssortingng facebookUrl = "https://www.facebook.com/"; 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/"); startActivity(new Intent(Intent.ACTION_VIEW, uri)); } } catch (PackageManager.NameNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookUrl))); } 

Après de nombreux tests, j’ai trouvé l’une des solutions les plus efficaces:

 private void openFacebookApp() { Ssortingng facebookUrl = "www.facebook.com/XXXXXXXXXX"; Ssortingng 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)); } } 

Ma réponse s’ajoute à la réponse largement acceptée de joaomgcd. Si l’utilisateur a installé Facebook mais qu’il est désactivé (par exemple en utilisant Quarantaine d’applications), cette méthode ne fonctionnera pas. L’intention de l’application Twitter sera sélectionnée, mais elle ne pourra pas être traitée car elle est désactivée.

Au lieu de:

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

Vous pouvez utiliser les éléments suivants pour décider quoi faire:

 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")); 

Pour ce faire, nous avons besoin de l’identifiant de la page Facebook, vous pouvez l’obtenir:

  • à partir de la page, allez à “À propos de”.
  • allez dans la section “Plus d’infos”.

introduction à la description de l'imagination aquí

Pour ouvrir l’application facebook sur la page de profil spécifiée,

tu peux le faire:

  Ssortingng facebookId = "fb://page/"; startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookId))); 

Ou vous pouvez valider lorsque l’application facebook n’est pas installée, puis ouvrez la page Web facebook.

 Ssortingng facebookId = "fb://page/"; Ssortingng 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))); } 

La meilleure réponse que j’ai trouvée, ça marche très bien.

Il suffit d’aller sur votre page sur Facebook dans le navigateur, cliquez avec le bouton droit de la souris et cliquez sur “Afficher le code source”, puis recherchez l’atsortingbut page_id : vous devez utiliser page_id ici dans cette ligne après le dernier retour:

 fb://page/pageID 

Par exemple:

 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); } 
 Intent intent = null; try { getPackageManager().getPackageInfo("com.facebook.katana", 0); Ssortingng 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 Ssortingng url = "https://facebook.com/"+idFacebook; intent = new Intent(Intent.ACTION_VIEW); intent .setData(Uri.parse(url)); } this.startActivity(intent); 

En juillet 2018, cela fonctionne parfaitement avec ou sans l’application Facebook sur tous les appareils.

 private void goToFacebook() { try { Ssortingng facebookUrl = getFacebookPageURL(); Intent facebookIntent = new Intent(Intent.ACTION_VIEW); facebookIntent.setData(Uri.parse(facebookUrl)); startActivity(facebookIntent); } catch (Exception e) { e.printStackTrace(); } } private Ssortingng getFacebookPageURL() { Ssortingng FACEBOOK_URL = "https://www.facebook.com/Yourpage-1548219792xxxxxx/"; Ssortingng 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; } 

Pour lancer la page facebook depuis votre application, laissez urlSsortingng = “fb: // page / your_fb_page_id”

Pour lancer facebook messenger let urlSsortingng = “fb-messenger: // user / your_fb_page_id”

L’identifiant de la page FB est généralement numérique. Pour l’obtenir, allez à Find My FB ID saisissez votre URL de profil, quelque chose comme http://www.facebook.com/edgedevstudio puis cliquez sur “Find Numberic ID”.

Voila, vous avez maintenant votre identifiant numérique fb. remplacez “your_fb_page_id” par l’ID numérique généré

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

J’ai créé une méthode pour ouvrir la page facebook dans l’application facebook, si l’application n’existe pas, puis s’ouvre en chrome

  Ssortingng socailLink="https://www.facebook.com/kfc"; Intent intent = new Intent(Intent.ACTION_VIEW); Ssortingng 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 append ces méthodes

 public static Ssortingng getFacebookUrl(FragmentActivity activity, Ssortingng 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 } } 

et ça

  /*** * 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 Ssortingng splitUrl(Context context, Ssortingng url) { if (context == null) return null; Log.d("Split ssortingng: ", url + " "); try { Ssortingng splittedUrl[] = url.split(".com/"); Log.d("Split ssortingng: ", splittedUrl[1] + " "); return splittedUrl.length == 2 ? splittedUrl[1] : url; } catch (Exception ex) { return url; } } 
 try { Ssortingng[] parts = url.split("//www.facebook.com/profile.php?id="); getPackageManager().getPackageInfo("com.facebook.katana", 0); startActivity(new Intent (Intent.ACTION_VIEW, Uri.parse(Ssortingng.format("fb://page/%s", parts[1].sortingm())))); } catch (Exception e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); } 

Vous pouvez ouvrir l’application facebook sur le bouton cliquez comme suit: –

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