在安卓手机上,如果已经安装了Facebook应用程序,如何在应用内打开Facebook页面?

32

如果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应用程序会被打开,但没有我的页面。
我只看到以下消息:
“时间轴加载出问题。”
出了什么问题?
6个回答

127

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

这就是你所需要的一切。


2
几乎总是有效的。如果用户已安装但禁用了Facebook应用程序,则会崩溃。 - scottrick
3
我用了这个,它有效果,但我的页面没有“赞”按钮,而且内容有点不同。 - Arthas
7
直到2017年2月20日为止: "fb://profile/MY_PAGE_ID" :无法使用; "fb://facewebmodal/f?href=" + FACEBOOK_URL :可以进入页面,但不是主页(没有“赞”或“联系我们”按钮); "fb://page/PAGE_ID" :功能正常! - Phong Nguyen
4
fb://page/ 在新版本中仍然有效。我的 Facebook 应用程序是最新的,它仍然可以正确打开我的页面。 - Kimi Chiu
1
ApplicationInfo.versionCode 似乎不再可访问。 - SjoerdvGestel
显示剩余15条评论

17

这个适用于最新版本:

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

4
这是符合我的需求的最佳答案。对于更新版本,上面的"fb://facewebmodal/f?href="答案会将用户带到该实体发布的页面,而不是他们的“页面”。没有进一步研究此问题。另外,请务必使用页面的ID而不是个性化页面名称! - EricWasTaken
2
同意。这将打开实际页面,而不是页面搜索。对于那些在获取页面ID方面遇到困难的人,请从此处获取:http://findmyfbid.com/ - user2154462
不要打开Facebook应用程序。即使安装了Facebook应用程序,也始终打开浏览器。 - Bilal Bangash

12

好的,我修改了@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; 
        }
    }

唯一新增的操作是查看应用程序是否已禁用,如果已禁用,则应用程序将调用Web浏览器!


7
这是一个混合了Jared RummlerAndroidMechanic代码的解决方案。
注意: fb://facewebmodal/f?href= 重定向到一个没有喜欢和其他重要按钮的奇怪的Facebook页面,这就是我尝试使用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;
            // previous version, maybe relevant for old android APIs ?
            // return "fb://facewebmodal/f?href=" + FACEBOOK_URL;
        }
        catch(Exception e) {}
    }
    else
    {
        return FACEBOOK_URL;
    }

}

这是我从 Aerrow 在 this 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. 右键点击并选择“查看页面源代码”
  3. 在页面中查找:fb://page/?id=
  4. 就是这样了!

1
在“getFacebookPageURL”中的try catch没有功能。 - SjoerdvGestel
你说得对,我将其编辑为注释以供参考。 - Julian Honma
谢谢。你是对的。"fb://page/{your_page_id}"在我的设备上运行良好。Facebook版本为196.0.0.41.95(2018年11月07日)。 - Hoa Nguyen

2

您可以使用以下内容:

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 的 "link" 权限中获取受限用户的 ID。


-3

我已经在这里回答过了,对我来说它是有效的,请参考此链接 https://dev59.com/62445IYBdhLWcg3wia2V#40133225

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

请参考链接获取剩余部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接