Mở trang Facebook từ ứng dụng Android?


157

từ ứng dụng Android của tôi, tôi muốn mở một liên kết đến hồ sơ Facebook trong ứng dụng Facebook chính thức (tất nhiên nếu ứng dụng được cài đặt). Đối với iPhone, tồn tại fb://lược đồ URL, nhưng thử điều tương tự trên thiết bị Android của tôi sẽ ném một cái ActivityNotFoundException.

Có một cơ hội để mở một hồ sơ Facebook trong ứng dụng Facebook chính thức từ mã?


2
Có một chủ đề không có câu trả lời trên các diễn đàn dành cho facebook: forum.developers.facebook.net/viewtopic.php?pid=255227 (thêm nó vào đây vì nó không hiển thị câu trả lời rõ ràng và có thể nó sẽ nhận được đã trả lời một ngày nào đó ...)
James Moore

bạn có thể thấy câu trả lời của tôi từ đây .
Mohammad Sommakia

Câu trả lời:


152

Trong phiên bản Facebook 11.0.0.11.23 (3002850) fb://profile/fb://page/không còn hoạt động. Tôi đã dịch ngược ứng dụng Facebook và thấy rằng bạn có thể sử dụng fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]. Đây là phương pháp tôi đã và đang sử dụng trong sản xuất:

/**
 * <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 bạn không nên sử dụng id nữa. Chỉ cần sử dụng các liên kết bình thường.
Jared Rummler

2
@DjHacktorReborn Chỉ cần kiểm tra, làm việc ở đây. Trên Facebook phiên bản 13.0.0.13.14
Jared Rummler

1
@AbdulWasae Nó đã hoạt động trong các ứng dụng với hàng triệu lượt tải xuống. Nếu bạn có một giải pháp tốt hơn xin vui lòng gửi nó thay vì hạ thấp một giải pháp làm việc.
Jared Rummler

4
bất cứ ai có thể xác nhận, rằng điều này vẫn còn hoạt động? (tính đến tháng 6 năm 2019). Tôi vẫn nhận đượcActivityNotFoundException
nVxx

5
Điều này sẽ mở trang facebook nhưng không giống như các trang fb thông thường, chúng tôi không thấy nút Thích, hồ sơ và ảnh bìa, v.v ... nó trực tiếp mở thông tin Liên hệ và hiển thị tất cả các bài đăng từ trang.
Neeraj Dwivingi

235

Điều này hoạt động trên phiên bản mới nhất:

  1. Truy cập https://graph.facebook.com/ < user_name_here > ( ví dụ: https://graph.facebook.com/fsintents )
  2. Sao chép id của bạn
  3. Sử dụng phương pháp này:

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

Điều này sẽ mở ứng dụng Facebook nếu người dùng đã cài đặt nó. Nếu không, nó sẽ mở Facebook trong trình duyệt.

EDIT: kể từ phiên bản 11.0.0.11.23 (3002850) Ứng dụng Facebook không hỗ trợ theo cách này nữa, có một cách khác, hãy kiểm tra phản hồi bên dưới từ Jared Rummler.


1
Cảm ơn vì điều này, đã giúp tôi rất nhiều! Bây giờ nếu chỉ có một cách để làm điều đó cho twitter
Evan R.

3
Để biết danh sách các lược đồ url có sẵn trên iOS, hãy xem wiki.akosma.com/IPhone_URL_Scheme - một số trong số chúng cũng sẽ hoạt động trên Android
FrancescoR

7
& đây là câu trả lời của vấn đề đó; sử dụng "trang" thay vì hồ sơ - stackoverflow.com/a/15872383/1433187
Khobaib

1
Chỉ cần lưu ý rằng fb: // profile / KHÔNG được hỗ trợ trên ứng dụng Facebook v1.3.2, được bao gồm trong kho Nexus One 2.3.6
Đánh dấu

3
DjHacktorReborn đã đúng, cả fb: // profile / <fpid> hay fb: // page / <fpid> đều hoạt động nữa bắt đầu từ fb v11
sam

38

Điều này có dễ dàng hơn không? Ví dụ trong một 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")));
}

Tái bút Nhận id của bạn (số lượng lớn) từ http://graph.facebook.com/[userName]


Tôi đồng ý, điều này tốt hơn bởi vì nó không đưa ra bất kỳ giả định nào về tên bộ lọc hoặc mục đích của gói ứng dụng Facebook. Tuy nhiên, điều tồi tệ hơn là vì lý do tương tự vì các ứng dụng khác cũng có thể chỉ định các bộ lọc ý định phù hợp. NÓ phụ thuộc vào điều bạn muốn. Có thể thêm bạn vào aim.setPackageName ("com.facebook.katana") để đảm bảo không có ứng dụng nào khác được gọi.
Đánh dấu

Nhưng nó mở trình duyệt và hiển thị dữ liệu Facebook, làm thế nào có thể sử dụng Ứng dụng Facebook (để gọi ứng dụng Facebook)?
Mikheil Zhghenti

32

Đối với trang 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));
}

Đối với hồ sơ 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));
}

... bởi vì không có câu trả lời nào chỉ ra sự khác biệt

Cả hai đã được thử nghiệm với Facebook v.27.0.0.24.15 và Android 5.0.1 trên Nexus 4


xin chào, làm thế nào để biết sự khác biệt giữa hồ sơ và trang?
alvarodoune 11/03/2015

1
Hồ sơ dành cho một người riêng tư, trong đó một trang dành cho các công ty, địa điểm, thương hiệu. Xem: facebook.com/help/217671661585622 [Tiêu đề: Các trang khác với hồ sơ cá nhân như thế nào?]
Murmel 13/03/2015

để ghi chú: aim = new Intent (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
voodoo98

1
Để tìm Id cho trang công khai, sự kiện, hồ sơ, bạn có thể sử dụng FindMyFbId
Carlos Zerga

Hồ sơ không được mở trong Ứng dụng Facebook.
Hammad Nasir

27

Đây là cách để làm điều đó trong năm 2016, hoạt động tuyệt vời và rất dễ dàng.

Tôi phát hiện ra điều này sau khi xem xét cách gửi email của facebook đã mở ứng dụng.

// 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
Hoạt động hoàn hảo, ngay cả trong năm 2016. Giải quyết vấn đề khi bạn duyệt Facebook từ Bỉ (khi cookie bị tắt khi không đăng nhập).
ngờ vực

3
Khi tôi sử dụng điều này, tiêu đề của trang Facebook tôi đang tham chiếu bị thiếu trong ứng dụng Facebook, ví dụ: hình ảnh hồ sơ trang và các tab Trang / Hoạt động / Thông tin chi tiết.
Daniel Persson

Điều này hoạt động nếu bạn có tên trang (như đã nêu) nhưng không hoạt động nếu bạn có ID trang số.
Eric B.

5
Ok nhưng không đưa tôi đến một trang sạch, nơi người dùng có thể dễ dàng thích trang của tôi .... Vẫn đang tìm kiếm điều này! Bất kì giải pháp nào ?
Regis_AG

có ai phải giải pháp cho @Regis_AG không?
adrianvintu

22

đây là mã đơn giản nhất để làm việc này

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

đây không phải là làm việc. khi tôi đang đặt liên kết " facebook.com/pages/"+pageid "
BSKANIA

Bỏ qua 'trang /' - phần -> sử dụng "facebook.com/" + pageId
Murmel

vẫn làm việc như ngày hôm nay! cảm ơn bạn rất nhiều Tôi đã thay đổi phần này "" facebook.com/pages/"+pageid ; " với cái này "" facebook.com/"+pageid ; "
naitbrahim

@naitbrahim Cảm ơn bạn đã cho chúng tôi biết rằng nó vẫn hoạt động! Tôi đã chỉnh sửa câu trả lời. btw, câu trả lời đã được đăng vào năm 2013 :) Rất vui vì nó đã giúp bạn
MBH

15

Một cách tiếp cận tái sử dụng nhiều hơn.

Đây là chức năng chúng tôi thường sử dụng trong hầu hết các ứng dụng của mình. Do đó đây là một đoạn mã có thể tái sử dụng để đạt được điều này.

(Tương tự như các câu trả lời khác về các sự kiện. Đăng nó ở đây chỉ để đơn giản hóa và làm cho việc thực hiện có thể sử dụng lại)

"fb://page/không hoạt động với các phiên bản mới hơn của ứng dụng FB. Bạn nên sử dụng fb://facewebmodal/f?href=cho các phiên bản mới hơn. ( Giống như được đề cập trong một câu trả lời khác ở đây )

Đây là một mã làm việc đầy đủ hiện đang sống trong một trong các ứng dụng của tôi:

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

Phương pháp này sẽ trả về url chính xác cho ứng dụng nếu được cài đặt hoặc url web nếu ứng dụng không được cài đặt.

Sau đó bắt đầu một ý định như sau:

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

Đó là tất cả những gì bạn cần.


Nó đã ném "android.content.ActivityNotFoundException: Không tìm thấy hoạt động nào để xử lý Intent {act = android.intent.action.VIEW dat = fb: // page / ####}"
Rajbir Shienh

9

Điều này đã được Pierre87 thiết kế ngược trên diễn đàn FrAndroid , nhưng tôi không thể tìm thấy bất cứ nơi nào chính thức mô tả nó, vì vậy nó phải được coi là không có giấy tờ và có thể ngừng hoạt động bất cứ lúc nào:

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

Có, giải pháp đã dừng lại để làm việc. Lỗi là: "java.lang.SecurityException?: Quyền từ chối: bắt đầu Intent {flg = 0x10080000 cmp = com.facebook.katana / .ProfileTabhostActivity? (Có tính năng bổ sung)} từ ProcessRecord?". Hoạt động ProfileTabhostActivity không có android: cờ xuất trong AndroidManifest, do đó theo mặc định android: export = "false" cho hoạt động này. Kết quả là ProfileTabhostActivity không thể được khởi chạy bởi các ứng dụng khác. Hy vọng duy nhất rằng các nhà phát triển FB sẽ khắc phục vấn đề này trong các phiên bản tính năng của ứng dụng FB.
dvpublic

Tôi nghĩ rằng cách khắc phục là đóng "API tình cờ" này.
Vaiden

7

thử mã này:

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

Để làm điều này, chúng tôi cần "id trang Facebook", bạn có thể lấy nó:

  • từ trang đi đến "Giới thiệu".
  • đi đến phần "Thông tin thêm".

giới thiệu la descripción de la fanten aquí

Để mở ứng dụng facebook trên trang hồ sơ được chỉ định,

bạn có thể làm được việc này:

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

Hoặc bạn có thể xác thực khi ứng dụng facebook chưa được cài đặt, sau đó mở trang 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)));
        }

Tôi đã không nhìn thấy điều này Page IDtừ tab về. Nó là riêng tư?
RoCk RoCk

5

Sau nhiều thử nghiệm, tôi đã tìm thấy một trong những giải pháp hiệu quả nhất:

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

Câu trả lời của tôi được xây dựng dựa trên câu trả lời được chấp nhận rộng rãi từ joaomgcd. Nếu người dùng đã cài đặt Facebook nhưng bị vô hiệu hóa (ví dụ: bằng cách sử dụng Kiểm dịch ứng dụng), phương pháp này sẽ không hoạt động. Ý định cho ứng dụng Twitter sẽ được chọn nhưng nó sẽ không thể xử lý vì nó bị vô hiệu hóa.

Thay vì:

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

Bạn có thể sử dụng những điều sau đây để quyết định phải làm gì:

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

Câu trả lời hay nhất tôi đã tìm thấy, nó hoạt động rất tốt.

Chỉ cần truy cập trang của bạn trên Facebook trong trình duyệt, nhấp chuột phải và nhấp vào "Xem mã nguồn", sau đó tìm page_idthuộc tính: bạn phải sử dụng page_idở đây trong dòng này sau dấu gạch chéo ngược cuối cùng:

fb://page/pageID

Ví dụ:

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

Điều này chỉ có ý nghĩa cho các ứng dụng tĩnh.
Irshu

4

Tính đến tháng 3 năm 2020, nó hoạt động hoàn hảo.

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

Kể từ tháng 7 năm 2018, ứng dụng này hoạt động hoàn hảo có hoặc không có ứng dụng Facebook trên tất cả các thiết bị.

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

Ứng dụng FB Lite có tên gói riêng, nếu bạn sử dụng theo cách này thì bạn cũng nên kiểm tra com.facebook.lite - mặc dù tôi chưa kiểm tra xem Lite có xử lý các URL này hay không
androidguy

@androidguy Tôi không có FB Lite. Nó sẽ là tốt để biết liệu mã làm việc với nó. Nếu bạn có thể kiểm tra nó bằng cách nào đó và đưa phát hiện của bạn vào đây, điều đó sẽ giúp những người khác vẫn đến đây. Cảm ơn, cảm ơn
Immy

@Immy -> Yourpage-1548219792xxxxxx trong url là id trang hoặc url trang. Vì vậy, ví dụ: facebook.com/PageName là url trang của tôi và id là một cái gì đó giống như 2345676. Vậy URL để đề cập trong mã sẽ là facebook.com/PageName hay cái gì khác?
Neeraj Dwivingi

@NeerajDwivingi Bạn cần cả hai: tên trang và ID trang của bạn trong URL. Một cái gì đó như thế này: 'Chuỗi FACEBOOK_URL = " facebook.com/BeanRoaster-1548219792112345/" ;'
Immy

@Immy tôi đã sử dụng cùng một mã chính xác thay thế FACEBOOK_URL thành " facebook.com/myPageName-myPageID " và tôi đang nhận được một trang trống với thanh Tìm kiếm ở trên cùng. Tôi đang sử dụng ứng dụng Facebook mới nhất trên Android 9 (phiên bản ứng dụng Fb - 237.0.0.44.120)
Neeraj

1

Tôi đã tạo một phương pháp để mở trang facebook vào ứng dụng facebook, nếu ứng dụng không tồn tại thì mở bằng 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 thêm các phương thức này

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

và điều này

 /***
 * 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
Trong phiên bản mới nhất, điều này thực sự đưa tôi đến trang giới thiệu trong khi tôi đang tìm cách điều hướng đến trang chủ. Bất cứ lời khuyên?
Balaji Katika

Bạn đã tìm ra giải pháp ??
Aman Verma

1

Để khởi chạy trang facebook từ ứng dụng của bạn, hãy để urlString = "fb: // page / your_fb_page_id"

Để khởi chạy facebook messenger, hãy để urlString = "fb-messenger: // user / your_fb_page_id"

Id trang FB thường là số. Để có được nó, hãy tìm Tìm ID FB của tôi nhập url hồ sơ của bạn, một cái gì đó như www.facebook.com/edgedevstudio sau đó nhấp vào "Tìm ID số".

Voila, bây giờ bạn có id số fb của bạn. thay thế "your_fb_page_id" bằng ID số được tạo

 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

Khai báo hằng

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

Phương pháp khai báo

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

Chức năng gọi

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

0

Trả lời điều này vào tháng 10 năm 2018. Mã làm việc là mã sử dụng pageID. Tôi chỉ thử nghiệm nó và nó là chức năng.

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

Tôi đã triển khai theo hình thức này trong webview bằng cách sử dụng đoạn - bên trong 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;
                }

});

và bên ngoài 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

mở fb trên nút bấm sự kiện mà không cần sử dụng 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-để có được id của bạn đi đến hồ sơ hình ảnh của bạn và nhấp chuột phải và lấy địa chỉ liên kết sao chép.

        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

Bạn có thể mở ứng dụng facebook trên nút bấm như sau: -

@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);
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.