【问题标题】:Opening a facebook web profile via facebook app doesn't always work通过 facebook 应用程序打开 facebook 网络个人资料并不总是有效
【发布时间】:2013-10-18 06:31:49
【问题描述】:

背景

我正在尝试在 facebook 应用程序上打开特定的个人资料页面(当然,当安装了 facebook 应用程序时)。

问题

我注意到,如果我作为最终用户转到 facebook 应用程序的应用程序信息屏幕(我可以在其中卸载应用程序、清除其缓存等...)并选择“强制停止”,然后尝试打开个人资料页面时,facebook 应用程序本身要么崩溃,要么甚至无法启动。

如果 facebook 应用程序已经在运行,则代码可以正常运行。

代码

context.getPackageManager().getPackageInfo("com.facebook.katana", 0);
final String facebookScheme = String.format("fb://profile/%s", socialNetworkUid);
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(facebookScheme));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY
        | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
return intent;

顺便说一句,该方案是从this link找到的。

问题

  • 为什么会发生?
  • 我能以某种方式避免它吗?
  • 这是 facebook 应用程序的错误还是我没有正确实现?
  • 我现在真的需要检查 FB 应用程序是否处于活动状态,然后才允许使用此意图吗?如果有,怎么做?

【问题讨论】:

  • 快速回答是,目前不支持直接链接到 Facebook 应用程序内的特定内容的方法。您在 stackoverflow 或其他地方看到的任何机制都是基于反复试验的,并且可能会从一个版本中断到另一个版本。

标签: android facebook android-intent user-profile


【解决方案1】:

以下代码对我来说没有问题,无论 Facebook 应用程序是否打开。

public void goToFacebook(String id) {

    try {
        getPackageManager().getPackageInfo("com.facebook.katana", 0);
        Intent facebookPage = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/"+id));
        startActivity(facebookPage);
    } catch (Exception e) {
        Intent launchBrowser = new Intent(Intent.ACTION_VIEW, Uri.parse("http://facebook.com/"+id));
        startActivity(launchBrowser);
    }

}

如您所见,我使用 try/catch 来检测是否安装了 FB 应用程序。如果 Facebook 应用程序已经启动,它将移动到个人资料,否则它将启动应用程序然后打开个人资料。

如果未安装 Facebook 应用,我会将用户引导至浏览器中的个人资料页面。

编辑

在我的应用程序中多次打开 Facebook 应用程序后,我设法重现了您在我的测试设备上看到的相同内容。我可以在 LogCat 中看到以下错误,因此这似乎是 Facebook 应用程序的错误:

10-10 14:43:01.406: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.facebook.katana/com.facebook.katana.IntentUriHandler}: java.lang.IllegalStateException: FbSharedPreferences used before initialized

【讨论】:

  • 那我该怎么办?我真的应该检查 FB 应用程序是否处于活动状态吗?至少在他们修好之前?如果是这样,我该怎么做?
  • 那将是一个不同的问题 - 但请参阅 this answer 以获得建议。如果我关闭我的设备,一切都会恢复正常,直到我从我的应用程序中打开 FB 应用程序,然后再次关闭 FB 应用程序。
  • 这是了解 FB 是否处于活动状态的好方法,至少根据我的检查。我希望有一个更好的解决方案,但也许我对如何访问 FB 应用程序有误。
  • 您访问 FB 应用程序的方法是正确的,尽管我仍然会检查以确保在发送意图之前安装了 FB 应用程序,否则将用户发送到网络浏览器(见上文代码)。我想这取决于应用程序的这一部分有多重要——在我的情况下,它只是一个“关于”部分,所以如果它在短期内出现问题,我可以应对,直到 FB 创建修复程序。
  • 我已经检查了 FB 的存在(因此我在问题中写了“当然,当安装 facebook 应用程序时”),只是没有在这里用代码编写它。所以你说我应该检查应用程序是否也在“运行”,直到 FB 修复他们的应用程序?如果是这样,请更新答案,因为目前它只说他们有一个错误。
猜你喜欢
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
相关资源
最近更新 更多