Відкрити сторінку Facebook у додатку Android?


157

з мого додатка Android я хотів би відкрити посилання на профіль Facebook в офіційному додатку Facebook (якщо додаток встановлено, звичайно). Для iPhone існує fb://схема URL-адрес, але, якщо спробувати те саме, на моєму пристрої Android викидається ActivityNotFoundException.

Чи є можливість відкрити профіль Facebook в офіційному додатку Facebook з коду?


2
На форумах розробок у Facebook є тема, на яку немає відповіді: forum.developers.facebook.net/viewtopic.php?pid=255227 (додавши її сюди, тому що вона показує, що немає очевидної відповіді, і, можливо, вона отримає відповів там колись ...)
Джеймс Мур

ви можете побачити мою відповідь звідси .
Мохаммед Соммакія

Відповіді:


152

У версії Facebook 11.0.0.11.23 (3002850) fb://profile/і fb://page/більше не працює. Я розклав додаток Facebook і виявив, що ви можете використовувати fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]. Ось метод, який я використовував у виробництві:

/**
 * <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 вам більше не слід використовувати ідентифікатори. Просто використовуйте звичайне посилання.
Джаред Руммлер

2
@DjHacktorReborn Просто перевірив, працюючи тут. У версії Facebook 13.0.0.13.14
Джаред Румлер

1
@AbdulWasae Він працював у додатках із мільйонами завантажень. Якщо у вас є краще рішення, будь ласка, опублікуйте його замість того, щоб скасовувати робоче рішення.
Джаред Румлер

4
хтось може підтвердити, що це все ще працює? (станом на червень 2019 року). Я все одно отримуюActivityNotFoundException
nVxx

5
Це відкриває сторінку facebook, але на відміну від звичайних fb-сторінок, ми не бачимо кнопки «Подобати», фотографії профілю та обкладинки тощо. Він безпосередньо відкриває контактну інформацію та відображає всі публікації зі сторінки.
Neeraj Dwivedi

235

Це працює на останній версії:

  1. Перейдіть на сторінку https://graph.facebook.com/ < user_name_here > (наприклад, https://graph.facebook.com/fsintents )
  2. Скопіюйте свій ідентифікатор
  3. Використовуйте цей метод:

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

Це відкриє додаток Facebook, якщо користувач встановив його. В іншому випадку він відкриє Facebook у браузері.

EDIT: оскільки версія 11.0.0.11.23 (3002850) додаток Facebook більше не підтримує цей шлях, є інший спосіб, перевірте відповідь нижче від Джареда Румлера.


1
Дякую за це, мені дуже допомогли! Тепер якби тільки був спосіб це зробити щебетати
Еван Р.

3
Список схем URL-адрес, доступних на iOS, див. Wiki.akosma.com/IPhone_URL_Schemes - деякі з них повинні працювати також на Android
FrancescoR

7
& ось відповідь на це питання; використовувати «сторінки» замість профілю - stackoverflow.com/a/15872383/1433187
Khobaib

1
Зауважимо лише, що fb: // профіль / НЕ підтримується в додатку Facebook v1.3.2, який входить у склад Nexus One 2.3.6
Марк

3
DjHacktorReborn прав, ні фб: // профіль / <fpid> ні фб: // сторінка / <fpid> працюють більше , починаючи фб v11
сем

38

Хіба це не простіше? Наприклад, в 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. Отримайте свій ідентифікатор (велика кількість) від http://graph.facebook.com/ evidenceuserName]


Я погоджуюся, це краще, оскільки воно не робить жодних припущень щодо назви пакету додатків Facebook чи фільтрів намірів. Однак це гірше з тієї ж причини, оскільки інші додатки можуть також вказати відповідні фільтри намірів. Це залежить від того, що ти хочеш. Можливо, додайте, що ви робите intent.setPackageName ("com.facebook.katana"), щоб переконатися, що інші програми не викликаються.
Марк

Але він відкриває браузер і там відображаються дані Facebook, як можна користуватися програмою Facebook (для виклику програми Facebook)?
Міхеіл Жхенті

32

Для сторінки у 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));
}

Для профілю у 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));
}

... тому що жодна з відповідей не вказує на різницю

Обидва тестовані на Facebook v.27.0.0.24.15 та Android 5.0.1 на Nexus 4


привіт, як дізнатися різницю між профілем та сторінкою?
alvarodoune

1
Профіль призначений для приватної особи, де сторінка призначена для компаній, місць, брендів. Дивіться: facebook.com/help/217671661585622 [Заголовок: Чим сторінки відрізняються від особистих профілів?]
Murmel

для приміток: intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
voodoo98

1
Щоб знайти Id для загальнодоступної сторінки, події, профілю, ви можете використовувати FindMyFbId
Carlos Zerga

Профіль не відкривається у додатку Facebook.
Хаммад Насір

27

Ось спосіб зробити це в 2016 році, працює чудово і дуже просто.

Я виявив це, вивчивши, як електронні листи, надіслані фейсбуком, відкрили додаток.

// 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
Працює чудово, навіть у 2016 році. Вирішує також проблему, коли ви переглядаєте Facebook з Бельгії (коли файли cookie вимкнено, коли не входить у систему).
дуботіс

3
Коли я використовую це, заголовок сторінки Facebook, на яку я посилаюсь, відсутній у додатку Facebook, наприклад, зображення профілю сторінки та вкладки Сторінка / Діяльність / Інформація.
Даніель Перссон

Це працює, якщо у вас є назва сторінки (як зазначено), але ні, якщо у вас є ідентифікаційний номер сторінки.
Ерік Б.

5
Гаразд, але не приводить мене до чистої сторінки, де користувач може легко подобатися моїй сторінці .... Все одно шукаю цього! Будь-яке рішення?
Regis_AG

хтось має вирішити для @Regis_AG?
adrianvintu

22

це найпростіший код для цього

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

це не працює. коли я встановлюю посилання " facebook.com/pages/"+pageid "
BSKANIA

Опустіть 'сторінки /' - частина -> використовуйте «facebook.com/» + pageId
Мурмель

все ще працює як сьогодні! дуже дякую, що я змінив цю частину "" facebook.com/pages/"+pageid ; " з цим "" facebook.com/"+pageid ; "
naitbrahim

@naitbrahim Дякую, що повідомили нам, що це все ще працює! Я відредагував відповідь. btw, відповідь була розміщена в 2013 році :) Щасливий, що допомогло вам
MBH

15

Більш багаторазовий підхід.

Це функція, яку ми зазвичай використовуємо в більшості наших додатків. Звідси тут багаторазовий фрагмент коду для досягнення цього.

(Подібно до інших відповідей з точки зору фактів. Опублікуйте їх тут просто для спрощення та зробити реалізацію багаторазовою)

"fb://page/не працює з новішими версіями програми FB. Вам слід використовувати fb://facewebmodal/f?href=для новіших версій. ( Як згадується в іншій відповіді тут )

Це повноцінний робочий код, який зараз живе в одному з моїх додатків:

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

Цей метод поверне правильний URL для програми, якщо встановлений, або веб-URL, якщо програма не встановлена.

Потім запустіть наміри наступним чином:

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

Це все, що вам потрібно.


Він кинув "android.content.ActivityNotFoundException: не знайдено жодної активності для обробки наміру {act = android.intent.action.VIEW dat = fb: // page / ####}"
Rajbir Shienh

9

Це було зроблено зворотним інженером Pierre87 на форумі FrAndroid , але я не можу знайти жодного офіційного, який би описував це, тому до нього слід ставитися як документоване і може припинити роботу в будь-який момент:

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

Так, рішення перестало працювати. Помилка: "java.lang.SecurityException ?: Заперечення дозволу: починаючи намір {flg = 0x10080000 cmp = com.facebook.katana / .ProfileTabHostActivity? (Має додаткові дані)} від ProcessRecord?". У Activity ProfileTabHostActivity немає андроїда: експортований прапор в AndroidManifest, тому за замовчуванням android: експортований = "false" для цієї діяльності. Як результат, ProfileTabHostActivity не може бути запущений іншими програмами. Єдина надія, що розробники FB вирішать цю проблему у функціональних версіях програми FB.
dvpublic

Я думаю, що виправлення було закрити цей "випадковий API".
Вайден

7

спробуйте цей код:

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

Для цього нам потрібен "ідентифікатор сторінки у Facebook", ви можете отримати його:

  • зі сторінки перейдіть до розділу "Про".
  • перейдіть до розділу "Більше інформації".

Introducir la descriptionpción de la imagen aquí

Щоб відкрити додаток facebook на вказаній сторінці профілю,

Ви можете це зробити:

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

Або ви можете перевірити, коли додаток facebook не встановлено, а потім відкрийте веб-сторінку 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)));
        }

Я не бачив цього Page IDна вкладці about. Це приватне?
RoCk RoCk

5

Після довгих тестувань я знайшов одне з найбільш ефективних рішень:

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

Моя відповідь грунтується на загальноприйнятій відповіді від joaomgcd. Якщо у користувача встановлений Facebook, але він відключений (наприклад, за допомогою карантинного додатка), цей метод не працюватиме. Вибір наміру для програми Twitter буде вибрано, але він не зможе обробити його, оскільки його вимкнено.

Замість:

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

Ви можете використовувати наступне, щоб вирішити, що робити:

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

Найкраща відповідь, яку я знайшов, це чудово працює.

Просто перейдіть на свою сторінку в Facebook у браузері, клацніть правою кнопкою миші та натисніть «Переглянути вихідний код», а потім знайдіть page_idатрибут: ви повинні використовувати page_idтут, у цьому рядку після останнього зворотного косого рису:

fb://page/pageID

Наприклад:

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

Це має сенс лише для статичних програм.
Іршу

4

Станом на березень 2020 року це працює чудово.

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

З липня 2018 року це ідеально працює з додатком Facebook на всіх пристроях або без них.

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

Додаток FB Lite має окрему назву пакета, якщо ви користуєтесь цим способом, тоді ви також повинні перевірити com.facebook.lite - хоча я не перевіряв, чи буде Lite обробляти ці URL-адреси
androidguy

@androidguy У мене немає FB Lite. Було б добре знати, чи працює з ним код. Якби ви могли якось це перевірити і викласти свої висновки тут, це допомогло б іншим, хто все ще приїжджає сюди.
Вдячний

@Immy -> Ваша сторінка-1548219792xxxxxx в URL-адресі - це ідентифікатор сторінки або URL-адреса сторінки. Так, наприклад, facebook.com/PageName - це моя URL-адреса сторінки, а id - це щось на зразок 2345676. Отже, URL-адреса, яку потрібно згадати в коді, буде facebook.com/PageName чи ще щось?
Неерай Двіведі

@NeerajDwivedi Вам потрібно обоє: назва вашої сторінки та ідентифікатор сторінки в URL-адресі. Приблизно так: 'String FACEBOOK_URL = " facebook.com/BeanRoaster-1548219792112345/" ; "
Іммі

@Immy, я використав такий самий код, замінивши FACEBOOK_URL на " facebook.com/myPageName-myPageID ", і я отримую порожню сторінку з панеллю пошуку вгорі. Я використовую останню програму Facebook на Android 9 (версія додатка Fb - 237.0.0.44.120)
Neeraj Dwivedi

1

Я створив метод відкрити сторінку facebook у додаток facebook, якщо додатка не існує, то відкриється в хромі

    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 додає цей метод

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

і це

 /***
 * 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
В останній версії це насправді відводить мене до сторінки про те, як я хочу перейти на домашню сторінку. Якісь поради?
Баладжі Катіка

Ви знайшли рішення ??
Аман Верма

1

Щоб запустити сторінку facebook у своєму додатку, дозвольте urlString = "fb: // page / your_fb_page_id"

Для запуску месенджера facebook дозвольте urlString = "fb-messenger: // user / your_fb_page_id"

Ідентифікатор сторінки FB зазвичай є числовим. Щоб отримати його, перейдіть до Find My FB ID, введіть URL-адресу свого профілю, щось на зразок www.facebook.com/edgedevstudio, а потім натисніть «Find Numberic ID».

Voila, тепер у вас є свій цифровий ідентифікатор fb. замініть "your_fb_page_id" на створений числовий ідентифікатор

 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

Декларуйте константи

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

Заявити метод

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

Функція виклику

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

0

Відповідаючи на це у жовтні 2018 р. Робочим кодом є той, який використовує pageID. Я тільки тестував це, і він функціональний.

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

Я реалізований у цій формі у веб-перегляді за допомогою фрагмента - всередині 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;
                }

});

і за межами 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

відкрити подію fb on button, не використовуючи sdk facebook

 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-щоб отримати свій ідентифікатор, перейдіть до свого профілю зображення і натисніть правою кнопкою миші та скопіюйте адресу копіювання посилання.

        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

Ви можете відкрити додаток facebook натисканням кнопки наступним чином: -

@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);
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.