使用 4.x Facebook SDK 在 Libgdx 中分享 Facebook
Facebook sharing in Libgdx with 4.x Facebook SDK
我在 LibGDX Android 应用程序中使用 FacebookSDK 共享内容时遇到问题。如果我单击共享按钮并共享一些东西,我会返回 Sharer.Result
null
(因此 post 未共享,但实际上它是!),这与我得到的结果相同我取消分享。
这是我的代码:
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(activity 启动整个应用程序):
@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 是我的 class 有 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 共享内容?
@编辑:
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。此 ID 已更改 (!!!) 发送给 facebook 团队审核后,我没有注意到它。
此外,如果您想分享您必须在应用程序 LoginButton(来自 facebook sdk)中使用的内容,然后使用 ShareButton(始终来自 facebook sdk)。在登录按钮中,您必须发送 PeDuCka 上面写的许可。
如果您使用注册的回调管理器创建 ShareDialog,在方法 onSuccess(ShareDialog.Result result) result.getPostId() 中将始终为空,直到您在 facebook 配置页面上添加对 publish_actions 的权限(并且团队必须审查它 [5 天剩余时间]),您必须使用 PeDuCKA 代码对其进行测试。
在我看来,facebook 的 sdk 记录非常非常糟糕。我见过的最糟糕的(许多相互矛盾的信息)。
我在 LibGDX Android 应用程序中使用 FacebookSDK 共享内容时遇到问题。如果我单击共享按钮并共享一些东西,我会返回 Sharer.Result
null
(因此 post 未共享,但实际上它是!),这与我得到的结果相同我取消分享。
这是我的代码:
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(activity 启动整个应用程序):
@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 是我的 class 有 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 共享内容?
@编辑: 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。此 ID 已更改 (!!!) 发送给 facebook 团队审核后,我没有注意到它。
此外,如果您想分享您必须在应用程序 LoginButton(来自 facebook sdk)中使用的内容,然后使用 ShareButton(始终来自 facebook sdk)。在登录按钮中,您必须发送 PeDuCka 上面写的许可。 如果您使用注册的回调管理器创建 ShareDialog,在方法 onSuccess(ShareDialog.Result result) result.getPostId() 中将始终为空,直到您在 facebook 配置页面上添加对 publish_actions 的权限(并且团队必须审查它 [5 天剩余时间]),您必须使用 PeDuCKA 代码对其进行测试。 在我看来,facebook 的 sdk 记录非常非常糟糕。我见过的最糟糕的(许多相互矛盾的信息)。