Открыть страницу Facebook в приложении Facebook (если установлена) на Android
Я хотел бы открыть свою страницу Facebook из своего приложения для Android, если приложение Facebook доступно, если нет: эта страница должна быть открыта в браузере по умолчанию.
для этого я пробовал следующий код:
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/MY_PAGE_ID"));
startActivity(intent);
} catch (Exception e) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.facebook.com/MY_PAGE_NAME")));
}
Проблема заключается в следующем:
У меня есть Android-устройство с новейшей версией Facebook.
Если я хочу открыть из своего приложения страницу Facebook, откроется приложение Facebook, но без моей страницы.
Я вижу сообщение только:
Временная шкала загрузки неполадок.
Что не так?
Ответы
Ответ 1
"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);
Это все, что вам нужно.
Ответ 2
Это работает в последней версии:
Перейдите к https://graph.facebook.com/ (https://graph.facebook.com/fsintents например).
Скопируйте свой идентификатор
Используйте этот метод:
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>"));
}
}
Ответ 3
Хорошо, я модифицировал @AndroidMechanics Code, потому что на устройствах было отключено facebook, приложение сработает!
вот модифицированный getFacebookUrl:
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)) {
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;
}
}
Единственная добавленная вещь - посмотреть, отключено ли приложение или нет, если оно отключено, приложение вызовет веб-браузер!
Ответ 4
Вот решение, которое смешивает код Jared Rummler и AndroidMechanic.
Примечание. fb://facewebmodal/f?href=
перенаправляет на странную страницу facebook, которая не имеет подобных и других важных кнопок, поэтому я пытаюсь fb://page/
. Он отлично работает с текущей версией Facebook (126.0.0.21.77, 1 июня 2017 года). Уловка может быть бесполезной, я оставил ее на всякий случай.
public static String getFacebookPageURL(Context context)
{
final String FACEBOOK_PAGE_ID = "123456789";
final String FACEBOOK_URL = "MyFacebookPage";
if(appInstalledOrNot(context, "com.facebook.katana"))
{
try
{
return "fb://page/" + FACEBOOK_PAGE_ID;
// previous version, maybe relevant for old android APIs ?
// return "fb://facewebmodal/f?href=" + FACEBOOK_URL;
}
catch(Exception e) {}
}
else
{
return FACEBOOK_URL;
}
}
Здесь функция appInstalledOrNot
, которую я взял (и изменил) из ответа Aerrow на этот пост
private static boolean appInstalledOrNot(Context context, String uri)
{
PackageManager pm = context.getPackageManager();
try
{
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
return true;
}
catch(PackageManager.NameNotFoundException e)
{
}
return false;
}
Как получить идентификатор Facebook на странице:
- Перейдите на страницу
- Щелкните правой кнопкой мыши и
View Page Source
- Найти на странице:
fb://page/?id=
- Здесь вы идете!
Ответ 5
вы можете использовать это:
try {
Intent followIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://facewebmodal/f?href=" +
"https://www.facebook.com/app_scoped_user_id/"+scoped user id+"/"));
activity.startActivity(followIntent);
} catch (Exception e) {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/" + user name)));
String errorMessage = (e.getMessage() == null) ? "Message is empty" : e.getMessage();
}
внимание: вы можете получить идентификатор пользователя из области " ссылка " facebook api
Ответ 6
Я уже ответил здесь, и он работает для меня, пожалуйста, обратитесь к этому
link fooobar.com/info/45442/...
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);
обратитесь к ссылке, чтобы получить часть отдыха.