【问题标题】:Open Facebook Page in Facebook App (if installed) on Android [duplicate]在 Android 上的 Facebook 应用程序(如果已安装)中打开 Facebook 页面 [重复]
【发布时间】:2016-04-06 11:24:44
【问题描述】:

如果 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 应用将打开,但没有我的页面。

我只看到消息:

加载时间线时出现问题。

怎么了?

【问题讨论】:

    标签: android facebook android-intent


    【解决方案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,如果未安装,则返回 web url。

    然后按如下方式启动一个意图:

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

    这就是你所需要的。

    【讨论】:

    • 一直几乎工作。如果用户安装了 Facebook 应用但被禁用,则会崩溃。
    • Gud catch...捕获特定异常...也随时将其添加到答案中...
    • 我用了这个,它可以工作,但是我的页面没有like按钮,内容也有点不同..
    • 直到 2017 年 2 月 20 日:"fb://profile/MY_PAGE_ID":不工作; "fb://facewebmodal/f?href=" + FACEBOOK_URL : 转到页面而不是主页(没有 LIKE 或联系我们 ... 按钮)。 ; “fb://page/PAGE_ID”:工作正常!
    • fb://page/ 仍然适用于较新的版本。我的 Facebook 应用程序是最新的,它仍然可以正确打开我的页面。
    【解决方案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>"));
        }
    }
    

    【讨论】:

    • 这是我需要的最佳答案。上面针对较新版本的“fb://facewebmodal/f?href=" 答案将用户带到实体的帖子页面,而不是真正的“页面”。没有进一步研究这个。另外,使用页面的 ID 而不是虚页面名称非常重要!
    • 同意。这将打开实际页面,而不是在页面之后进行搜索。对于那些在获取页面 id 时遇到问题的人,请从这里获取:findmyfbid.com
    • 没有打开 facebook 应用程序。即使安装了 facebook 应用程序也始终打开浏览器
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这是一个混合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. 右键单击并View Page Source
      3. 在页面中查找:fb://page/?id=
      4. 给你!

      【讨论】:

      • 在 'getFacebookPageURL' 中尝试 catch 没有任何功能
      • 你说得对,我编辑它作为评论供参考。
      • 谢谢。你说得对。 “fb://page/{your_page_id}” 适合我。 Facebook 版本 196.0.0.41.95(2018 年 11 月 7 日)
      【解决方案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();
                  }
      

      注意: 您可以从“link”权限 facebook api

      获取范围内的用户 ID

      【讨论】:

        【解决方案6】:

        我已经在这里回答了,它对我有用,请参考这个 链接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);
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-28
          • 2011-06-16
          • 2014-08-22
          • 1970-01-01
          • 2011-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多