2014-02-12 57 views
4

我在Facebook上有一個應用程序(我們將其稱爲mygame),與我正在開發的Android遊戲連接。 在這個移動應用程序中,我想讓用戶在比賽結束後分享他們的分數。爲此,我考慮過使用Open Graph stories, actions and objects創建Open Graph故事時的問題:「無法生成故事」和「無法生成預覽」

我做的第一件事就是創建一個動作「Play」和一個對象「Match」,這個對象帶有一個名爲「score」的整數屬性。 之後,我使用相關按鈕「添加自定義故事」以「Play a Match」的形式創建了我的第一個故事。

第一個問題:所有生成的示例不顯示預覽,而是顯示一條紅色消息,Unable to Generate Storyenter image description here

此問題#2以前治療過,且原因是相關的事實,「facebook has no examples of the story to render"。 這不應該是在我的情況真實的,因爲如果我打開Object Browser我可以看到兩個自動生成的匹配對象。難道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()); 

一旦被調用,對話框就會出現在我的設備上,但它在一秒鐘後關閉,拋出異常。

我真的不能專注於問題出在哪裏(我試圖實現分享故事的最簡單方式)。這兩個問題是相關的嗎?

+0

,如果你解決了,然後讓我知道..我也不能產生故事 –

回答

0

我已經解決了關於FacebookException的第二個問題! 有一個錯線:

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

存在「分數」的自定義屬性,該行必須替換爲:

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

注意,我必須深入查找在documentation找到這個.. 。

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

}