分享回调不适用于 Facebook SDK 4 Android
Sharing callback doesnt work wiith Facebook SDK 4 Android
我最近将我的应用程序移到了 FB SDK 4.0,但我在共享时遇到了一些奇怪的问题。共享对话框效果很好——我可以与 Facebook 应用程序和 WebDialog 共享。但是,在 successful/failure 共享后,我的回调根本不起作用 - 所以我什至无法祝酒或记录任何内容。
这是我的做法:
shareDialog.registerCallback(fbManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
// This doesn't work
Toast.makeText(f.getActivity(), "You shared this post", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
// This doesn't work
e.printStackTrace();
}
});
我什至尝试调试应用程序 - 没有效果 - 甚至没有调用此代码。
那么你能指出我做错了什么或者我错过了什么吗?
更新
因为我使用特殊的 class 来处理 FB SDK,下面是它的一部分:
private static CallbackManager fbManager;
public static CallbackManager init(Activity c) {
if (!FacebookSdk.isInitialized()) {
FacebookSdk.sdkInitialize(c);
}
return fbManager = CallbackManager.Factory.create();
}
...
public static void share(final Fragment f, final String title, final String description, final String link) {
ShareDialog shareDialog = new ShareDialog(f);
shareDialog.registerCallback(fbManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
Toast.makeText(f.getActivity(), "You shared this post", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
e.printStackTrace();
}
});
shareDialog.show(f, composeContent(title, description, link));
这是它在片段中的样子:
private CallbackManager callbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
callbackManager = FacebookHelper.init(getActivity());
}
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
}
private void publishStory() {
FacebookHelper.share(this,
"Title",
getResources().getString(R.string.sharing_text),
sharingLink);
}
你必须重写 onActivityResult 方法,
按如下方式更新您的方法,
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
注册facebookcallback时需要指定一个requestCode。 shareDialog.registerCallback(**, **, requestCode);
别忘了覆盖:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
如果在Fragment中使用,则还必须添加:
loginBtn = (LoginButton) view.findViewById(R.id.fb_login_button);
loginBtn.setFragment(this);
确保在创建 ShareDialog 时传递片段(而不是传递 activity):
// From within a fragment
ShareDialog dialog = new ShareDialog(this);
然后您可以将 facebookCallbackManager.onActivityResult()
留在片段的 onActivityResult()
方法中。
我最近将我的应用程序移到了 FB SDK 4.0,但我在共享时遇到了一些奇怪的问题。共享对话框效果很好——我可以与 Facebook 应用程序和 WebDialog 共享。但是,在 successful/failure 共享后,我的回调根本不起作用 - 所以我什至无法祝酒或记录任何内容。 这是我的做法:
shareDialog.registerCallback(fbManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
// This doesn't work
Toast.makeText(f.getActivity(), "You shared this post", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
// This doesn't work
e.printStackTrace();
}
});
我什至尝试调试应用程序 - 没有效果 - 甚至没有调用此代码。
那么你能指出我做错了什么或者我错过了什么吗?
更新
因为我使用特殊的 class 来处理 FB SDK,下面是它的一部分:
private static CallbackManager fbManager;
public static CallbackManager init(Activity c) {
if (!FacebookSdk.isInitialized()) {
FacebookSdk.sdkInitialize(c);
}
return fbManager = CallbackManager.Factory.create();
}
...
public static void share(final Fragment f, final String title, final String description, final String link) {
ShareDialog shareDialog = new ShareDialog(f);
shareDialog.registerCallback(fbManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
Toast.makeText(f.getActivity(), "You shared this post", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
e.printStackTrace();
}
});
shareDialog.show(f, composeContent(title, description, link));
这是它在片段中的样子:
private CallbackManager callbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
callbackManager = FacebookHelper.init(getActivity());
}
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
}
private void publishStory() {
FacebookHelper.share(this,
"Title",
getResources().getString(R.string.sharing_text),
sharingLink);
}
你必须重写 onActivityResult 方法, 按如下方式更新您的方法,
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
注册facebookcallback时需要指定一个requestCode。 shareDialog.registerCallback(**, **, requestCode);
别忘了覆盖:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
如果在Fragment中使用,则还必须添加:
loginBtn = (LoginButton) view.findViewById(R.id.fb_login_button);
loginBtn.setFragment(this);
确保在创建 ShareDialog 时传递片段(而不是传递 activity):
// From within a fragment
ShareDialog dialog = new ShareDialog(this);
然后您可以将 facebookCallbackManager.onActivityResult()
留在片段的 onActivityResult()
方法中。