在Facebook上打开Facebook页面(如果已安装)

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

问题是:我在这里有最新版本的Facebook的Android设备。 如果我想从我的应用程序Facebook页面打开Facebook应用程序将打开,但没有我的网页。

我只看到这个消息:

加载时间轴时出错。

哪里不对?

Solutions Collecting From Web of "在Facebook上打开Facebook页面(如果已安装)"

"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(如果已安装)或web url。

然后开始一个意图如下:

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

这就是你所需要的。

好吧,我修改@AndroidMechanics代码,因为在设备上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; } } 

唯一增加的是看看应用程序是否被禁用,如果它被禁用的应用程序将调用网页浏览器!

这适用于最新版本:

https://graph.facebook.com/ (例如https://graph.facebook.com/fsintents )。

复制你的id使用这个方法:

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

这是一个由Jared Rummler和AndroidMechanic混合编码的解决scheme。

注意: fb://facewebmodal/f?href=redirect到一个奇怪的facebook页面,没有类似的和其他重要的button,这就是为什么我尝试fb://page/ 。 它适用于当前的Facebook版本(126.0.0.21.77,2017年6月1日)。 抓住可能是无用的,我留下以防万一。

 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; } catch(Exception e) { return "fb://facewebmodal/f?href=" + FACEBOOK_URL; } } else { return FACEBOOK_URL; } } 

这里是我从Aerrow的这个post的回答中(并修改了)的appInstalledOrNot函数

 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 ID:

  1. 转到您的页面
  2. 用鼠标右键单击和View Page Source
  3. 在页面中查找: fb://page/?id=
  4. 干得好!

我已经在这里回答,这是为我工作,请参阅此链接https://stackoverflow.com/a/40133225/3636561

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

请参考链接获取rest部分。