Buka halaman Facebook dari aplikasi Android?

157

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

Apakah ada peluang untuk membuka profil Facebook di aplikasi Facebook resmi dari kode?

Björn Marschollek
sumber
2
Ada utas yang tidak memiliki jawaban di forum dev facebook: forum.developers.facebook.net/viewtopic.php?pid=255227 (menambahkannya di sini karena itu menunjukkan tidak ada jawaban yang jelas, dan mungkin itu akan mendapatkan dijawab di sana suatu hari ...)
James Moore
Anda dapat melihat jawaban saya dari sini .
Mohammad Sommakia

Jawaban:

152

Di Facebook versi 11.0.0.11.23 (3002850) fb://profile/dan fb://page/tidak lagi berfungsi. Saya mendekompilasi aplikasi Facebook dan menemukan bahwa Anda dapat menggunakan fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]. Berikut adalah metode yang telah saya gunakan 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);
}
Jared Rummler
sumber
4
@DjHacktorReborn Anda seharusnya tidak lagi menggunakan id. Cukup gunakan tautan normal.
Jared Rummler
2
@ DjjacktorReborn Baru diperiksa, bekerja di sini. Di Facebook versi 13.0.0.13.14
Jared Rummler
1
@AbdulWasae Ini telah berfungsi di aplikasi dengan jutaan unduhan. Jika Anda memiliki solusi yang lebih baik, silakan posting itu daripada downvoting solusi yang berfungsi.
Jared Rummler
4
adakah yang bisa mengkonfirmasi, bahwa ini masih berfungsi? (per Juni 2019). Saya masih mendapatkanActivityNotFoundException
nVxx
5
Ini membuka halaman facebook tetapi tidak seperti halaman fb biasa, kami tidak melihat tombol Suka, profil dan foto sampul, dll. Secara langsung membuka info Kontak dan menampilkan semua posting dari halaman.
Neeraj Dwivedi
235

Ini berfungsi pada versi terbaru:

  1. Buka https://graph.facebook.com/ < user_name_here > ( https://graph.facebook.com/fsintents misalnya)
  2. Salin id Anda
  3. Gunakan metode ini:

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

Ini akan membuka aplikasi Facebook jika pengguna telah menginstalnya. Kalau tidak, itu akan membuka Facebook di browser.

EDIT: sejak versi 11.0.0.11.23 (3002850) Aplikasi Facebook tidak mendukung cara ini lagi, ada cara lain, periksa respons di bawah ini dari Jared Rummler.

joaomgcd
sumber
1
Terima kasih untuk ini, sangat membantu saya! Sekarang seandainya ada cara untuk melakukannya untuk twitter
Evan R.
3
Untuk daftar skema url yang tersedia di iOS lihat wiki.akosma.com/IPhone_URL_Schemes - beberapa di antaranya juga bisa digunakan di Android
FrancescoR
7
& Inilah jawaban dari masalah itu; gunakan "halaman" alih-alih profil - stackoverflow.com/a/15872383/1433187
Khobaib
1
Hanya untuk dicatat bahwa fb: // profile / TIDAK didukung di aplikasi Facebook v1.3.2 yang termasuk dalam stok Nexus One 2.3.6
Tandai
3
DjHacktorReborn benar, baik fb: // profile / <fpid> atau fb: // halaman / <fpid> bekerja lagi mulai fb v11
sam
38

Apakah ini tidak mudah? Misalnya di 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]

John
sumber
Saya setuju, ini lebih baik karena tidak membuat asumsi tentang nama paket aplikasi Facebook atau filter niat. Namun, ini lebih buruk karena alasan yang sama karena aplikasi lain mungkin juga menentukan filter maksud yang cocok. Tergantung apa yang Anda inginkan. Mungkin menambahkan Anda melakukan intent.setPackageName ("com.facebook.katana") untuk memastikan tidak ada aplikasi lain yang dipanggil.
Markus
Tapi itu membuka browser dan ada data Facebook yang ditampilkan, bagaimana mungkin menggunakan Aplikasi Facebook (untuk memanggil aplikasi Facebook)?
Mikheil Zhghenti
32

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

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

... karena tidak ada jawaban yang menunjukkan perbedaannya

Keduanya diuji dengan Facebook v.27.0.0.24.15 dan Android 5.0.1 di Nexus 4

Murmel
sumber
hai, bagaimana cara mengetahui perbedaan antara profil dan halaman?
alvarodoune
1
Profil adalah untuk orang pribadi, di mana halaman untuk perusahaan, tempat, merek. Lihat: facebook.com/help/217671661585622 [Judul: Apa bedanya Halaman dengan profil pribadi?]
Murmel
untuk catatan: intent = Intent baru (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
voodoo98
1
Untuk menemukan Id untuk halaman publik, acara, profil, Anda dapat menggunakan FindMyFbId
Carlos Zerga
Profil tidak terbuka di Aplikasi Facebook.
Hammad Nasir
27

Inilah cara untuk melakukannya pada tahun 2016, bekerja dengan sangat baik, dan sangat mudah.

Saya menemukan ini setelah melihat bagaimana email mengirim 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);
Someguy123
sumber
1
Berfungsi dengan baik, bahkan pada tahun 2016. Memecahkan juga masalah ketika Anda menjelajahi Facebook dari Belgia (ketika cookie dinonaktifkan ketika tidak masuk).
doubotis
3
Ketika saya menggunakan ini, tajuk halaman Facebook yang saya rujuk tidak ada di aplikasi Facebook, misalnya gambar profil halaman dan tab Halaman / Aktivitas / Wawasan.
Daniel Persson
Ini berfungsi jika Anda memiliki nama halaman (seperti yang dinyatakan) tetapi tidak jika Anda memiliki ID halaman numerik.
Eric B.
5
Ok tapi tidak membawa saya ke halaman yang bersih di mana pengguna dapat dengan mudah membuat seperti halaman saya .... Masih mencari ini! Ada solusi?
Regis_AG
Adakah yang harus mencari solusi untuk @Regis_AG?
adrianvintu
22

ini adalah kode paling sederhana untuk melakukan 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<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
sumber
ini tidak bekerja. ketika saya mengatur tautan " facebook.com/pages/"+pageid "
BSKANIA
Hapus 'halaman /' - bagian -> gunakan "facebook.com/" + pageId
Murmel
masih bekerja seperti hari ini! terima kasih banyak saya mengubah bagian ini "" facebook.com/pages/"+pageid ; " dengan yang satu ini "" facebook.com/"+pageid ; "
naitbrahim
@naitbrahim Terima kasih telah memberi tahu kami bahwa ini masih berfungsi! Saya telah mengedit jawabannya. btw, jawabannya diposting pada 2013 :) Selamat membantu Anda
MBH
15

Pendekatan yang lebih dapat digunakan kembali.

Ini adalah fungsi yang biasanya kita gunakan di sebagian besar aplikasi kita. Karenanya di sini adalah potongan kode yang dapat digunakan kembali untuk mencapai ini.

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

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

Ini adalah kode kerja lengkap yang saat ini hidup 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 terpasang atau url web jika aplikasi tidak diinstal.

Kemudian mulailah niat sebagai berikut:

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

Itu yang kamu butuhkan.

AndroidMechanic - Viral Patel
sumber
Itu melempar "android.content.ActivityNotFoundException: Tidak ada Aktivitas yang ditemukan untuk menangani Intent {act = android.intent.action.VIEW dat = fb: // halaman / ####}"
Rajbir Shienh
9

Ini telah direkayasa ulang oleh Pierre87 di forum FrAndroid , tapi saya tidak dapat menemukan di mana pun resmi yang menggambarkannya, jadi itu harus diperlakukan sebagai tidak berdokumen dan bertanggung jawab untuk berhenti bekerja kapan saja:

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
sumber
Ya, solusinya telah berhenti bekerja. Kesalahannya adalah: "java.lang.SecurityException ?: Penolakan Izin: memulai Intent {flg = 0x10080000 cmp = com.facebook.katana / .ProfileTabHostActivity? (Memiliki ekstra)} dari ProcessRecord?". Profile AktivitasTabHostActivity tidak memiliki android: bendera yang diekspor di AndroidManifest, jadi secara default android: diekspor = "false" untuk aktivitas ini. Akibatnya ProfileTabHostActivity tidak dapat diluncurkan oleh aplikasi lain. Satu-satunya harapan bahwa pengembang FB akan memperbaiki masalah ini dalam versi fitur aplikasi FB.
dvpublic
Saya pikir perbaikannya adalah menutup "API tidak disengaja" ini.
Vaiden
7

coba kode ini:

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

Untuk melakukan ini kita memerlukan "id halaman Facebook", Anda bisa mendapatkannya:

  • dari halaman buka "Tentang".
  • pergi ke bagian "Info Lebih Lanjut".

pengantar untuk deskriptor de la imagen aquí

Untuk membuka aplikasi facebook di halaman profil yang ditentukan,

kamu bisa melakukan ini:

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

Atau Anda dapat memvalidasi ketika aplikasi facebook tidak diinstal, kemudian buka halaman web 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)));
        }
Jorgesys
sumber
Saya tidak melihat ini Page IDdari tab about. Itu pribadi?
RoCk RoCk
5

Setelah banyak pengujian saya telah menemukan salah satu solusi 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));
    }
}
Javier Amor Penas
sumber
4

Jawaban saya dibangun di atas jawaban yang diterima secara luas dari joaomgcd. Jika pengguna menginstal Facebook tetapi dinonaktifkan (misalnya dengan menggunakan Karantina Aplikasi), metode ini tidak akan berfungsi. Maksud untuk aplikasi Twitter akan dipilih tetapi tidak akan dapat memprosesnya karena dinonaktifkan.

Dari pada:

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

Anda dapat menggunakan yang 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"));
igordc
sumber
4

Jawaban terbaik yang saya temukan, ini bekerja dengan baik.

Cukup buka halaman Anda di Facebook di browser, klik kanan, dan klik "Lihat kode sumber", lalu temukan page_idatributnya: Anda harus menggunakan page_iddi sini di baris ini setelah tebasan belakang terakhir:

fb://page/pageID

Sebagai contoh:

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
sumber
Ini hanya masuk akal untuk aplikasi statis.
Irshu
4

Pada Maret 2020 ini berfungsi dengan baik.

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
sumber
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);
Pengembang harimau
sumber
2

Pada Juli 2018 ini berfungsi dengan baik dengan atau tanpa aplikasi Facebook di 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;
}
Immy
sumber
Aplikasi FB Lite memiliki nama paket terpisah, jika Anda menggunakan cara ini maka Anda juga harus memeriksa com.facebook.lite - meskipun saya belum memeriksa apakah Lite akan menangani URL ini
androidguy
@androidguy Saya tidak punya FB Lite. Akan lebih baik untuk mengetahui apakah kode itu bekerja dengannya. Jika Anda bisa mengujinya dan meletakkan temuan Anda di sini, itu akan membantu orang lain yang masih datang ke sini. Dihormati, terima kasih
Immy
@Immy -> Yourpage-1548219792xxxxxx di url adalah id halaman atau url halaman. Jadi untuk contoh: facebook.com/PageName adalah url halaman saya dan id adalah sesuatu seperti 2345676. Jadi URL untuk menyebutkan dalam kode akan facebook.com/PageName atau yang lain?
Neeraj Dwivedi
@NeerajDwivedi Anda membutuhkan keduanya: nama halaman dan ID halaman Anda di URL. Sesuatu seperti ini: 'String FACEBOOK_URL = " facebook.com/BeanRoaster-1548219792112345/" ;'
Immy
@Immy saya telah menggunakan kode yang sama persis dengan mengganti FACEBOOK_URL ke " facebook.com/myPageName-myPageID " dan saya mendapatkan halaman kosong dengan bilah Pencarian di atas. Saya menggunakan aplikasi Facebook terbaru di Android 9 (versi aplikasi Fb - 237.0.0.44.120)
Neeraj Dwivedi
1

Saya telah membuat metode untuk membuka halaman facebook ke dalam aplikasi facebook, jika aplikasi tidak ada maka membuka 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 menambahkan 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;
    }
}
Abdul Rizwan
sumber
3
Dalam versi terbaru, ini sebenarnya membawa saya ke halaman tentang sementara saya mencari untuk menavigasi ke halaman rumah. Ada tips?
Balaji Katika
Sudahkah Anda menemukan solusinya ??
Aman Verma
1

Untuk meluncurkan halaman facebook dari aplikasi Anda, biarkan urlString = "fb: // page / your_fb_page_id"

Untuk meluncurkan messenger Facebook, biarkan urlString = "fb-messenger: // user / your_fb_page_id"

ID halaman FB biasanya berupa angka. Untuk mendapatkannya, goto Find My FB ID masukkan url profil Anda, sesuatu seperti www.facebook.com/edgedevstudio lalu klik "Find Numberic ID".

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

 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
sumber
1

Nyatakan konstanta

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

Deklarasikan 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);
Abhishek Agarwal
sumber
0

Menjawab ini pada Oktober 2018. Kode kerjanya adalah yang menggunakan pageID. Saya baru saja mengujinya dan itu fungsional.

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

Saya menerapkan formulir ini dalam tampilan web menggunakan fragmen-dalam 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;
                }

});

dan di luar 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
sumber
0

buka fb pada acara klik tombol tanpa menggunakan 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( );
    }
Drashti Vyas
sumber
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
sumber
0

1-untuk mendapatkan id Anda pergi ke profil gambar Anda dan klik kanan dan ambil alamat copy link.

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

Anda dapat membuka aplikasi facebook dengan mengklik tombol sebagai berikut: -

@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
sumber