Apri la pagina Facebook dall'app Android?


157

dalla mia app Android, vorrei aprire un collegamento a un profilo Facebook nell'app Facebook ufficiale (se l'app è installata, ovviamente). Per iPhone esiste lo fb://schema URL, ma provare la stessa cosa sul mio dispositivo Android genera un ActivityNotFoundException.

Esiste la possibilità di aprire un profilo Facebook nell'app Facebook ufficiale dal codice?


2
C'è un thread che non ha una risposta sui forum di sviluppo di Facebook: forum.developers.facebook.net/viewtopic.php?pid=255227 (aggiungendolo qui perché mostra che non c'è una risposta ovvia, e forse otterrà rispose lì un giorno ...)
James Moore il

puoi vedere la mia risposta da qui .
Mohammad Sommakia,

Risposte:


152

Nella versione 11.0.0.11.23 di Facebook (3002850) fb://profile/e fb://page/non funziona più. Ho decompilato l'app di Facebook e ho scoperto che è possibile utilizzare fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]. Ecco il metodo che ho usato in produzione:

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

4
@DjHacktorReborn non dovresti più usare gli ID. Usa semplicemente il link normale.
Jared Rummler,

2
@DjHacktorReborn Ho appena controllato, lavorando qui. Su Facebook versione 13.0.0.13.14
Jared Rummler,

1
@AbdulWasae Ha funzionato in app con milioni di download. Se hai una soluzione migliore, pubblicala invece di effettuare il downgrade di una soluzione funzionante.
Jared Rummler,

4
qualcuno può confermare che funziona ancora? (a giugno 2019). Ricevo ancoraActivityNotFoundException
nVxx il

5
Questo apre la pagina Facebook ma a differenza delle normali pagine fb, non vediamo il pulsante Mi piace, il profilo e le foto di copertina, ecc. Apre direttamente le informazioni di contatto e visualizza tutti i post dalla pagina.
Neeraj Dwivedi,

235

Funziona con l'ultima versione:

  1. Vai su https://graph.facebook.com/ < user_name_here > ( https://graph.facebook.com/fsintents per esempio)
  2. Copia il tuo ID
  3. Usa questo metodo:

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

Questo aprirà l'app di Facebook se l'utente l'ha installata. Altrimenti, aprirà Facebook nel browser.

EDIT: dalla versione 11.0.0.11.23 (3002850) l'app di Facebook non supporta più in questo modo, c'è un altro modo, controlla la risposta qui sotto da Jared Rummler.


1
Grazie per questo, mi ha aiutato molto! Ora, se solo ci fosse un modo per farlo per Twitter
Evan R.,

3
Per un elenco degli schemi di URL disponibili su iOS, consultare wiki.akosma.com/IPhone_URL_Schemes - alcuni di essi dovrebbero funzionare anche su Android
Francesco

7
ed ecco la risposta di quel problema; usare "pagina" invece di profilo - stackoverflow.com/a/15872383/1433187
Khobaib

1
Solo per notare che fb: // profilo / NON è supportato sull'app di Facebook v1.3.2 che è inclusa nello stock Nexus One 2.3.6
Segna

3
DjHacktorReborn ha ragione, né fb: // profile / <fpid> né fb: // page / <fpid> stanno funzionando più a partire da fb v11
sam

38

Non è più facile? Ad esempio all'interno di 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. Ottieni il tuo ID (il numero grande) da http://graph.facebook.com/[userName]


Sono d'accordo, questo è meglio perché non fa ipotesi sul nome del pacchetto dell'app di Facebook o sui filtri di intenti. Tuttavia, è peggio per lo stesso motivo perché altre app potrebbero anche specificare filtri intenti corrispondenti. Dipende da quello che vuoi. Forse aggiungi intent.setPackageName ("com.facebook.katana") per assicurarti che non vengano chiamate altre app.
Segna il

Ma apre il browser e vengono mostrati i dati di Facebook, come è possibile utilizzare l'app di Facebook (per chiamare l'app di Facebook)?
Mikheil Zhghenti,

32

Per la pagina 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));
}

Per il profilo 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));
}

... perché nessuna delle risposte indica la differenza

Entrambi testati con Facebook v.27.0.0.24.15 e Android 5.0.1 su Nexus 4


ciao, come sapere la differenza tra profilo e pagina?
alvarodoune,

1
Il profilo è per un privato, dove una pagina è per aziende, luoghi, marchi. Vedi: facebook.com/help/217671661585622 [Titolo: In che modo le Pagine differiscono dai profili personali?]
Murmel

per le note: intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
voodoo98,

1
Per trovare l'ID per la pagina pubblica, l'evento, il profilo è possibile utilizzare FindMyFbId
Carlos Zerga,

Il profilo non si apre nell'app Facebook.
Hammad Nasir,

27

Ecco come farlo nel 2016, funziona benissimo ed è molto semplice.

L'ho scoperto dopo aver esaminato come le e-mail inviate da Facebook hanno aperto l'app.

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

1
Funziona perfettamente, anche nel 2016. Risolve anche un problema quando si naviga su Facebook dal Belgio (quando i cookie sono disabilitati quando non si accede).
doubotis,

3
Quando lo uso, l'intestazione della pagina Facebook a cui mi riferisco manca nell'app Facebook, ad esempio l'immagine del profilo della pagina e le schede Pagina / Attività / Approfondimenti.
Daniel Persson,

Funziona se hai il nome della pagina (come indicato) ma non se hai l'ID numerico della pagina.
Eric B.

5
Ok, ma non mi porta a una pagina pulita in cui l'utente può facilmente fare un mi piace alla mia pagina .... Sto ancora cercando questo! Qualche soluzione?
Regis_AG,

qualcuno deve soluzione per @Regis_AG?
Adrianvintu,

22

questo è il codice più semplice per farlo

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

Questo non funziona. quando sto impostando il link " facebook.com/pages/"+pageid "
BSKANIA

Ometti le 'pagine /' - parte -> usa "facebook.com/" + pageId
Murmel

funziona ancora come oggi! grazie mille ho cambiato questa parte "" facebook.com/pages/"+pageid ; " con questo "" facebook.com/"+pageid ; "
naitbrahim

@naitbrahim Grazie per averci fatto sapere che funziona ancora! Ho modificato la risposta. tra l'altro, la risposta è stata pubblicata nel 2013 :) Felice che ti abbia aiutato
MBH

15

Un approccio più riutilizzabile.

Questa è una funzionalità che generalmente utilizziamo nella maggior parte delle nostre app. Quindi qui è un pezzo di codice riutilizzabile per raggiungere questo obiettivo.

(Simile ad altre risposte in termini di fatti. Pubblicarlo qui solo per semplificare e rendere riutilizzabile l'implementazione)

"fb://page/non funziona con le versioni più recenti dell'app FB. È necessario utilizzare fb://facewebmodal/f?href=per le versioni più recenti. ( Come menzionato in un'altra risposta qui )

Questo è un codice di lavoro completo attualmente attivo in una delle mie app:

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

Questo metodo restituirà l'URL corretto per l'app se installata o l'URL Web se l'app non è installata.

Quindi avviare un intento come segue:

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

Questo è tutto ciò di cui hai bisogno.


Ha generato "android.content.ActivityNotFoundException: nessuna attività trovata per gestire l'intento {act = android.intent.action.VIEW dat = fb: // page / ####}"
Rajbir Shienh

9

Questo è stato decodificato da Pierre87 sul forum di FrAndroid , ma non riesco a trovare alcun funzionario che lo descriva, quindi deve essere trattato come non documentato e rischia di smettere di funzionare in qualsiasi momento:

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

Sì, la soluzione ha smesso di funzionare. L'errore è: "java.lang.SecurityException ?: Negazione autorizzazione: intento di partenza {flg = 0x10080000 cmp = com.facebook.katana / .ProfileTabHostActivity? (Ha extra)} da ProcessRecord?". Activity ProfileTabHostActivity non ha android: flag esportato in AndroidManifest, quindi per impostazione predefinita android: exported = "false" per questa attività. Di conseguenza ProfileTabHostActivity non può essere avviato da altre applicazioni. L'unica speranza che gli sviluppatori di FB risolvano questo problema nelle versioni delle funzionalità dell'applicazione FB.
dvpublic

penso che la correzione sia stata quella di chiudere questa "API accidentale".
Vaiden,

7

prova questo codice:

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

7

Per fare ciò abbiamo bisogno dell '"ID pagina Facebook", puoi ottenerlo:

  • dalla pagina vai a "Informazioni".
  • vai alla sezione "Ulteriori informazioni".

presenta la descrizione dell'imagen aquí

Per aprire l'app di Facebook nella pagina del profilo specificato,

Puoi farlo:

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

Oppure puoi convalidare quando l'app di Facebook non è installata, quindi aprire la pagina web di 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)));
        }

Non l'ho visto Page IDdalla scheda Informazioni. È privato?
RoCk RoCk

5

Dopo molti test ho trovato una delle soluzioni più efficaci:

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

4

La mia risposta si basa sulla risposta ampiamente accettata da joaomgcd. Se l'utente ha Facebook installato ma disabilitato (ad esempio utilizzando App Quarantine), questo metodo non funzionerà. L'intenzione per l'app di Twitter verrà selezionata ma non sarà in grado di elaborarla poiché è disabilitata.

Invece di:

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

È possibile utilizzare quanto segue per decidere cosa fare:

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

4

La migliore risposta che ho trovato, funziona alla grande.

Vai alla tua pagina su Facebook nel browser, fai clic con il pulsante destro del mouse e fai clic su "Visualizza codice sorgente", quindi trova l' page_idattributo: devi utilizzare page_idqui in questa riga dopo l'ultima barra rovesciata:

fb://page/pageID

Per esempio:

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

Questo ha senso solo per le app statiche.
Irshu,

4

A partire da marzo 2020 funziona perfettamente.

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

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

2

A partire da luglio 2018 funziona perfettamente con o senza l'app di Facebook su tutti i dispositivi.

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

L'app FB Lite ha un nome pacchetto separato, se lo usi in questo modo, dovresti anche controllare com.facebook.lite - anche se non ho verificato se Lite gestirà questi URL
androidguy

@androidguy Non ho FB Lite. Sarebbe bene sapere se il codice funziona con esso. Se potessi testarlo in qualche modo e mettere qui i tuoi risultati, ciò aiuterebbe gli altri che vengono ancora qui. Apprezzato, grazie
Immy

@Immy -> Yourpage-1548219792xxxxxx nell'URL è l'ID della pagina o l'URL della pagina. Quindi, ad esempio: facebook.com/PageName è l'URL della mia pagina e l'id è simile a 2345676. Quindi l'URL da menzionare nel codice sarà facebook.com/PageName o qualcos'altro?
Neeraj Dwivedi,

@NeerajDwivedi Hai bisogno di entrambi: il nome e l'ID della pagina nell'URL. Qualcosa del genere: 'String FACEBOOK_URL = " facebook.com/BeanRoaster-1548219792112345/" ;'
Immy,

@Immy ho usato lo stesso identico codice sostituendo FACEBOOK_URL a " facebook.com/myPageName-myPageID " e sto ottenendo una pagina vuota con la barra di ricerca in alto. Sto usando l'ultima app di Facebook su Android 9 (versione dell'app Fb - 237.0.0.44.120)
Neeraj Dwivedi

1

Ho creato un metodo per aprire la pagina di Facebook nell'app di Facebook, se l'app non esiste quindi si apre in 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 aggiunge questo metodo

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

e questo

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

3
Nell'ultima versione, questo in realtà mi sta portando alla pagina about mentre sto cercando di navigare alla home page. Qualche consiglio ?
Balaji Katika,

Hai trovato la soluzione ??
Aman Verma,

1

Per avviare la pagina Facebook dalla tua app, lascia urlString = "fb: // page / your_fb_page_id"

Per avviare facebook messenger, lascia che urlString = "fb-messenger: // user / your_fb_page_id"

L'ID della pagina FB è generalmente numerico. Per ottenerlo, vai a Trova il mio ID FB inserisci l'URL del tuo profilo, qualcosa come www.facebook.com/edgedevstudio, quindi fai clic su "Trova ID numerico".

Voilà, ora hai il tuo ID numerico fb. sostituire "your_fb_page_id" con l'ID numerico generato

 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)

1

Dichiarare costanti

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

Dichiara Metodo

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

Funzione di chiamata

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

0

Rispondere a questo nell'ottobre 2018. Il codice di lavoro è quello che utilizza pageID. L'ho appena testato ed è funzionale.

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

0

Ho implementato in questo modulo in webview usando 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;
                }

});

e al di fuori di 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;
    }

0

apri l'evento fb on button click senza usare 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( );
    }

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

0

1-per ottenere il tuo id vai al tuo profilo immagine e fai clic con il pulsante destro del mouse e prendi l'indirizzo del link di copia.

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

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

-2

Puoi aprire l'app di Facebook facendo clic sul pulsante come segue: -

@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);
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.