簡體   English   中英

Android Facebook SDK 4.0中的Facebook OpenGraph故事

[英]Facebook OpenGraph Stories in Android Facebook SDK 4.0

遵循本教程之后 ,我嘗試使用Facebook SDK 4.0在Android應用程序中實現OpenGraph故事。
我已經閱讀了很多Facebook文檔,並且從理論上理解了OpenGraph故事應該如何工作。 但是主要的問題是,我無法在SDK 4.0中實現它,因為教程和文檔中的所有代碼示例均引用了舊SDK的方法。 我所有使它起作用的嘗試(更改操作,對象)都失敗了。

這是我的代碼(根據文檔 ):

// Create an object
ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
        .putString("og:type", "books.book")
        .putString("og:title", "A Game of Thrones")
        .putString("og:description", "In the frozen wastes to the north of Winterfell, sinister and supernatural forces are mustering.")
        .putString("books:isbn", "0-553-57340-3")
        .build();

// Create an action
ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
        .setActionType("books.reads")
        .putObject("books:book", object)
        .build();

// Create the content
ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
        .setPreviewPropertyName("books:book")
        .setAction(action)
        .build();

ShareButton shareButton = (ShareButton)findViewById(R.id.shareButton);
shareButton.setShareContent(content);
shareButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {

    @Override
    public void onSuccess(Result result) {
        Log.i(TAG, "SHARING SUCCESS!");
    }

    @Override
    public void onError(FacebookException error) {
        Log.e(TAG, "SHARING ERROR! - " + error.getMessage());
    }

    @Override
    public void onCancel() {
        Log.w(TAG, "SHARING CANCEL!");
    }
});

和我得到的(所有嘗試): 在此處輸入圖片說明

動作至少需要一個參考:您嘗試發布的動作無效,因為它未指定任何參考對象。 必須至少指定以下屬性之一:book。

請您解釋一下如何在FB SDK 4.0中正確使用OpenGraph,以及如何使用SDK 4.0方法正確在Actions使用Objects

該對話框的Webview版本存在一個已修復的錯誤。 您需要對代碼進行一些小的更改,我也將更新我們的文檔:

// Create an action
ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
    .setActionType("books.reads")
    .putObject("book", object)  // <--- don't namespace the object on the action
    .build();

// Create the content
ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
    .setPreviewPropertyName("book")  // <--- don't namespace the preview property
    .setAction(action)
    .build();

萬一有人在找它,這就是我解決問題的方式。

我還有一個問題,當我嘗試使用另一個CallbackManager.Factory.create(); ,我的FacebookCallback<Sharer.Result>沒有收到通知,我僅對所有Facebook操作使用一個實例。

public static void faceBookShareDialog(KoboActivity activity, Content content, Bitmap imageToShare,
            String textToShare) {
        ShareHashtag shareHashtag = new ShareHashtag.Builder().setHashtag(HASH_TAG_KOBO).build();

        SharePhoto photo;
        if (!isFacebookInstalled(activity)) {
            ImageConfig imageConfig = Application.getAppComponent().imageConfigFactory().create(content.getImageId(), ImageType.Cover);
            String imageUrl = imageConfig.getImageRequestURL();

            photo = new SharePhoto.Builder()
                    .setImageUrl(Uri.parse(imageUrl))
                    .build();
        } else {
            photo = new SharePhoto.Builder()
                    .setBitmap(imageToShare)
                    .build();
        }

        // Create an object
        ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
                .putString("og:type", "books.book")
                .putString("og:title", content.getTitle())
                .putString("og:description", content.getDescription())
                .putString("books:isbn", "0-553-57340-3")
                .putPhoto("og:image", photo)
                .build();

        // Create an action
        ShareOpenGraphAction.Builder actionBuilder = new ShareOpenGraphAction.Builder()
                .setActionType("books.quotes")
                .putString("body", textToShare)
                .putObject("book", object);

        // Create the content
        String contentURL = generateFacebookShareUrl(content.getId(), content.getType(), CreatePhotoQuoteActivity.CAMPAIGN);
        ShareOpenGraphContent contentGraph = new ShareOpenGraphContent.Builder()
                .setPreviewPropertyName("body")
                .setShareHashtag(shareHashtag)
                .setAction(actionBuilder.build())
                .setContentUrl(Uri.parse(contentURL))
                .build();

        FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>() {
            @Override
            public void onCancel() {
                Log.i("FBShare", "fb SHARE canceled");
            }

            @Override
            public void onError(FacebookException error) {
                Log.e("FBShare", "fb SHARE error");
                error.printStackTrace();
            }

            @Override
            public void onSuccess(Sharer.Result result) {
                String postId = result.getPostId();
                Log.i("FBShare", "fb SHARE success ");
                if (postId != null) {
                    // record successful FB share
                    Log.i(TAG, "post id: " + postId);
                }
            }
        };

        SharePhotoContent photoContent = new SharePhotoContent.Builder()
                .addPhoto(photo)
                .setShareHashtag(shareHashtag)
                .build();

        ShareDialog shareDialog = new ShareDialog(activity);
        shareDialog.registerCallback(activity.getCallbackManager(), shareCallback);

        shareDialog.show(photoContent);

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM