Facebook-Seite von Android App öffnen?

Von meiner Android-App möchte ich in der offiziellen Facebook-App einen Link zu einem Facebook-Profil öffnen (sofern die App natürlich installiert ist). Für iPhone gibt es das fb:// URL-Schema, aber das gleiche auf meinem Android-Gerät zu versuchen triggers eine ActivityNotFoundException .

Besteht die Möglichkeit, ein Facebook-Profil in der offiziellen Facebook-App per Code zu öffnen?

    Dies funktioniert auf der neuesten Version:

    1. Gehen Sie zu https://graph.facebook.com/ < user_name_here > ( https://graph.facebook.com/fsintents zum Beispiel)
    2. Kopiere deine ID
    3. Verwenden Sie diese Methode:

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

    Dadurch wird die Facebook App geöffnet, wenn der Benutzer sie installiert hat. Andernfalls wird Facebook im Browser geöffnet.

    EDIT: seit Version 11.0.0.11.23 (3002850) Facebook-App nicht mehr auf diese Weise unterstützen, gibt es einen anderen Weg, überprüfen Sie die Antwort unten von Jared Rummler.

    In Facebook Version 11.0.0.11.23 (3002850) funktionieren fb://profile/ und fb://page/ nicht mehr. Ich habe die Facebook-App dekompiliert und festgestellt, dass Sie fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE] . Hier ist die Methode, die ich in der Produktion verwendet habe:

     /** * 

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

    Ist das nicht einfacher? Zum Beispiel in einem 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. Holen Sie sich Ihre ID (die große Zahl) von http://graph.facebook.com/%5BuserName%5D

    Für Facebook-Seite:

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

    Für Facebook Profil:

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

    … weil keiner der Antworten auf den Unterschied hinweist

    Beide wurden mit Facebook v.27.0.0.24.15 und Android 5.0.1 auf Nexus 4 getestet

    Hier ist der Weg, es 2016 zu tun, funktioniert super und ist sehr einfach.

    Ich entdeckte dies, nachdem ich untersucht hatte, wie per Facebook gesendete E-Mails die App öffneten.

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

    Dies ist der einfachste Code dafür

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

    Ein wiederverwendbarer Ansatz.

    Dies ist eine functionalität, die wir in den meisten unserer Apps verwenden. Daher ist hier ein wiederverwendbares Stück Code, um dies zu erreichen.

    (Ähnlich wie bei anderen Antworten in Bezug auf Fakten. Posten Sie hier, nur um die Implementierung zu vereinfachen und wiederverwendbar zu machen)

    "fb://page/ funktioniert nicht mit neueren Versionen der FB-App. Sie sollten fb://facewebmodal/f?href= für neuere Versionen verwenden. ( Wie in einer anderen Antwort hier erwähnt )

    Dies ist ein voll funktionsfähiger Code, der momentan in einer meiner Apps lebt:

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

    Diese Methode gibt die korrekte URL für die App zurück, wenn sie installiert ist, oder die Web-URL, wenn die App nicht installiert ist.

    Dann starte eine Absicht wie folgt:

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

    Das ist alles was du brauchst.

    Dies wurde von Pierre87 auf dem FrAndroid-Forum umgekehrt entwickelt , aber ich kann nirgends eine offizielle finden, die es beschreibt, so dass es als undokumentiert behandelt werden muss und jederzeit aufhören kann zu arbeiten:

     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/ funktioniert nicht mit neueren Versionen der FB-App. Sie sollten fb://facewebmodal/f?href= für neuere Versionen verwenden.

    Dies ist ein vollwertiger Arbeitscode:

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

    Diese Methode gibt die korrekte URL für die App zurück, wenn sie installiert ist, oder die Web-URL, wenn die App nicht installiert ist.

    Dann starte eine Absicht wie folgt:

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

    probiere diesen Code aus:

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

    Nach vielen Tests habe ich eine der effektivsten Lösungen gefunden:

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

    Meine Antwort basiert auf der allgemein akzeptierten Antwort von joaomgcd. Wenn der Benutzer Facebook installiert, aber deaktiviert hat (z. B. durch Verwendung der App-Quarantäne), funktioniert diese Methode nicht. Die Absicht für die Twitter-App wird ausgewählt, aber sie kann nicht verarbeitet werden, da sie deaktiviert ist.

    Anstatt von:

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

    Sie können Folgendes verwenden, um zu entscheiden, was zu tun ist:

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

    Dazu benötigen wir die “Facebook-Seiten-ID”, die Sie bekommen können:

    • Von der Seite gehen Sie zu “Über”.
    • Gehe zum Abschnitt “Weitere Informationen”.

    Einführung in die Beschreibung der Bilder

    Um die Facebook App auf der angegebenen Profilseite zu öffnen,

    du kannst das:

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

    Oder Sie können validieren, wenn die Facebook-App nicht installiert ist, und dann die Facebook-Webseite öffnen.

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

    Beste Antwort, die ich gefunden habe, es funktioniert großartig.

    Gehe einfach im Browser auf deine Facebook-Seite, page_id der page_id auf “Quellcode page_id “, dann finde das Attribut page_id : du musst page_id hier in dieser Zeile nach dem letzten Schrägstrich verwenden:

     fb://page/pageID 

    Beispielsweise:

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

    Ab Juli 2018 funktioniert das perfekt mit oder ohne Facebook App auf allen Geräten.

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

    Um die Facebook-Seite von Ihrer App aus zu starten, lassen Sie urlString = “fb: // page / your_fb_page_id”

    Um Facebook Messenger zu starten, laß urlString = “fb-messenger: // user / your_fb_page_id”

    Die ID der FB-Seite ist normalerweise numerisch. Um es zu bekommen, gehen Sie zu Find My FB ID geben Sie Ihre Profil-URL, etwas wie http://www.facebook.com/edgedevstudio dann klicken Sie auf “Find Numberic ID”.

    Voila, du hast jetzt deine numerische ID fb. Ersetzen Sie “your_fb_page_id” durch die generierte numerische ID

      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) 

    Ich habe eine Methode erstellt, um Facebook-Seite in Facebook-App zu öffnen, wenn App nicht vorhanden ist und dann in Chrome geöffnet wird

      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 fügt diese Methode hinzu

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

    und das

      /*** * 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; } } 
     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))); } 

    Sie können die Facebook App auf Knopfdruck wie folgt öffnen: –

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