如果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应用程序将打开,但没有我的网页。
我只看到这个消息:
加载时间轴时出错。
哪里不对?
"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:
View Page Source
fb://page/?id=
我已经在这里回答,这是为我工作,请参阅此链接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部分。