Facebook-Seite über Android-App öffnen?

157

Über meine Android-App möchte ich einen Link zu einem Facebook-Profil in der offiziellen Facebook-App öffnen (sofern die App installiert ist, natürlich). Für das iPhone gibt es das fb://URL-Schema, aber wenn ich dasselbe auf meinem Android-Gerät versuche, wird ein ActivityNotFoundException.

Gibt es eine Möglichkeit, ein Facebook-Profil in der offiziellen Facebook-App aus Code zu öffnen?

Björn Marschollek
quelle
2
Es gibt einen Thread, der in den Facebook-Entwicklerforen keine Antwort hat: forum.developers.facebook.net/viewtopic.php?pid=255227 (hier hinzufügen, weil er zeigt, dass es keine offensichtliche Antwort gibt, und vielleicht wird er es bekommen antwortete dort eines Tages ...)
James Moore
Sie können meine Antwort von hier sehen .
Mohammad Sommakia

Antworten:

152

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

/**
 * <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
quelle
4
@DjHacktorReborn sollten Sie die IDs nicht mehr verwenden. Verwenden Sie einfach den normalen Link.
Jared Rummler
2
@DjHacktorReborn Gerade überprüft, hier arbeiten. Auf Facebook Version 13.0.0.13.14
Jared Rummler
1
@AbdulWasae Es hat in Apps mit Millionen von Downloads funktioniert. Wenn Sie eine bessere Lösung haben, veröffentlichen Sie diese bitte, anstatt eine funktionierende Lösung herunterzustimmen.
Jared Rummler
4
kann jemand bestätigen, dass dies noch funktioniert? (Stand Juni 2019). Ich bekomme immer nochActivityNotFoundException
nVxx
5
Dadurch wird die Facebook-Seite geöffnet, aber im Gegensatz zu normalen FB-Seiten werden die Schaltfläche "Gefällt mir", Profil- und Titelbilder usw. nicht angezeigt. Es werden direkt die Kontaktinformationen geöffnet und alle Beiträge auf der Seite angezeigt.
Neeraj Dwivedi
235

Dies funktioniert mit der neuesten Version:

  1. Gehen Sie zu https://graph.facebook.com/ < user_name_here > ( zum Beispiel https://graph.facebook.com/fsintents ).
  2. Kopieren Sie Ihre 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/<id_here>"));
       } catch (Exception e) {
        return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/<user_name_here>"));
       }
    }

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

BEARBEITEN: Da die Facebook-App in Version 11.0.0.11.23 (3002850) diese Methode nicht mehr unterstützt, gibt es eine andere Möglichkeit. Überprüfen Sie die Antwort von Jared Rummler.

joaomgcd
quelle
1
Danke dafür, hat mir sehr geholfen! Wenn es nur eine Möglichkeit gäbe, dies für Twitter zu tun
Evan R.
3
Eine Liste der unter iOS verfügbaren URL-Schemata finden Sie unter wiki.akosma.com/IPhone_URL_Schemes - einige davon sollten auch unter Android funktionieren
FrancescoR
7
& hier ist die Antwort auf dieses Problem; Verwenden Sie "Seite" anstelle von Profil - stackoverflow.com/a/15872383/1433187
Khobaib
1
Nur um zu beachten, dass fb: // profile / NICHT von der Facebook-App v1.3.2 unterstützt wird, die auf Lager ist. Nexus One 2.3.6
Mark
3
DjHacktorReborn hat recht, weder fb: // profile / <fpid> noch fb: // page / <fpid> funktionieren mehr ab fb v11
sam
38

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

John
quelle
Ich stimme zu, dies ist besser, da keine Annahmen über den Namen des Facebook-App-Pakets oder die Absichtsfilter getroffen werden. Aus dem gleichen Grund ist es jedoch schlimmer, da andere Apps möglicherweise auch Filter für übereinstimmende Absichten angeben. Es kommt darauf an, was Sie wollen. Fügen Sie möglicherweise hinzu, dass Sie intent.setPackageName ("com.facebook.katana") ausführen, um sicherzustellen, dass keine anderen Apps aufgerufen werden.
Mark
Aber es öffnet sich der Browser und es werden Facebook-Daten angezeigt, wie ist es möglich, die Facebook-App zu nutzen (um die Facebook-App aufzurufen)?
Mikheil Zhghenti
32

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

Murmel
quelle
Hallo, woher weiß man den Unterschied zwischen Profil und Seite?
Alvarodoune
1
Das Profil ist für eine Privatperson bestimmt, wobei eine Seite für Unternehmen, Orte und Marken bestimmt ist. Siehe: facebook.com/help/217671661585622 [Titel: Wie unterscheiden sich Seiten von persönlichen Profilen?]
Murmel
für Notizen: intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
Voodoo98
1
Um die ID für eine öffentliche Seite, ein Ereignis oder ein Profil zu finden, können Sie FindMyFbId verwenden
Carlos Zerga vom
Das Profil wird in der Facebook-App nicht geöffnet.
Hammad Nasir
27

Hier ist der Weg, dies 2016 zu tun, funktioniert großartig und ist sehr einfach.

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

// 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
quelle
1
Funktioniert auch 2016 einwandfrei. Behebt auch ein Problem, wenn Sie von Belgien aus auf Facebook surfen (wenn Cookies deaktiviert sind, wenn Sie nicht angemeldet sind).
Doubotis
3
Wenn ich dies verwende, fehlt in der Facebook-App die Kopfzeile der Facebook-Seite, auf die ich verweise, z. B. das Seitenprofilbild und die Registerkarten Seite / Aktivität / Einblicke.
Daniel Persson
Dies funktioniert, wenn Sie den Seitennamen (wie angegeben) haben, aber nicht, wenn Sie die numerische Seiten-ID haben.
Eric B.
5
Ok, bringt mich aber nicht zu einer sauberen Seite, auf der der Benutzer meine Seite leicht mögen kann .... Ich suche immer noch danach! Irgendeine Lösung ?
Regis_AG
Hat jemand eine Lösung für @Regis_AG?
Adrianvintu
22

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<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
quelle
das funktioniert nicht. wenn ich den Link " facebook.com/pages/"+pageid "
BSKANIA
Lassen Sie den 'pages /' - Teil weg
Murmel
arbeitet immer noch wie heute! Vielen Dank, ich habe diesen Teil geändert. "" facebook.com/pages/"+pageid ; " mit diesem "" facebook.com/"+pageid ; "
Naitbrahim
@naitbrahim Danke, dass du uns mitgeteilt hast, dass es immer noch funktioniert! Ich habe die Antwort bearbeitet. Übrigens, die Antwort wurde 2013 veröffentlicht :) Glücklich, dass es dir geholfen hat
MBH
15

Ein wiederverwendbarerer Ansatz.

Dies ist eine Funktionalität, die wir normalerweise in den meisten unserer Apps verwenden. Daher ist hier ein wiederverwendbarer Code, um dies zu erreichen.

(Ähnlich wie bei anderen Antworten in Bezug auf Fakten. Hier veröffentlichen, 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 vollwertiger Arbeitscode, der derzeit in einer meiner Apps verfügbar ist:

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 richtige URL für die App zurück, wenn sie installiert ist, oder die Web-URL, wenn die App nicht installiert ist.

Starten Sie dann 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.

AndroidMechanic - Virales Patel
quelle
Es warf "android.content.ActivityNotFoundException: Keine Aktivität gefunden, um Intent zu handhaben {act = android.intent.action.VIEW dat = fb: // page / ####}"
Rajbir Shienh
9

Dies wurde von Pierre87 im FrAndroid-Forum rückentwickelt , aber ich kann keinen offiziellen Vertreter finden, der es beschreibt. Daher muss es als undokumentiert behandelt werden und kann jederzeit aufhören 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);
Jon Colverson
quelle
Ja, die Lösung funktioniert nicht mehr. Der Fehler lautet: "java.lang.SecurityException?: Berechtigungsverweigerung: Startabsicht {flg = 0x10080000 cmp = com.facebook.katana / .ProfileTabHostActivity? (Hat Extras)} von ProcessRecord?". AktivitätsprofilTabHostActivity hat in AndroidManifest kein android: exported-Flag, daher standardmäßig android: exported = "false" für diese Aktivität. Infolgedessen kann ProfileTabHostActivity nicht von anderen Anwendungen gestartet werden. Die einzige Hoffnung, dass FB-Entwickler dieses Problem in Feature-Versionen der FB-Anwendung beheben.
dvpublic
Ich denke, das Update war, diese "versehentliche API" zu schließen.
Vaiden
7

Versuchen Sie diesen 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
quelle
7

Dazu benötigen wir die "Facebook-Seiten-ID", die Sie erhalten können:

  • Gehen Sie von der Seite zu "Info".
  • Gehen Sie zum Abschnitt "Weitere Informationen".

Einführung in die Beschreibung des Imagens aquí

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

du kannst das:

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

Oder Sie können überprüfen, ob die Facebook-App nicht installiert ist, und dann die Facebook-Webseite öffnen.

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
quelle
Ich habe dies Page IDauf der Registerkarte "Über" nicht gesehen. Es ist privat?
RoCk RoCk
5

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));
    }
}
Javier Amor Penas
quelle
4

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

Anstatt:

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"));
igordc
quelle
4

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

Gehen Sie einfach im Browser auf Ihre Facebook-Seite, klicken Sie mit der rechten Maustaste und klicken Sie auf "Quellcode anzeigen". Suchen page_idSie dann das Attribut: Sie müssen es page_idhier 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);
}
Shahid Ahmad
quelle
Dies ist nur für statische Apps sinnvoll.
Irshu
4

Ab März 2020 funktioniert dies einwandfrei.

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
quelle
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);
Tiger Entwickler
quelle
2

Ab Juli 2018 funktioniert dies perfekt mit oder ohne die 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;
}
Im mein
quelle
FB Lite App hat einen separaten Paketnamen. Wenn Sie diese Methode verwenden, sollten Sie auch com.facebook.lite überprüfen - obwohl ich nicht überprüft habe, ob Lite diese URL verarbeiten wird
androidguy
@androidguy Ich habe kein FB Lite. Es wäre gut zu wissen, ob der Code damit funktioniert. Wenn Sie es irgendwie testen und Ihre Ergebnisse hierher bringen könnten, würde das anderen helfen, die noch hierher kommen. Geschätzt, danke
Immy
@Immy -> Yourpage-1548219792xxxxxx in der URL ist die Seiten-ID oder Seiten-URL. Zum Beispiel: facebook.com/PageName ist meine Seiten-URL und die ID ist ungefähr 2345676. Die im Code zu erwähnende URL lautet also facebook.com/PageName oder etwas anderes?
Neeraj Dwivedi
@NeerajDwivedi Sie benötigen beide: Ihren Seitennamen und Ihre Seiten-ID in der URL. Etwa so: 'String FACEBOOK_URL = " facebook.com/BeanRoaster-1548219792112345/" ;'
Immy
@Immy Ich habe genau den gleichen Code verwendet, der die FACEBOOK_URL durch " facebook.com/myPageName-myPageID " ersetzt, und ich erhalte eine leere Seite mit der Suchleiste oben. Ich benutze die neueste Facebook-App auf Android 9 (Fb-App-Version - 237.0.0.44.120)
Neeraj Dwivedi
1

Ich habe eine Methode zum Öffnen der Facebook-Seite in der Facebook-App erstellt. Wenn die App nicht vorhanden ist, wird sie in Chrome geöffnet

    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;
    }
}
Abdul Rizwan
quelle
3
In der neuesten Version führt mich dies tatsächlich zur Info-Seite, während ich zur Startseite navigieren möchte. Irgendwelche Tipps ?
Balaji Katika
Haben Sie die Lösung gefunden?
Aman Verma
1

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

Um den Facebook Messenger zu starten, lassen Sie urlString = "fb-messenger: // user / your_fb_page_id"

Die FB-Seiten-ID ist normalerweise numerisch. Um es zu bekommen, gehen Sie zu Find My FB ID und geben Sie Ihre Profil-URL ein, etwa www.facebook.com/edgedevstudio suchen und klicken Sie dann auf "Nummer suchen".

Voila, du hast jetzt deine fb numerische ID. 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)
EdgeDev
quelle
1

Konstanten deklarieren

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

Methode deklarieren

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

Funktion aufrufen

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

Beantwortung dieser Frage im Oktober 2018. Der Arbeitscode verwendet die pageID. Ich habe es gerade getestet und es ist funktionsfähig.

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
quelle
0

Ich habe in diesem Formular in der Webansicht mit fragment-inside oncreate implementiert:

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

});

und außerhalb von 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
quelle
0

Öffnen Sie das Ereignis fb on button click, ohne Facebook SDK zu verwenden

 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
quelle
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
quelle
0

1-um Ihre ID zu erhalten, gehen Sie zu Ihrem Bildprofil und klicken Sie mit der rechten Maustaste und nehmen Sie die Linkadresse zum Kopieren.

        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
quelle
-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
quelle
-2

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);
    }
}
Deepak Sharma
quelle