Java Android Facebook SDK ShareDialog未返回回调
我正在将我的应用程序从本机共享Api转换为ShareDialog。对话框显示正确,但是我的应用程序没有收到一个回调,说post已完成/失败/取消。我在片段中使用这个ShareDialog,我相信这可能是我的问题的一部分。为什么没有收到回调 这是密码Java Android Facebook SDK ShareDialog未返回回调,java,android,facebook,facebook-graph-api,Java,Android,Facebook,Facebook Graph Api,我正在将我的应用程序从本机共享Api转换为ShareDialog。对话框显示正确,但是我的应用程序没有收到一个回调,说post已完成/失败/取消。我在片段中使用这个ShareDialog,我相信这可能是我的问题的一部分。为什么没有收到回调 这是密码 public class FacebookSocialSelector extends SocialSelector { private static final String FACEBOOK_EMAIL_PREFERENCE = "fac
public class FacebookSocialSelector extends SocialSelector {
private static final String FACEBOOK_EMAIL_PREFERENCE = "facebook_email";
private final CallbackManager mCallbackManager;
private String mFbEmail;
ShareDialog shareDialog;
public FacebookSocialSelector(ShareFragment fragment, View v, ImageView iconView) {
super(fragment, v, iconView);
// Social login
FacebookSdk.sdkInitialize(fragment.getContext().getApplicationContext());
mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager,
mFacebookLoginCallback);
shareDialog = new ShareDialog(mFragment.getActivity());
setBackgroundDisabledDrawable(R.drawable.sharebtn_left_disable);
setBackgroundEnabledDrawable(R.drawable.sharebtn_left_enable);
setDisabledDrawable(R.drawable.facebook_disable);
setEnabledDrawable(R.drawable.facebook_enable);
}
@Override
public void login() {
// Check for existing login
final String fbEmail;
if (mFbEmail == null) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(mFragment.getActivity());
fbEmail = prefs.getString(FACEBOOK_EMAIL_PREFERENCE, null);
} else {
fbEmail = mFbEmail;
}
if (AccessToken.getCurrentAccessToken() != null && fbEmail != null) {
if (Profile.getCurrentProfile() != null) {
finishLogin(true);
mFragment.fbInfo(Profile.getCurrentProfile().getId(),
Profile.getCurrentProfile().getName(), fbEmail);
} else {
new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
finishLogin(true);
mFragment.fbInfo(currentProfile.getId(),
currentProfile.getName(), fbEmail);
Profile.setCurrentProfile(currentProfile);
stopTracking();
}
};
Profile.fetchProfileForCurrentAccessToken();
}
return;
}
LoginManager.getInstance().logInWithReadPermissions(mFragment.getActivity(),
Arrays.asList("public_profile", "email"));
}
public void finishLogin(boolean success) {
if (success) {
select();
mFragment.loginSuccess();
} else {
mFragment.loginFailed("Could not login to FaceBook");
}
}
public void doPost(String message, Bitmap bitmap) {
ShareDialog shareDialog = new ShareDialog(mFragment.getActivity());
if (ShareDialog.canShow(SharePhotoContent.class)) {
Bitmap image = bitmap;
SharePhoto photo = new SharePhoto.Builder()
.setBitmap(image)
// Hashtag Still not working for some reason
// .setShareHashtag(new ShareHashtag.Builder()
// .setHashtag("#ConnectTheWorld")
// .build());
.build();
SharePhotoContent content = new SharePhotoContent.Builder()
.addPhoto(photo)
.build();
shareDialog.show(content);
shareDialog.registerCallback(mCallbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
mFragment.postFinish(true);
}
@Override
public void onCancel() {
mFragment.postFinish(false);
}
@Override
public void onError(FacebookException error) {
mFragment.postFinish(false);
}
});
}
}
@Override
public void onLoginCallback(int requestCode, int resultCode, Intent data) {
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onPostCallback(int requestCode, int resultCode, Intent data) {
}
private FacebookCallback<LoginResult> mFacebookLoginCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Iterator<String> iterator =
loginResult.getRecentlyGrantedPermissions().iterator();
boolean hasPublishPermissions = false;
while (iterator.hasNext()) {
String s = iterator.next();
if (s.equalsIgnoreCase("publish_actions")) {
hasPublishPermissions = true;
}
}
if (!hasPublishPermissions) {
LoginManager.getInstance().logInWithPublishPermissions(mFragment.getActivity(),
Arrays.asList("publish_actions"));
} else {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
mGraphCallback);
Bundle parameters = new Bundle();
parameters.putString("fields", "email");
request.setParameters(parameters);
request.executeAsync();
}
}
@Override
public void onCancel() {
Toast.makeText(mFragment.getActivity(), "Login Cancel",
Toast.LENGTH_LONG).show();
finishLogin(false);
LoginManager.getInstance().logOut();
AccessToken.setCurrentAccessToken(null);
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(mFragment.getActivity(), exception.getMessage(),
Toast.LENGTH_LONG).show();
finishLogin(false);
LoginManager.getInstance().logOut();
AccessToken.setCurrentAccessToken(null);
}
};
GraphRequest.GraphJSONObjectCallback mGraphCallback = new GraphRequest.GraphJSONObjectCallback() {
private ProfileTracker mProfileTracker;
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try {
mFbEmail = object.getString("email");
final Profile currentProfile = Profile.getCurrentProfile();
PreferenceManager
.getDefaultSharedPreferences(mFragment.getActivity())
.edit()
.putString(FACEBOOK_EMAIL_PREFERENCE, mFbEmail)
.apply();
mFragment.loginSuccess();
if (currentProfile == null) {
// Profile not yet loaded
mFragment.fbInfo(null, null, mFbEmail);
mProfileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
finishLogin(true);
mFragment.fbInfo(currentProfile.getId(),
currentProfile.getName(), mFbEmail);
Profile.setCurrentProfile(currentProfile);
stopTracking();
}
};
} else {
mFragment.fbInfo(currentProfile.getId(),
currentProfile.getName(), mFbEmail);
}
} catch (JSONException ex) {
mFragment.loginFailed("Could not log in to FaceBook.");
}
}
};
}
公共类FacebookSocialSelector扩展了SocialSelector{
私有静态最终字符串FACEBOOK\u EMAIL\u PREFERENCE=“FACEBOOK\u EMAIL”;
专用最终CallbackManager mCallbackManager;
私人字符串;
共享对话框共享对话框;
公共FacebookSocialSelector(ShareFragment片段、视图v、ImageView图标视图){
超级(片段,v,图标视图);
//社交登录
sdkinInitialize(fragment.getContext().getApplicationContext());
mCallbackManager=CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager,
mFacebookLoginCallback);
shareDialog=新的shareDialog(mFragment.getActivity());
SetBackgroundDisableAddressable(R.drawable.sharebtn\u left\u disable);
setBackgroundEnabledDrawable(R.drawable.sharebtn\u left\u enable);
setDisableAddressable(R.drawable.facebook\u disable);
setEnabledAddressable(R.drawable.facebook_enable);
}
@凌驾
公共无效登录(){
//检查现有登录名
最终字符串FBE电子邮件;
if(mFbEmail==null){
SharedReferences prefs=首选项管理器
.getDefaultSharedReferences(mf分段.getActivity());
fbeail=prefs.getString(FACEBOOK\u EMAIL\u首选项,空);
}否则{
fbEmail=mFbEmail;
}
if(AccessToken.getCurrentAccessToken()!=null&&fbEmail!=null){
if(Profile.getCurrentProfile()!=null){
finishLogin(true);
fbInfo(Profile.getCurrentProfile().getId(),
Profile.getCurrentProfile().getName(),fbEmail);
}否则{
新的ProfileTracker(){
@凌驾
更改当前配置文件时受保护的无效(配置文件oldProfile、配置文件currentProfile){
finishLogin(true);
mFragment.fbInfo(currentProfile.getId(),
currentProfile.getName(),fbEmail);
Profile.setCurrentProfile(currentProfile);
停止追踪();
}
};
Profile.fetchProfileForCurrentAccessToken();
}
返回;
}
LoginManager.getInstance().logInWithReadPermissions(mFragment.getActivity(),
asList(“public_profile”、“email”);
}
public void finishLogin(布尔成功){
如果(成功){
选择();
mFragment.loginsAccess();
}否则{
登录失败(“无法登录FaceBook”);
}
}
公共void doPost(字符串消息、位图){
ShareDialog ShareDialog=新建ShareDialog(mf片断.getActivity());
if(ShareDialog.canShow(SharePhotoContent.class)){
位图图像=位图;
SharePhoto photo=新建SharePhoto.Builder()
.setBitmap(图像)
//由于某种原因,标签仍然不起作用
//.setShareHashtag(新的ShareHashtag.Builder()
//.setHashtag(“连接世界”)
//.build());
.build();
SharePhotoContent内容=新的SharePhotoContent.Builder()
.addPhoto(照片)
.build();
显示(内容);
registerCallback(mCallbackManager,newfacebookcallback()){
@凌驾
成功时公开作废(共享结果){
mFragment.postFinish(真实);
}
@凌驾
公开作废{
mFragment.postFinish(假);
}
@凌驾
public void onError(facebook异常错误){
mFragment.postFinish(假);
}
});
}
}
@凌驾
public void onLoginCallback(int请求代码、int结果代码、意图数据){
onActivityResult(请求代码、结果代码、数据);
}
@凌驾
PostCallback上的公共void(int请求代码、int结果代码、意图数据){
}
private FacebookCallback mFacebookLoginCallback=新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
迭代器迭代器=
loginResult.getRecentlyGrantedPermissions().iterator();
布尔hasPublishPermissions=false;
while(iterator.hasNext()){
字符串s=迭代器.next();
如果(s.equalsIgnoreCase(“发布行动”)){
hasPublishPermissions=true;
}
}
如果(!hasPublishPermissions){
LoginManager.getInstance().logInWithPublishPermissions(mFragment.getActivity(),
asList(“发布动作”);
}否则{
GraphRequest请求=GraphRequest.newmereRequest(
loginResult.getAccessToken(),
经理(回拨);
Bundle参数=新Bundle();
参数。putString(“字段”、“电子邮件”);
请求。设置参数(参数);
request.executeAsync();
}
}
@凌驾
公开作废{
Toast.makeText(MFFragment.getActivity(),“登录取消”,
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mFacebookSocialSelector.onActivityResult(requestCode, resultCode, data);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}