Android: публикация историй OpenGraph в Facebook с SDK 4.0

Я пытаюсь реализовать достижения для обмена на Facebook, когда игрок открывает значок. Сделали объект с помощью браузера объектов в консоли разработчика facebook. Я создал Action-типы и типы объектов и создал собственную историю. Теперь я застрял, пытаясь поделиться историей в Facebook. Документация, предоставленная Facebook, неадекватна. Даже пример кода, предоставленного Facebook, использует v3.x

Пример кода, предоставленный Facebook, приведен ниже. Не удалось найти хорошую документацию.

Код для объекта

Bundle params = new Bundle();
Request request = new Request(
    Session.getActiveSession(),
    "me/objects/enguru_app:badge",
    params,
    HttpMethod.POST
);
Response response = request.executeAndWait();
// handle the response

Код для действий

Bundle params = new Bundle();
params.putString("badge", "http://samples.ogp.me/1114467558579559");
Request request = new Request(
    Session.getActiveSession(),
    "me/enguru_app:unlocked",
    params,
    HttpMethod.POST
);
Response response = request.executeAndWait();
// handle the response

3 ответа

Решение

Наконец-то разобрался с моей собственной проблемой.

Вот решение:

ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
            .putString("og:type", "enguru_app:badge")
            .putString("og:title", "Unlocked Newbie Badge")
            .putString("og:url","xxxx")
            .putString("og:image","xxx")
            .putString("game:points", "10")
            .putString("fb:app_id", "xxx")
            .putString("og:description",
                    "We are rocking. Come and Play with us").build();
    // Create an action
    ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
            .setActionType("enguru_app:unlocked")
            .putObject("badge", object).build();
    // Create the content
    ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
            .setPreviewPropertyName("badge").setAction(action)
            .build();

    ShareDialog.show(Profile.this, content);

Я надеюсь, что это поможет кому-то, кто проходит через ту же проблему.

Если вы ищете, как поделиться без использования ShareDialog:

ShareApi shareApi = new ShareApi(content);
shareApi.share(new FacebookCallback<Sharer.Result>() {
        @Override
        public void onSuccess(Sharer.Result result) {

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
});

Также вы, вероятно, хотите проверить shareApi.canShare()

Смотрите эту страницу: https://developers.facebook.com/docs/sharing/android частности ShareOpenGraphObject и ShareOpenGraphAction.

Также вы можете отлаживать с помощью Scrumpious: https://github.com/facebook/facebook-android-sdk/blob/master/samples/Scrumptious/src/com/facebook/scrumptious/SelectionFragment.java#L365