Facebook Android ShareDialog在開放後關閉

在此之后,我在我的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时,弹出并突然关闭。


答案 1

您需要将应用设为“公开”。

转到应用设置中的“状态和审核”部分,然后打开选项“是否要将此应用及其所有实时功能提供给公众?


答案 2

您需要在 show() 方法上指定 Mode。在FEED,
NATIVE,WEB和AUTOMATIC之间,最方便的一个是最后一个(自动),因为它直接从Facebook应用程序收集数据,因此您不必登录,但有时它会意外关闭。一般来说,这是我的事情:

  • FFED:1)通过谷歌浏览器工作,2)旧设计3)需要登录
  • 原生:1)使用Facebook应用程序发帖,无需额外登录
  • WEB:与FEED类似,但具有不同的UI
  • 自动:(有时在开始时它会立即关闭..) 1)仅使用Facebook应用程序2)无需重新登录3)像任何其他共享一样共享 在这里看得更好:https://developers.facebook.com/docs/reference/android/current/class/ShareDialog.Mode/ 所以我建议WEB,因为它始终有效:

    shareDialog.show(linkContent, ShareDialog.Mode.WEB );