Buka Facebook page dari aplikasi Android?

dari Android app, saya ingin membuka sebuah link ke Facebook profil resmi Facebook app (jika aplikasi diinstal, tentu saja). Untuk iPhone, ada fb:// skema URL, tapi mencoba hal yang sama pada perangkat Android saya melempar ActivityNotFoundException.

Apakah ada kesempatan untuk membuka Facebook profil resmi Facebook app code?

Mengomentari pertanyaan (2)

Ini bekerja pada versi terbaru:

  1. Pergi ke https://graph.facebook.com/<user_name_here> (https://graph.facebook.com/fsintents untuk contoh)
  2. Copy id anda
  3. Menggunakan metode ini:

public static Maksud getOpenFacebookIntent(Context context) {

try { konteks.getPackageManager().getPackageInfo("com.facebook.katana", 0); kembali new Intent(Intent.ACTION_VIEW, Uri.mengurai("fb://halaman/")); } catch (Exception e) { kembali new Intent(Intent.ACTION_VIEW, Uri.mengurai("https://www.facebook.com/")); } }

Ini akan membuka Facebook aplikasi jika pengguna telah diinstal. Jika tidak, itu akan membuka Facebook di browser.

EDIT: sejak versi 11.0.0.11.23 (3002850) Facebook Aplikasi tidak support dengan cara ini lagi, ada's cara lain, memeriksa respon di bawah ini dari Jared Rummler.

Komentar (20)
Larutan

Di Facebook versi 11.0.0.11.23 (3002850) fb://profil/ dan fb://halaman/ tidak lagi bekerja. Saya decompiled dengan Facebook app dan menemukan bahwa anda dapat menggunakan fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]. Berikut ini adalah metode yang saya telah menggunakan dalam produksi:

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

Ini tidak mudah? Misalnya dalam 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. Dapatkan id anda (jumlah besar) dari http://graph.facebook.com/[userName]

Komentar (2)

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

Untuk Facebook profile:

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

...karena tidak ada jawaban yang menunjukkan perbedaan

Kedua diuji dengan Facebook v. 27.0.0.24.15 dan Android 5.0.1 pada Nexus 4

Komentar (6)

Berikut ini's cara untuk melakukannya pada tahun 2016, karya besar, dan sangat mudah.

Saya menemukan ini setelah melihat ke dalam bagaimana email yang dikirim oleh facebook membuka aplikasi.

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

ini adalah kode sederhana untuk melakukan hal ini

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

Lebih pendekatan yang dapat digunakan kembali.

Ini adalah fungsi umum yang kita gunakan di sebagian besar aplikasi kita. Oleh karena itu berikut ini adalah reusable potongan kode untuk mencapai hal ini.

(Mirip dengan jawaban yang lain dalam hal untuk fakta-fakta. Posting disini hanya untuk menyederhanakan dan membuat implementasi yang dapat digunakan kembali)

"fb://halaman/ tidak bekerja dengan versi yang lebih baru dari aplikasi FB. Anda harus menggunakan fb://facewebmodal/f?href= untuk versi yang lebih baru. (Seperti yang disebutkan dalam jawaban lain berikut)

Ini adalah penuh kerja kode saat ini tinggal di salah satu aplikasi saya:

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

Metode ini akan mengembalikan url yang benar untuk aplikasi jika dipasang di web atau url jika aplikasi tidak diinstal.

Kemudian mulai maksud sebagai berikut:

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

Yang's semua yang anda butuhkan.

Komentar (1)

"fb://halaman/ tidak bekerja dengan versi yang lebih baru dari aplikasi FB. Anda harus menggunakan fb://facewebmodal/f?href= untuk versi yang lebih baru.

Ini adalah penuh kerja kode:

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

Metode ini akan mengembalikan url yang benar untuk aplikasi jika dipasang di web atau url jika aplikasi tidak diinstal.

Kemudian mulai maksud sebagai berikut:

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

Ini telah reverse-engineered by Pierre87 di forum FrAndroid, tapi aku bisa't menemukan tempat resmi yang menjelaskan hal itu, jadi itu's telah diperlakukan sebagai tidak berdokumen dan bertanggung jawab untuk berhenti bekerja setiap saat:

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);
Komentar (3)

coba kode ini:

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

Untuk melakukan hal ini kita perlu "Facebook page id", anda bisa mendapatkannya :

  • dari halaman pergi ke "Tentang".
  • pergi ke "Info" bagian.

Untuk membuka facebook app ditentukan pada halaman profil,

anda dapat melakukan ini:

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

Atau anda dapat memvalidasi ketika facebook app tidak diinstal, kemudian buka facebook halaman 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)));
        }
Komentar (1)

Setelah banyak pengujian saya telah menemukan salah satu solusi yang paling efektif:

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

Jawaban terbaik yang saya telah menemukan, it's bekerja besar.

Hanya pergi ke halaman anda di Facebook pada browser, klik kanan, dan klik pada "View source code", kemudian menemukan page_id atribut: anda harus menggunakan page_id di sini di baris ini setelah terakhir back-slash:

fb://page/pageID

Misalnya:

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

Jawaban saya dibangun di atas luas-jawaban yang diterima dari joaomgcd. Jika pengguna Facebook yang diinstal tapi dinonaktifkan (misalnya dengan menggunakan Aplikasi Karantina), metode ini tidak akan bekerja. Maksud untuk aplikasi Twitter akan dipilih tapi itu tidak akan mampu untuk proses seperti itu dinonaktifkan.

Bukannya:

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

Anda dapat menggunakan berikut untuk memutuskan apa yang harus dilakukan:

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

Sebagai juli 2018 ini bekerja sempurna dengan atau tanpa Facebook aplikasi pada semua perangkat.

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

Saya telah menciptakan sebuah metode untuk membuka facebook ke halaman facebook aplikasi, jika aplikasi ini tidak ada maka pembukaan di 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 tambahkan metode ini

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

dan ini

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

Mendeklarasikan konstanta

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

Menyatakan Metode

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

Fungsi Panggilan

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

Untuk peluncuran facebook page dari aplikasi anda, biarkan urlString = "fb://halaman/your_fb_page_id"

Untuk peluncuran facebook messenger biarkan urlString = "fb-messenger://user/your_fb_page_id"

Halaman FB id biasanya numerik. Untuk mendapatkan itu, goto Menemukan FB ID masukan url profil anda, sesuatu seperti www.facebook.com/edgedevstudio kemudian klik "Menemukan Numberic ID".

Voila, sekarang anda memiliki fb id numerik. ganti "your_fb_page_id" dengan yang dihasilkan ID Numerik

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