Ouvrir la page Facebook à partir de l'application Android?

157

depuis mon application Android, je voudrais 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 fb://schéma d'URL, mais essayer la même chose sur mon appareil Android lance un fichier ActivityNotFoundException.

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

Björn Marschollek
la source
2
Il y a un fil qui n'a pas de réponse sur les forums de développement Facebook : forum.developers.facebook.net/viewtopic.php?pid=255227 (en l'ajoutant ici car cela montre qu'il n'y a pas de réponse évidente, et peut-être que cela obtiendra répondu là un jour ...)
James Moore
vous pouvez voir ma réponse d' ici .
Mohammad Sommakia

Réponses:

152

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 j'ai trouvé que vous pouviez l'utiliser fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]. Voici la méthode que j'ai utilisée en production:

/**
 * <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
la source
4
@DjHacktorReborn, vous ne devriez plus utiliser les identifiants. Utilisez simplement le lien normal.
Jared Rummler
2
@DjHacktorReborn Je viens de vérifier, je travaille ici. Sur Facebook version 13.0.0.13.14
Jared Rummler
1
@AbdulWasae Il a fonctionné dans des applications avec des millions de téléchargements. Si vous avez une meilleure solution, veuillez la publier au lieu de voter contre une solution qui fonctionne.
Jared Rummler
4
quelqu'un peut-il confirmer que cela fonctionne toujours? (à partir de juin 2019). Je reçois toujoursActivityNotFoundException
nVxx
5
Cela ouvre la page facebook mais contrairement aux pages fb régulières, nous ne voyons pas le bouton J'aime, les photos de profil et de couverture, etc. cela ouvre directement les informations de contact et affiche tous les messages de la page.
Neeraj Dwivedi
235

Cela fonctionne sur la dernière version:

  1. Accédez à https://graph.facebook.com/ < nom_utilisateur_ici > ( 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/<id_here>"));
       } catch (Exception e) {
        return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/<user_name_here>"));
       }
    }

Cela ouvrira l'application Facebook si l'utilisateur l'a installée. Sinon, cela ouvrira Facebook dans le navigateur.

EDIT: depuis la version 11.0.0.11.23 (3002850) Facebook App ne prend plus en charge de cette façon, il y a un autre moyen, vérifiez la réponse ci-dessous de Jared Rummler.

joaomgcd
la source
1
Merci pour cela, m'a beaucoup aidé! Maintenant, si seulement il y avait un moyen de le faire pour Twitter
Evan R.
3
Pour une liste des schémas d'URL disponibles sur iOS, consultez wiki.akosma.com/IPhone_URL_Schemes - certains d'entre eux devraient également fonctionner sur Android
FrancescoR
7
& voici la réponse à ce problème; utilisez "page" au lieu de profile - stackoverflow.com/a/15872383/1433187
Khobaib
1
Juste pour noter que fb: // profile / n'est PAS pris en charge sur l'application Facebook v1.3.2 qui est incluse dans le stock Nexus One 2.3.6
Mark
3
DjHacktorReborn a raison, ni fb: // profile / <fpid> ni fb: // page / <fpid> ne fonctionnent plus à partir de fb v11
sam
38

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) sur http://graph.facebook.com/[userName]

John
la source
Je suis d'accord, c'est mieux car cela ne fait aucune hypothèse sur le nom du package d'application Facebook ou les filtres d'intention. Cependant, c'est pire pour la même raison, car d'autres applications peuvent également spécifier des filtres d'intention correspondants. Cela dépend de ce que vous voulez. Ajoutez peut-être que vous faites intent.setPackageName ("com.facebook.katana") pour vous assurer qu'aucune autre application n'est appelée.
Mark
Mais cela ouvre le navigateur et les données Facebook sont affichées, comment est-il possible d'utiliser l'application Facebook (pour appeler l'application Facebook)?
Mikheil Zhghenti
32

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

... parce qu'aucune des réponses ne fait la différence

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

Murmel
la source
salut, comment connaître la différence entre le profil et la page?
alvarodoune
1
Le profil est pour une personne privée, où une page est pour les entreprises, les lieux, les marques. Voir: facebook.com/help/217671661585622 [Titre: En quoi les pages sont-elles différentes des profils personnels?]
Murmel
pour les notes: intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
voodoo98
1
Pour trouver l'ID d'une page publique, d'un événement ou d'un profil, vous pouvez utiliser FindMyFbId
Carlos Zerga
Le profil ne s'ouvre pas dans l'application Facebook.
Hammad Nasir
27

Voici la façon de le faire en 2016, fonctionne très bien et est très facile.

J'ai découvert cela après avoir examiné comment les e-mails envoyés par Facebook ont ​​ouvert l'application.

// 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
la source
1
Fonctionne parfaitement, même en 2016. Résout également un problème lorsque vous naviguez sur Facebook depuis la Belgique (lorsque les cookies sont désactivés lorsque vous n'êtes pas connecté).
doubotis
3
Lorsque j'utilise cela, l'en-tête de la page Facebook que je référence est manquant dans l'application Facebook, par exemple l'image de profil de la page et les onglets Page / Activité / Insights.
Daniel Persson le
Cela fonctionne si vous avez le nom de la page (comme indiqué) mais pas si vous avez l'ID de page numérique.
Eric B.
5
Ok mais ne m'amène pas à une page propre où l'utilisateur peut faire un like de ma page facilement .... Toujours à la recherche de ça! Toute solution ?
Regis_AG
quelqu'un a une solution pour @Regis_AG?
adrianvintu
22

c'est le code le plus simple pour faire cela

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
la source
cela ne fonctionne pas. lorsque je mets le lien " facebook.com/pages/"+pageid "
BSKANIA
Omettre les 'pages /' - partie -> utiliser "facebook.com/" + pageId
Murmel
fonctionne toujours comme aujourd'hui! merci beaucoup j'ai changé cette partie "" facebook.com/pages/"+pageid ; " avec celui-ci "" facebook.com/"+pageid ; "
naitbrahim
@naitbrahim Merci de nous avoir fait savoir que cela fonctionne toujours! J'ai édité la réponse. btw, la réponse a été publiée en 2013 :) Heureux cela vous a aidé
MBH
15

Une approche plus réutilisable.

Il s'agit d'une fonctionnalité que nous utilisons généralement dans la plupart de nos applications. Voici donc un morceau de code réutilisable pour y parvenir.

(Semblable à d'autres réponses en termes de faits. Publiez-le ici juste pour simplifier et rendre l'implémentation réutilisable)

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

Il s'agit d'un code de travail à part entière actuellement installé dans l'une de mes applications:

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
        }
    }

Cette méthode renverra l'URL correcte de l'application si elle est installée ou l'URL Web si l'application n'est pas installée.

Puis démarrez un intent comme suit:

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

C'est tout ce dont vous avez besoin.

AndroidMécanicien - Viral Patel
la source
Il a lancé "android.content.ActivityNotFoundException: Aucune activité trouvée pour gérer l'intention {act = android.intent.action.VIEW dat = fb: // page / ####}"
Rajbir Shienh
9

Cela a été rétro-conçu par Pierre87 sur le forum FrAndroid , mais je ne trouve aucun officiel qui le décrit, il doit donc être traité 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);
Jon Colverson
la source
Oui, la solution a cessé de fonctionner. L'erreur est: "java.lang.SecurityException?: Refus d'autorisation: démarrage de l'intention {flg = 0x10080000 cmp = com.facebook.katana / .ProfileTabHostActivity? (A des extras)} de ProcessRecord?". Activity ProfileTabHostActivity n'a pas d'indicateur android: exporté dans AndroidManifest, donc par défaut, android: exporté = "false" pour cette activité. Par conséquent, ProfileTabHostActivity ne peut pas être lancé par d'autres applications. Le seul espoir que les développeurs FB résolvent ce problème dans les versions fonctionnelles de l'application FB.
dvpublic
Je pense que le correctif était de fermer cette "API accidentelle".
Vaiden
7

essayez ce code:

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
la source
7

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

  • à partir de la page, allez dans "À propos".
  • aller à la section "Plus d'infos".

introducir la descripción de la imagen aquí

Pour ouvrir l'application Facebook sur la page de profil spécifiée,

tu peux le faire:

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

Ou vous pouvez valider lorsque l'application Facebook n'est pas installée, puis ouvrir la page Web 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
la source
Je n'ai pas vu cela Page IDdans l'onglet À propos. C'est privé?
RoCk RoCk
5

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

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
la source
4

Ma réponse s'appuie sur la réponse largement acceptée de joaomgcd. Si l'utilisateur a installé Facebook mais désactivé (par exemple en utilisant App Quarantine), cette méthode ne fonctionnera pas. L'intention de l'application Twitter sera sélectionnée, mais elle ne pourra pas la traiter 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"));
igordc
la source
4

Meilleure réponse que j'ai trouvée, cela fonctionne très bien.

Rendez-vous simplement sur votre page Facebook dans le navigateur, faites un clic droit, et cliquez sur "Afficher le code source", puis trouvez l' page_idattribut: vous devez utiliser page_idici dans cette ligne après le dernier back-slash:

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);
}
Shahid Ahmad
la source
Cela n'a de sens que pour les applications statiques.
Irshu
4

À partir de mars 2020, cela fonctionne parfaitement.

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
la source
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);
Développeur Tiger
la source
2

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

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;
}
Dans ma
la source
L'application FB Lite a un nom de package séparé.Si vous utilisez cette méthode, vous devez également vérifier com.facebook.lite - bien que je n'ai pas vérifié si Lite gérera ces URL
androidguy
@androidguy Je n'ai pas FB Lite. Il serait bon de savoir si le code fonctionne avec lui. Si vous pouviez le tester d'une manière ou d'une autre et mettre vos résultats ici, cela aiderait les autres qui viennent encore ici. Apprécié, merci
Immy
@Immy -> Yourpage-1548219792xxxxxx dans l'URL est l'ID de la page ou l'URL de la page. Donc par ex: facebook.com/PageName est l'url de ma page et l'identifiant est quelque chose comme 2345676. Donc l'URL à mentionner dans le code sera facebook.com/PageName ou autre chose?
Neeraj Dwivedi
@NeerajDwivedi Vous avez besoin des deux: votre nom de page et votre ID de page dans l'URL. Quelque chose comme ceci: 'String FACEBOOK_URL = " facebook.com/BeanRoaster-1548219792112345/" ;'
Immy le
@Immy J'ai utilisé exactement le même code en remplaçant FACEBOOK_URL par " facebook.com/myPageName-myPageID " et j'obtiens une page vierge avec la barre de recherche en haut. J'utilise la dernière application Facebook sur Android 9 (version de l'application Fb - 237.0.0.44.120)
Neeraj Dwivedi
1

J'ai créé une méthode pour ouvrir la page Facebook dans l'application Facebook, si l'application n'existe pas, puis l'ouverture dans 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 ajoute ces méthodes

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
    }
}

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 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
la source
3
Dans la dernière version, cela m'amène à la page à propos pendant que je cherche à accéder à la page d'accueil. Des conseils?
Balaji Katika
Avez-vous trouvé la solution ??
Aman Verma le
1

Lancer page Facebook depuis votre application, laissez urlString = "fb: // page / your_fb_page_id"

Lancer Facebook Messenger, laissez urlString = "fb-messenger: // user / your_fb_page_id"

L'identifiant de page FB est généralement numérique. Pour l'obtenir, allez à Find My FB ID entrez l'URL de votre profil, quelque chose comme 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(urlString))
 if (intent.resolveActivity(packageManager) != null) //check if app is available to handle the implicit intent
 startActivity(intent)
EdgeDev
la source
1

Déclarer des constantes

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

Declare, méthode

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

Fonction d'appel

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

Réponse en octobre 2018. Le code de travail est celui qui utilise le pageID. Je viens de le tester et il est fonctionnel.

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
la source
0

J'ai implémenté sous cette forme en webview en utilisant 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;
                }

});

et à l'extérieur 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
la source
0

ouvrir fb sur l'événement de clic de bouton sans utiliser 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
la source
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
la source
0

1-pour obtenir votre identifiant, accédez à votre profil d'image et cliquez avec le bouton droit de la souris et prenez l'adresse du lien de copie.

        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
la source
-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)));
    }
John
la source
-2

Vous pouvez ouvrir l'application Facebook en cliquant sur le bouton 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( 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
la source