14

ここで説明されているように、Android アプリに共有機能を追加しましたhttps://developers.facebook.com/docs/android/share-dialog/#setup

onCompleteしかし、ユーザーがキャンセルされた場合、とにかく共有アクティビティが呼び出されることに気付きました

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
        @Override
        public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
            Log.e("Activity", String.format("Error: %s", error.toString()));
        }

        @Override
        public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
            Log.e("Activity", "Success!");
        }
    });
}

返品されたBundleも調べました。共有ダイアログをキャンセルしても

com.facebook.platform.extra.DID_COMPLETE=true

ユーザーが実際にFacebookでデータを共有したという結果を得るにはどうすればよいですか? (facebookボタンで別途ログインせずに。権限追加が必要かも?)

4

6 に答える 6

5

共有の結果を取得するには、アプリに少なくとも basic_info 権限が必要です。

これを解決するには、セッションを開くだけです (これにより、basic_info パーミッションが自動的に要求されます)。

Session.openActiveSession(this /*your activity*/, 
                          true /*allows the UI login to show up if needed*/, 
                          new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        Log.i("[Facebook]", "Session: " + state.toString());
        if (session.isOpened()) {
           /// now you are good to get the sharing results
        }
    }
});

詳細については、https ://developers.facebook.com/docs/android/getting-started/ を参照してください。

于 2014-03-27T19:32:50.227 に答える
3
@Override
public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
    if (data.getString("com.facebook.platform.extra.COMPLETION_GESTURE").equals("cancel"))
        return;
}

ユーザーが Facebook に投稿したときの値data.getString("com.facebook.platform.extra.COMPLETION_GESTURE")は "post" です。

于 2014-05-19T13:59:46.600 に答える
1

見出し ## プライベート静的 ShareDialog shareDialog;

    private static FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>() {
        @Override
        public void onCancel() {
            Log.d("HelloFacebook", "Canceled");
        }

        @Override
        public void onError(FacebookException error) {
            Log.d("HelloFacebook", String.format("Error: %s", error.toString()));
            String title = this.getActivty().getString(R.string.error);
            String alertMessage = error.getMessage();
            showResult(title, alertMessage);
        }

        @Override
        public void onSuccess(Sharer.Result result) {
            Log.d("HelloFacebook", "Success!");
            // 不为空,才分享成功
            if (result.getPostId() != null) {
                String title = this.getActivty().getString(R.string.success);
                String id = result.getPostId();
                String alertMessage = this.getActivty().getString(R.string.successfully_posted_post, id);
                showResult(title, alertMessage);
            }
        }

        private void showResult(String title, String alertMessage) {
            new AlertDialog.Builder(this.getActivty())
                    .setTitle(title)
                    .setMessage(alertMessage)
                    .setPositiveButton(R.string.ok, null)
                    .show();
        }
    };

protected void onCreate (Bundle savedInstanceState)
{
             shareDialog = new ShareDialog(this. getActivty());
             shareDialog.registerCallback( callbackManager, shareCallback);
}
于 2015-12-25T06:10:07.300 に答える