【问题标题】:Problems when creating Open Graph stories: "unable to generate story" and "failed to generate preview"创建 Open Graph 故事时的问题:“无法生成故事”和“无法生成预览”
【发布时间】:2014-03-10 16:41:05
【问题描述】:

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

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

第一个问题:所有生成的示例都不显示预览,而是出现红色消息Unable to Generate Story.

这个问题之前在 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());

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

我真的无法专注于问题所在(我正在尝试实现最简单的故事分享方式)。这两个问题有联系吗?

【问题讨论】:

  • 如果你解决了然后告诉我..我也无法生成故事

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

     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);
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多