我在Android应用上使用Facebook sdk 4.0,我发现了这个问题:
- 当我分享一个帖子时,我可以看到facebook界面,我可以发布并完美取消它。我注册了回调,但是如果按下取消按钮,则不会调用onCancel回调,不发布帖子,而是调用onSuccess回调。但是,如果我触摸关闭按钮,一切正常。
这是我的代码:
private void fbOnShare(){
ShareLinkContent shareContent = new ShareLinkContent.Builder()
.setContentTitle("The Simpson!")
.setContentUrl(Uri.parse("http://www.foxplay.com/ar/show/6980-los-simpson?gclid=CPa-7N-y7MUCFYMSHwodNLYAKQ"))
.build();
this._btnShare = (ShareButton)findViewById(R.id.share_button);
this._btnShare.setShareContent( shareContent );
_btnShare.registerCallback( this._fbCallbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
Log.v("MyApp", "Share success!"); //Showed if I press the share or the cancel button
}
@Override
public void onCancel() {
Log.v("MyApp", "Share canceled"); //Only showed when I press the close button
}
@Override
public void onError(FacebookException e) {
Log.v("MyApp","Share error: " + e.toString());
}
});
}
_fbCallbackManager是在另一个方法中创建的,该方法从活动中初始化onCreate方法中的所有内容。
&#34; Cancelar&#34;按钮仅响应onSuccess回调,尽管不发布共享内容。 &#34;关闭&#34;按钮工作正常。
答案 0 :(得分:6)
根据THIS,它不是一个错误,它应该保持这种状态。
了解用户是否接受发布的唯一方法是检查结果的postID。
如果用户没有取消并且用户已登录到您的应用并且具有发布权限,那么您将只有一个postID。否则它将始终为空。
是的,我知道,很糟糕。
答案 1 :(得分:2)
private boolean hasPublishPermission()
{
AccessToken accessToken = AccessToken.getCurrentAccessToken();
return accessToken != null && accessToken.getPermissions().contains("publish_actions");
}
private void postStatusUpdate()
{
if(hasPublishPermission())
{
Log.d("PostStatus", "Ist");
Profile profile = Profile.getCurrentProfile();
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("Hello Facebook")
.setContentDescription( "The 'Hello Facebook' sample showcases simple Facebook integration")
.setContentUrl(Uri.parse("http://developers.facebook.com/docs/android"))
.build();
if(ShareDialog.canShow(ShareLinkContent.class))
{
Log.d("PostStatus", "2nd");
ShareDialog shareDialog = new ShareDialog(instance);
shareDialog.registerCallback(callbackManager, shareCallback);
}
else if (profile != null)
{
Log.d("PostStatus", "3rdt");
ShareApi.share(linkContent, shareCallback);
}
}
else
{
LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions"));
}
}
private FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>()
{
@Override
public void onSuccess(Result result) {
// TODO Auto-generated method stub
}
@Override
public void onError(FacebookException error) {
// TODO Auto-generated method stub
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
};