创建Open Graph故事时出现的问题:“无法生成故事”和“无法生成预览”

时间:2014-02-12 11:20:47

标签: android facebook facebook-graph-api facebook-opengraph

我在Facebook上有一个应用程序(我们称之为mygame),与我正在开发的Android游戏相关联。 在这个移动应用程序中,我想让用户在比赛后分享他们的分数。为此,我考虑过使用Open Graph stories, actions and objects

我做的第一件事就是创建一个动作,“Play”和一个对象“Match”,这个具有一个名为“score”的整数属性。 之后,我使用相对按钮“添加自定义故事”以“播放比赛”的形式创建了我的第一个故事。

第一个问题:所有生成的示例都没有显示预览,而是显示红色消息,Unable to Generate Storyenter image description here

此问题先前已在Stackoverflow上处理,原因与“facebook has no examples of the story to render"”有关。 在我的情况下,这不应该是真的,因为如果我打开Object Browser,我可以看到两个自动生成的Match对象。 Facebook会尝试从这些记录中生成示例故事吗? 如果不是(甚至是真的),那么问题是什么?

第二个问题 已解决,请回答:在Android上,简单地说,由于com.facebook.FacebookException: Failed to generate preview for user.的异常,我无法测试这个故事。

我用来显示Facebook对话框的方法详细介绍了这个“玩过的匹配”:https://developers.facebook.com/docs/android/open-graph#sharedialog-setup

在我的应用中,代码如下:

        OpenGraphObject setObj = OpenGraphObject.Factory.createForPost("mygame:match");
        setObj.setProperty("score", set.getThisUserScore());
        setObj.setProperty("title", set.getType().getDisplayString());
        setObj.setProperty("url", "http://www.mygame.com");
        setObj.setProperty("description", "Can you beat me?");

        OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class);
        action.setType("mygame:play");
        action.setProperty("match", setObj);

        FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(activity, action, "match").build();
        activity.getUiHelper().trackPendingDialogCall(shareDialog.present());

一旦调用,对话框就出现在我的设备上,但它会在一秒钟后自动关闭,抛出异常。

我真的不能专注于问题所在(我正在尝试实现最简单的故事分享方式)。这两个问题是否相关?

2 个答案:

答案 0 :(得分:1)

我使用此代码在墙上发布多个对象属性。

 private void publishPhoto(String imageURL) {
Log.d("FACEBOOK", "Post to Facebook!");

try {

    JSONObject attachment = new JSONObject();
    attachment.put("message",text);
    attachment.put("name", "MyGreatAndroidAppTest");
    attachment.put("href", "http://stackoverflow.com/users/909317/sunny");
    attachment.put("description","Test Test TEst");

    JSONObject media = new JSONObject();
    media.put("type", "image");
    media.put("src",  imageURL);
    media.put("href",imageURL);
    attachment.put("media", new JSONArray().put(media));

    JSONObject properties = new JSONObject();

    JSONObject prop1 = new JSONObject();
    prop1.put("text", "Text or captionText to Post");
    prop1.put("href", imageURL);
    properties.put(text, prop1);

    // u can make any number of prop object and put on "properties" for    ex:    //prop2,prop3

    attachment.put("properties", properties);

    Log.d("FACEBOOK", attachment.toString());

    Bundle params = new Bundle();
    params.putString("attachment", attachment.toString());
    facebook.dialog(MyProjectActivity.this, "stream.publish", params, new DialogListener() {

        @Override
        public void onFacebookError(FacebookError e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onError(DialogError e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onComplete(Bundle values) {
            final String postId = values.getString("post_id");
            if (postId != null) {
                Log.d("FACEBOOK", "Dialog Success! post_id=" + postId);
                Toast.makeText(MyProjectActivity.this, "Successfully shared on Facebook!", Toast.LENGTH_LONG).show();

            } else {
                Log.d("FACEBOOK", "No wall post made");
            }

        }

        @Override
        public void onCancel() {
            // TODO Auto-generated method stub

        }
    });      

} catch (JSONException e) {
    Log.e("FACEBOOK", e.getLocalizedMessage(), e);
}

}

答案 1 :(得分:0)

我已经解决了关于FacebookException的第二个问题! 有一条错误的路线:

setObj.setProperty("score", set.getThisUserScore());

要对自定义属性进行“评分”,该行必须替换为:

setObj.getData().setProperty("score", set.getThisUserScore());

请注意,我必须深入搜索documentation才能找到这个...