Facebook与Libxdx共享4.x Facebook SDK

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Facebook与Libxdx共享4.x Facebook SDK相关的知识,希望对你有一定的参考价值。

我在LibGDX And​​roid应用程序中与FacebookSDK共享内容时遇到问题。如果我点击分享按钮并分享一些东西,我会回来Sharer.Result null(所以帖子不共享,但实际上是!),这与我取消分享时得到的结果相同。

这是我的代码:

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


    <provider android:authorities="com.facebook.app.FacebookContentProviderMYFACEBOOKID"
              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" />
</application>

AndroidLauncher.java(启动整个应用程序的活动):

  @Override
protected void onResume() {
    FacebookSdk.sdkInitialize(this);
    super.onResume();
    AppEventsLogger.activateApp(this);
}

@Override
public void onActivityResult(final int requestCode, final int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebookPluginAndroid.getCallbackManager().onActivityResult(requestCode, resultCode, data);
}

facebookPluginAndroid是我的CallBackManager类:

this.callbackManager = CallbackManager.Factory.create();

share()功能(当我按分享按钮时启动):

 public void share(final FacebookPluginListener facebookPluginListener){
    shareDialog = new ShareDialog(context);

    final ShareLinkContent content = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("https://www.facebook.com/SOME URL TO MY SITE"))
            .build();
    if(shareDialog.canShow(content)){
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {
                System.out.println("share SHARED " + result.getPostId());
                if(result.getPostId()!=null)
                    facebookPluginListener.getFacebookShareListener().onShareSuccess();
            }

            @Override
            public void onCancel() {
                System.out.println("share CANCEL");
            }

            @Override
            public void onError(FacebookException e) {
                System.out.println("share ERROR");
            }


        },121);

        Gdx.app.postRunnable(new Runnable() {
            @Override
            public void run() {
                shareDialog.show(content);
            }
        });
    }
}

我做错了什么?我该怎么做才能与FacebookSDK正确分享内容?

@EDIT:FacebookPluginAndroid.java:

public class FacebookPluginAndroid {
private Activity context;
private ShareDialog shareDialog;
private CallbackManager callbackManager;
private LikeDialog likeDialog;

public FacebookPluginAndroid(Activity context) {
    this.context = context;
    this.callbackManager = CallbackManager.Factory.create();
}

public void share(final FacebookPluginListener facebookPluginListener) {


    shareDialog = new ShareDialog(context);
    shareDialog.setShouldFailOnDataError(true);
    final ShareLinkContent content = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("https://www.facebook.com/SOME URL"))
            .build();
    if (shareDialog.canShow(content)) {
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {
                System.out.println("share SHARED " + result.getPostId());
                if (result.getPostId() != null)
                    facebookPluginListener.getFacebookShareListener().onShareSuccess();
            }

            @Override
            public void onCancel() {
                System.out.println("share CANCEL");
            }

            @Override
            public void onError(FacebookException e) {
                System.out.println("share ERROR");
            }


        }, 121);

        Gdx.app.postRunnable(new Runnable() {
            @Override
            public void run() {
                shareDialog.show(content);
            }
        });
    }
}

public void like(final FacebookPluginListener facebookPluginListener) {
    likeDialog = new LikeDialog(context);
    final LikeContent content = new LikeContent.Builder()
            .setObjectId("https://www.facebook.com/SOMEURL")
            .build();


    if (likeDialog.canShow(content)) {
        likeDialog.registerCallback(callbackManager, new FacebookCallback<LikeDialog.Result>() {
            @Override
            public void onSuccess(LikeDialog.Result result) {
                System.out.println("like success! android LIKE" + result.getData());

                if (result.getData().getBoolean("object_is_liked"))
                    facebookPluginListener.getFacebookLikeListener().onLikeSuccess();
            }

            @Override
            public void onCancel() {
                System.out.println("like cancel! android LIKE");
            }

            @Override
            public void onError(FacebookException e) {
                System.out.println("like error! android LIKE");
            }


        }, 123);

        Gdx.app.postRunnable(new Runnable() {
            @Override
            public void run() {
                likeDialog.show(content);
            }
        });
    }
}

public CallbackManager getCallbackManager() {
    return callbackManager;
}

}

答案

Post_id响应仅在用户使用Facebook登录您的应用程序并且已授予publish_actions时才可用。如果存在,这是已发布的Open Graph故事的ID。

你需要添加loginButton.setPublishPermissions(Arrays.asList("publish_actions"));

另一答案

我问题的解决方案是:在应用程序中更改facebook id。在发送给facebook团队审核后,此ID已更改(!!!),我没有注意到。

如果你想分享你必须在应用程序LoginButton(来自facebook sdk)和ShareButton(总是来自facebook sdk)中分享的内容,还有更多内容。在登录按钮中,您必须发送PeDuCka上面写的权限。如果您使用已注册的回调管理器创建ShareDialog,则在onSuccess方法(ShareDialog.Result结果)中,result.getPostId()将始终为null,直到您在facebook配置页面上添加对publish_actions的权限(并且团队必须审核它[5天剩余时间])并且您必须使用PeDuCKA代码进行测试。在我看来,facebook的sdk非常非常糟糕。我见过的最糟糕的事情(很多矛盾的信息)。

以上是关于Facebook与Libxdx共享4.x Facebook SDK的主要内容,如果未能解决你的问题,请参考以下文章

Facebook SDK 与文本共享图像

Facebook 与 AJAX 元标记共享

与 facebook 共享对话框共享 playstore 应用程序链接选择不正确的图片

Android 共享意图选择器 - 与 Facebook/Twitter 社交媒体等共享文本

与 FB.ui 共享 Facebook 页面

如何仅使用帖子 ID 与 FBWebDialogs 共享 Facebook 帖子?