我使用测试应用程序ID并在测试用户登录在facebook开发网站上的dash_board app创建,使用facebook sdk的登录按钮小部件登录时需要pulish_actions权限但结果获得postid always = null。 这是我的代码:
....
shareDialog = new ShareDialog(MainActivity.this);
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
if (result.getPostId() != null)
Log.e(TAG, result.getPostId());
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
pulishButton.setOnClickListener(this);
try{
loginButton.setPublishPermissions(new String[]{"publish_actions","publish_stream"});
}catch (FacebookException e){
e.printStackTrace();
}
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.e(TAG, "success");
loginButton.setEnabled(false);
pulishButton.setEnabled(true);
GraphRequest.newMeRequest(
loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject json, GraphResponse response) {
if (response.getError() != null) {
// handle error
System.out.println("ERROR");
} else {
System.out.println("Success");
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}).executeAsync();
}
@Override
public void onCancel() {
Log.e(TAG, "On cancel");
}
@Override
public void onError(FacebookException e) {
Log.d(TAG, e.toString());
}
});
答案 0 :(得分:7)
解决方案是强制ShareDialog使用Feed模式并避免使用FB的应用程序进行共享:
shareDialog.show(linkContent, ShareDialog.Mode.FEED);
我相信这是FB的一个错误。当使用FB App进行共享时(postId = null),他们不会将postId发送到onSuccess回调,但是如果你使用Feed,他们就会这样做。
我听说你可以避免&#34; postId = null&#34;使用Facebook登录和要求&#34; publish_actions&#34;允许。但我不认为这是解决这个问题的正确方法。关于上述许可,Facebook声明:
通过对话框或社交插件发布不需要此权限。如果您仅使用“共享”对话框,“订阅源”对话框,“消息对话框”等社交插件(例如“喜欢”按钮),请勿请求查看此权限。
Facebook关于分享对话的文档:
这不需要Facebook登录或任何扩展权限,因此这是在网络上启用共享的最简单方法。
答案 1 :(得分:1)
Facebook在其最新更新中确认了此问题: https://developers.facebook.com/support/bugs/478167629274681/ https://developers.facebook.com/support/bugs/647119912303459/
答案 2 :(得分:0)
您无法直接使用“publish_action”登录,您必须先使用任何读取权限登录,然后要求获取发布权限 https://developers.facebook.com/docs/facebook-login/permissions/v2.4#publishing