最近、アプリをFB SDK 4.0に移動しましたが、共有に関して奇妙な問題が発生しました。共有ダイアログはうまく機能します-FacebookアプリとWebDialogの両方と共有することができます。ただし、共有の成功/失敗後、コールバックはまったく機能しません。そのため、トーストを表示したり、何もログに記録したりすることもできません。これが私のやり方です:
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();
}
});
私はアプリのデバッグを試みましたが、効果はありませんでした。このコードは呼び出されませんでした。
それで、私が間違っていること、または私が欠けていることを私に指摘できますか?
更新
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を作成するときは、(アクティビティを渡すのではなく)フラグメントを渡すようにしてください。
_// From within a fragment
ShareDialog dialog = new ShareDialog(this);
_
次に、フラグメントのfacebookCallbackManager.onActivityResult()
メソッド内にonActivityResult()
を残すことができます。