Открыть страницу 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, мы не видим кнопку «Мне нравится», профиль и фотографии обложек и т. Д. Он напрямую открывает контактную информацию и отображает все сообщения со страницы.
Нирадж Двиведи
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 в браузере.

РЕДАКТИРОВАТЬ: начиная с версии 11.0.0.11.23 (3002850) приложение Facebook больше не поддерживает этот способ, есть другой способ, проверьте ответ ниже от Джареда Раммлера.

joaomgcd
источник
1
Спасибо за это, очень помогли мне! Если бы только был способ сделать это для твиттера
Эван Р.
3
Список доступных URL- адресов для iOS см. На wiki.akosma.com/IPhone_URL_Schemes - некоторые из них должны работать и на Android
FrancescoR
7
и вот ответ на этот вопрос; используйте «страницу» вместо профиля - stackoverflow.com/a/15872383/1433187
Хобайб
1
Просто отметим, что fb: // profile / НЕ поддерживается в приложении Facebook v1.3.2, которое входит в состав Nexus One 2.3.6
Марк
3
DjHacktorReborn прав, ни fb: // profile / <fpid>, ни fb: // page / <fpid> больше не работают, начиная с fb v11
sam
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/[userName]

Джон
источник
Я согласен, это лучше, потому что он не делает никаких предположений относительно имени пакета приложения Facebook или фильтров намерений. Однако по той же причине это еще хуже, поскольку другие приложения могут также указывать соответствующие фильтры намерений. Это зависит от того, что вы хотите. Возможно, добавьте, что вы делаете intent.setPackageName ("com.facebook.katana"), чтобы убедиться, что другие приложения не вызываются.
Mark
Но он открывает браузер и там показываются данные 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

Murmel
источник
привет, как узнать разницу между профилем и страницей?
alvarodoune
1
Профиль для частного лица, где страница для компаний, мест, брендов. См. Facebook.com/help/217671661585622 [Название: Чем страницы отличаются от личных профилей?]
Мурмель
для заметок: intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
voodoo98
1
Чтобы найти Id для публичной страницы, события, профиля, вы можете использовать FindMyFbId
Carlos Zerga
Профиль не открывается в приложении Facebook.
Хаммад Насир
27

Вот способ сделать это в 2016 году, отлично работает и очень легко.

Я обнаружил это после изучения того, как электронные письма, отправленные через Facebook, открывали приложение.

// 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
источник
1
Работает отлично, даже в 2016 году. Решает также проблему при просмотре Facebook из Бельгии (когда куки отключены, когда не вошли в систему).
сомнение
3
Когда я использую это, в приложении Facebook отсутствует заголовок страницы Facebook, на которую я ссылаюсь, например, изображение профиля страницы и вкладки Page / Activity / Insights.
Даниэль Перссон
Это работает, если у вас есть имя страницы (как указано), но нет, если у вас есть числовой идентификатор страницы.
Эрик Б.
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
Опустите 'pages /' - part -> use "facebook.com/" + pageId
Murmel
все еще работает как сегодня! большое спасибо, я изменил эту часть "" facebook.com/pages/"+pageid ; " с этим "" facebook.com/"+pageid ; "
Naitbrahim
@naitbrahim Спасибо, что сообщили нам, что это все еще работает! Я отредактировал ответ. Кстати, ответ был опубликован в 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);

Это все, что вам нужно.

AndroidMechanic - Вирусный Патель
источник
Он выдал «android.content.ActivityNotFoundException: не найдена активность для обработки Intent {act = android.intent.action.VIEW dat = fb: // page / ####}»
Раджбир Шиен,
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?». Активность ProfileTabHostActivity не имеет флага android: exported в AndroidManifest, поэтому по умолчанию android: exported = "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», вы можете получить его:

  • со страницы перейдите в раздел «О программе».
  • перейдите в раздел «Подробнее».

введение в описание природы

Чтобы открыть приложение 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)));
        }
Jorgesys
источник
Я не видел этого 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"));
igordc
источник
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);
}
Шахид Ахмад
источник
Это имеет смысл только для статических приложений.
Irshu
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)));
    }
}
DeveScie
источник
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;
}
Immy
источник
Приложение FB Lite имеет отдельное имя пакета, если вы используете этот способ, вам также следует проверить com.facebook.lite - хотя я не проверял, будет ли Lite обрабатывать эти URL-адреса
androidguy
@androidguy У меня нет FB Lite. Было бы хорошо узнать, работает ли код с ним. Если бы вы могли как-то проверить это и выложить свои выводы здесь, это помогло бы другим, кто все еще приходит сюда. Ценится, спасибо
Immy
@Immy -> Yourpage-1548219792xxxxxx в URL указывается идентификатор страницы или URL страницы. Так напр: facebook.com/PageName моя страница URL и идентификатор что - то вроде 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, если приложение не существует, то открытие в 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 добавить эти методы

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
В последней версии это фактически выводит меня на страницу about, в то время как я пытаюсь перейти на домашнюю страницу. Какие-нибудь советы ?
Баладжи
Вы нашли решение ??
Аман Верма
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».

Вуаля, теперь у вас есть свой числовой идентификатор 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)
EdgeDev
источник
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;
        }
    }
franzesz
источник
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;
    }
silvertech048
источник
0

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

        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);
    }
}
Дипак Шарма
источник