Java Facebook android shareDialog在打开后关闭

Java Facebook android shareDialog在打开后关闭,java,android,facebook,facebook-android-sdk,Java,Android,Facebook,Facebook Android Sdk,下面我在我的android应用程序中使用facebook sdk,为了测试,我在MainActivity中添加了以下代码: CallbackManager callbackManager; ShareDialog shareDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitial

下面我在我的android应用程序中使用facebook sdk,为了测试,我在MainActivity中添加了以下代码:

CallbackManager callbackManager;
ShareDialog shareDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    setContentView(R.layout.activity_main);

    callbackManager = CallbackManager.Factory.create();
    shareDialog = new ShareDialog(this);

    if (ShareDialog.canShow(ShareLinkContent.class)) {
        ShareLinkContent linkContent = new ShareLinkContent.Builder()
                .setContentTitle("Hello Facebook")
                .setContentDescription(
                        "The 'Hello Facebook' sample  showcases simple Facebook integration")
                .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
                .build();

        shareDialog.show(linkContent);
    }
}
我在清单中添加了以下步骤:

<uses-permission android:name="android.permission.INTERNET"/>

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

<provider android:authorities="com.facebook.app.FacebookContentProvider950310748347640"
  android:name="com.facebook.FacebookContentProvider"
  android:exported="true" />

<activity android:name="com.facebook.FacebookActivity"
  android:configChanges=
             "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
  android:theme="@android:style/Theme.Translucent.NoTitleBar"
  android:label="@string/app_name" />


当我测试shareDialog时,它突然弹出并自动关闭。

问题在于我测试应用程序的手机,因为你似乎必须使用标记为开发者的facebook帐户登录facebook应用程序,你的应用程序是在该帐户下注册的,然后它将按预期工作,我假设在以后使用release ssh密钥时,它将在任何具有任何帐户的设备上工作。

您需要将应用程序设置为“公共”


转到应用程序设置中的“状态和查看”部分,然后打开选项“是否要使此应用程序及其所有实时功能对公众可用?”

您需要在show()方法上指定一种模式。在馈送之间,
本机、WEB和自动 最方便的是最后一个(自动),因为它直接从Facebook应用程序收集数据,所以你不必登录,但有时它会意外关闭。。 一般来说,我想说的是:

  • FFED:1)通过谷歌浏览器工作,2)旧设计3)需要登录
  • 本地:1)使用facebook应用程序发布帖子,无需额外登录
  • WEB:与提要类似,但具有不同的UI
  • 自动:(有时在启动时会立即关闭。)1)只使用facebook应用程序2)无需重新登录3)与任何其他共享一样共享 请仔细看看这里: 所以我建议使用WEB,因为它总是有效的:

    show(linkContent,shareDialog.Mode.WEB)


    • 我的情况不同。我遇到这个问题有三个原因:

    • 应用FB应用Id无效(有两个facebook应用,我不小心设置了错误的应用Id)

    • 图像URL无效/存在自签名证书问题:
      og:Image
      。我从
      https
      改为
      http
      ,效果不错

    • Web Url无效:
      og:Url
      。url以www开头,正确的方式是
      http
      https
      ,然后是
      www


    • 希望这对其他人有所帮助。

      当您使用为其他应用程序创建的测试用户登录facebook时,可能会发生这种情况。

      这是因为该应用程序不是实时的,并且不向公众开放。为此,您首先需要有隐私策略链接。Facebook最近更新了他们的政策,要求几乎每个应用都在仪表板上设置隐私政策链接。您可以使用免费生成一个。希望有帮助

      你在logcat中看到什么了吗?@MingLi我会修复它,然后作为答案发布。这与释放密钥哈希无关,更可能的是你没有将你的应用程序“公开”。转到应用程序设置中的“状态和查看”部分,然后打开选项“是否要使此应用程序及其所有实时功能可供公众使用?”@MingLi你是对的,发布你的答案,以便我可以接受。我将我的应用程序设为“公共”,但
      ShareDialog
      会自动关闭。有什么建议吗?我遇到了这个问题,但仍处于开发模式。这样做的后果是什么?