Deschide Facebook pagina de app Android?

de la meu app Android, aș dori pentru a deschide link-ul de la un Facebook de profil în monitorul oficial Facebook app (dacă aplicația este instalată, desigur). Pentru iPhone, există fb://sistem URL-ul, dar încearcă același lucru pe dispozitivul meu Android aruncă oActivityNotFoundException`.

Există o șansă de a deschide Facebook profil în monitorul oficial Facebook app de cod?

Comentarii la întrebare (2)

Aceasta funcționează pe cea mai recentă versiune:

  1. Du-te la https://graph.facebook.com/<user_name_here> (https://graph.facebook.com/fsintents de exemplu)
  2. Copia id-ul tau
  3. Utilizați această metodă:

public static Intenția getOpenFacebookIntent(Context Context) {

try { context.getPackageManager().getPackageInfo("com.facebook.katana", 0); să se întoarcă de noi Intenția(Intenție.ACTION_VIEW, Uri.analiza("fb://page/")); } catch (exception e) { să se întoarcă de noi Intenția(Intenție.ACTION_VIEW, Uri.analiza("https://www.facebook.com/")); } }

Aceasta va deschide Facebook app în cazul în care utilizatorul a instalat. În caz contrar, se va deschide Facebook în browser-ul.

EDIT: începând cu versiunea 11.0.0.11.23 (3002850) Facebook App nu acceptă acest mod, nu's un alt mod, bifați răspunsul de mai jos de la Jared Rummler.

Comentarii (20)
Soluția

În Facebook versiune 11.0.0.11.23 (3002850) fb://profilul/ " și " fb://page/ să nu mai funcționeze. Am decompilat de Facebook app și a constatat că puteți folosi fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]`. Aici este metoda am folosit în producție:

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

Nu este acest lucru mai ușor? De exemplu, în 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. Ia id-ul dvs. (în număr mare) de la http://graph.facebook.com/[nume de utilizator]

Comentarii (2)

Pentru Facebook page:

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

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

...pentru că nici unul dintre răspunsurile de puncte diferenta

Ambele testate cu Facebook v. 27.0.0.24.15 și Android 5.0.1 pe Nexus 4

Comentarii (6)

Aici's pe cale să-l facă în 2016, mare de lucrări, și este foarte ușor.

Am descoperit acest lucru după ce se uită în modul e-mailuri trimise prin facebook deschis aplicația.

// 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);
Comentarii (8)

acesta este cel mai simplu cod pentru a face acest lucru

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);
    }
Comentarii (2)

O mai reutilizabile abordare.

Aceasta este o funcționalitate vom folosi, în general, în cele mai multe dintre aplicații noastre. Prin urmare, aici este o reutilizabile bucată de cod pentru a realiza acest lucru.

(Similar cu alte răspunsuri în termeni de fapte. Postează aici doar pentru a simplifica și de a face punerea în aplicare reutilizabile)

"fb://page/ nu funcționează cu versiuni mai noi a aplicației FB. Ar trebui să utilizați fb://facewebmodal/f?href=` pentru versiunile mai noi. (Cum a menționat într-un alt răspuns aici)

Aceasta este o cu drepturi depline de lucru cod trăiesc în prezent într-una dintre aplicațiile mele:

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

Această metodă se va întoarce url-ul corect pentru aplicația dacă este instalat sau url-ul web dacă aplicația nu este instalată.

Apoi începe o intenție, după cum urmează:

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

Ca's tot ce ai nevoie.

Comentarii (1)

"fb://page/ nu funcționează cu versiuni mai noi a aplicației FB. Ar trebui să utilizați fb://facewebmodal/f?href=` pentru versiunile mai noi.

Aceasta este o cu drepturi depline de lucru cod:

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

Această metodă se va întoarce url-ul corect pentru aplicația dacă este instalat sau url-ul web dacă aplicația nu este instalată.

Apoi începe o intenție, după cum urmează:

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

Aceasta a fost inginerie inversă, de Pierre87 pe FrAndroid forum, dar nu pot't găsi oriunde în altă oficial care descrie, așa că's trebuie să fie tratate ca acte de natură a opri de lucru în orice 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);
Comentarii (3)

incearca codul asta:

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)));
        }
Comentarii (0)

Pentru a face acest lucru avem nevoie de "Facebook pagina id-ul", puteți să-l obține :

  • de la pagina du-te la "Despre".
  • du-te la "Mai multe Informatii" secțiune.

Pentru deschiderea facebook app specificate pe pagina de profil,

puteți face acest lucru:

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

Sau puteți valida atunci când facebook app nu este instalat, apoi deschideți facebook pagina web.

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)));
        }
Comentarii (1)

După multe teste, am găsit una dintre cele mai eficiente solutii:

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));
    }
}
Comentarii (0)

Cel mai bun răspuns l-am găsit, l's mare lucru.

Doar du-te la pagina dvs. de pe Facebook în browser-ul, faceți clic dreapta și faceți clic pe "Vezi codul sursă", apoi găsi page_id atribut: trebuie să utilizați `page_id aici, în această linie, după ultimul back-slash:

fb://page/pageID

De exemplu:

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);
}
Comentarii (1)

Răspunsul meu se bazează pe partea de sus a acceptat pe scară largă răspuns de la joaomgcd. Dacă utilizatorul are Facebook instalat, dar cu dizabilități (de exemplu, prin utilizarea App Carantină), această metodă nu va funcționa. Intenția de Twitter app va fi selectat, dar acesta nu va fi capabil de a procesa ca este dezactivat.

În loc de:

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

Puteți utiliza următoarele pentru a decide ce să facă:

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"));
Comentarii (0)
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);
Comentarii (0)

Ca de iulie 2018 aceasta funcționează perfect cu sau fără Facebook app pe toate dispozitivele.

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;
}
Comentarii (6)

Am creat o metodă pentru a deschide facebook, pagina în facebook app, dacă aplicația nu este deja existente atunci se deschid în 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 adăugați aceste metode

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

și asta

 /***
 * 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;
    }
}
Comentarii (3)
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)))
    }
}
Comentarii (0)

Declara constante

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

Declara Metoda

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

Funcția De Apel

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

Pentru a lansa facebook page din aplicația, să urlString = "fb://page/your_fb_page_id"

Pentru a lansa facebook messenger să urlString = "fb-messenger:/user/your_fb_page_id"

FB cu id-ul paginii este de obicei numerică. Pentru a obține aceasta, goto - Mi Găsesc FB ID intrare url-ul profilului tău, ceva de genul www.facebook.com/edgedevstudio apoi faceți clic pe "Găsi Numerice ID".

Voila, acum ai fb-id numeric. înlocuiți "your_fb_page_id" cu generate ID Numeric

 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)
Comentarii (0)