Android Facebook共享对话框PostId为空
我通过Android中的共享对话框在FB上共享视频。共享工作非常好。但是,FB post id返回null。即使在上传视频之前,回调也会返回。如果我遗漏了什么,请告诉我。下面是我的代码Android Facebook共享对话框PostId为空,android,facebook,facebook-sharer,Android,Facebook,Facebook Sharer,我通过Android中的共享对话框在FB上共享视频。共享工作非常好。但是,FB post id返回null。即使在上传视频之前,回调也会返回。如果我遗漏了什么,请告诉我。下面是我的代码 public class TestFragment extends Fragment { private CallbackManager callbackManager; private ShareDialog shareDialog; public TestFragment() {
public class TestFragment extends Fragment {
private CallbackManager callbackManager;
private ShareDialog shareDialog;
public TestFragment() {
// Required empty public constructor
}
public static TestFragment newInstance(String path, String json) {
TestFragment fragment = new TestFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getActivity());
callbackManager = CallbackManager.Factory.create();
shareDialog = new ShareDialog(this);
// this part is optional
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
Timber.d("result.getPostId() :: " + result.getPostId());
}
@Override
public void onCancel() {
Timber.d("Facebook : Cancelled");
}
@Override
public void onError(FacebookException e) {
Timber.d(e.getMessage());
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_test, container, false);
ButterKnife.inject(this, view);
return view;
}
@OnClick(R.id.facebookShare)
public void share() {
Timber.d("share button pressed");
if (ShareDialog.canShow(ShareVideoContent.class)) {
Timber.d("showing share dialog");
shareDialog.show(getVideoContent());
} else {
Timber.d("unable to show the share dialog");
}
}
private ShareVideoContent getVideoContent() {
Timber.d(mVideoMetadata.getVideoId());
ShareVideo shareVideo = new ShareVideo.Builder()
.setLocalUrl(Uri.parse("... file ..."))
.build();
ShareVideoContent content = new ShareVideoContent.Builder()
.setVideo(shareVideo)
.build();
return content;
}
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
公共类TestFragment扩展了片段{
私人CallbackManager CallbackManager;
私有共享对话框;
公共测试片段(){
//必需的空公共构造函数
}
公共静态TestFragment newInstance(字符串路径,字符串json){
TestFragment fragment=新的TestFragment();
返回片段;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(getActivity());
callbackManager=callbackManager.Factory.create();
shareDialog=新建shareDialog(此);
//这部分是可选的
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公开作废(共享结果){
d(“result.getPostId():”+result.getPostId());
}
@凌驾
公开作废{
Timber.d(“Facebook:取消”);
}
@凌驾
公共无效onError(FaceBook例外e){
Timber.d(e.getMessage());
}
});
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_测试,容器,错误);
注入(这个,视图);
返回视图;
}
@OnClick(R.id.facebookShare)
公开股{
Timber.d(“按下共享按钮”);
if(ShareDialog.canShow(ShareVideoContent.class)){
Timber.d(“显示共享对话框”);
show(getVideoContent());
}否则{
Timber.d(“无法显示共享对话框”);
}
}
私有共享视频内容getVideoContent(){
d(mvideomedata.getVideoId());
ShareVideo ShareVideo=新建ShareVideo.Builder()
.setLocalUrl(Uri.parse(“…文件…”))
.build();
ShareVideoContent=新的ShareVideoContent.Builder()
.setVideo(共享视频)
.build();
返回内容;
}
@凌驾
ActivityResult上的公共void(最终int请求代码、最终int结果代码、最终意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}
shareDialog.show(shareContent,shareDialog.Mode.FEED)将模式设置为ShareDialog.mode.FEED
这对我有用
当使用Facebook成功登录时,请调用此方法 shareOnFacebook() 私有void shareOnFacebook(){
ShareLinkContent shareContent=new ShareLinkContent.Builder()
.setContentTitle(“辛普森!”)
.setContentUrl(Uri.parse(“http://www.codecube.in/airbucks-project"))
.build();
mFacebookShareDialog.show(shareContent,ShareDialog.Mode.FEED);
mFacebookShareDialog.registerCallback(this.callbackManager,new FacebookCallback()){
@凌驾
成功时公开作废(共享结果){
Log.v(“MyApp”,“共享成功!”);//如果按共享或取消按钮,则显示
字符串postID=result.getPostId();
Log.v(“MyApp”,“共享成功!”+result.getPostId());
}
@凌驾
公开作废{
Log.v(“MyApp”,“共享已取消”);//仅在我按下关闭按钮时显示
}
@凌驾
公共无效onError(FaceBook例外e){
Log.v(“MyApp”,“共享错误:+e.toString());
}
});
mFacebookShareDialog.show(shareContent,ShareDialog.Mode.FEED);
}
@凌驾
受保护的void onActivityResult(最终int请求代码、最终int结果代码、最终意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
当前面临同样的问题只有当你的应用程序实现Facebook登录并请求“发布操作”权限时,才会返回帖子ID。这是您的应用程序请求的吗?@subeeshb感谢您提供此指针。目前,我还没有实现FB登录。我会更新一次,我实现了FB login.mukeikh,你解决问题了吗?它需要FB登录才能访问该功能。
ShareLinkContent shareContent = new ShareLinkContent.Builder()
.setContentTitle("The Simpson!")
.setContentUrl(Uri.parse("http://www.codecube.in/airbucks-project"))
.build();
mFacebookShareDialog.show(shareContent, ShareDialog.Mode.FEED);
mFacebookShareDialog.registerCallback( this.callbackManager, 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
String postID = result.getPostId();
Log.v("MyApp", "Share success!" +result.getPostId());
}
@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());
}
});
mFacebookShareDialog.show(shareContent, ShareDialog.Mode.FEED);
}
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}