Apri la pagina Facebook dall'app per Android?




url-scheme (12)

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

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

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


Ecco come farlo nel 2016, funziona alla grande 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);

La mia risposta si basa sulla risposta ampiamente accettata da joaomgcd. Se l'utente ha installato Facebook ma disabilitato (ad esempio utilizzando App Quarantine), questo metodo non funzionerà. L'intento per l'app di Twitter sarà selezionato ma non sarà in grado di elaborarlo in quanto disabilitato.

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

Nella versione di Facebook 11.0.0.11.23 (3002850) fb://profile/ e fb://page/ non funziona più. Ho decompilato l'app di Facebook e ho scoperto che puoi usare 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://.com/a/24547437/1048340
      uri = Uri.parse("fb://facewebmodal/f?href=" + url);
    }
  } catch (PackageManager.NameNotFoundException ignored) {
  }
  return new Intent(Intent.ACTION_VIEW, uri);
}

Per fare questo abbiamo bisogno del "Facebook id della pagina", puoi ottenerlo:

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

Per aprire l'app di Facebook sulla pagina del profilo specificata,

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

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


Questo è stato decodificato da Pierre87 sul forum FrAndroid , ma non riesco a trovare nessun funzionario che lo descriva, quindi deve essere trattato come non documentato e soggetto a 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);

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

"fb://page/ non funziona con le versioni più recenti dell'app FB. Dovresti usare fb://facewebmodal/f?href= per le versioni più recenti.

Questo è un codice funzionante completo:

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

La migliore risposta che ho trovato, sta funzionando 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 cerca l'attributo page_id : devi utilizzare page_id qui in questa riga dopo l'ultimo back-slash:

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

Un approccio più riutilizzabile.

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

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

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

Questo è un codice funzionante completo attualmente disponibile 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 installato 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.


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




url-scheme