Custom Stories with Open Graph

註:當初寫這篇的時候是2014/09/12,那時Facebook sdk還是3.X,現在(2015/06/25)已更新到4.X版,一些方法需要改寫。

舊:
最近在練習寫android app with Facebook SDK,
想用FB的Custom Stories with Open Graph功能,
讓使用者會自動在動態時報(Timeline)上發佈跟這個app的Story,
照著官網Posting using API calls的範例寫,
 OpenGraphObject book = OpenGraphObject.Factory.createForPost("books.book");  
 OpenGraphAction readAction = OpenGraphAction.Factory.createForPost("books.reads");  
其中的object("books.book")和action("books.reads")都是FB原本提供的。
想說來用自己定義的story (action是Take ,object是 Bus),
卻不知道createForPost裡的參數分別要填什麼,
填了("take")和("bus")都不行, 找了好久, 注意到books.book(FB提供)和take(自定義)這兩個action的Graph API URL不一樣,
才知道原來要加app的Namespace。
例如這個app的namespace是xx-yy,
那想用自己定義的action和object,
就是要填("xx-yy:take")和("xx-yy:bus")。

更新(2015/06/25):
原本的寫法是OpenGraphObject、OpenGraphAction配合RequestBatch,但到了4.X,這三個類別被替換掉了
而發佈custom stories 也變更簡單
根據官網範例,變成:
// Create an object
   ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
     .putString("og:type", "xx-yy:bus")
     .putString("og:title", String.valueOf(Information.currentRoute))
     .putString("og:image", imageUrl)
     .putString("og:description", "the bus")
     .build();
   // Create an action
   ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
     .setActionType("xx-yy:take")
     .putObject("bus", object)
     .build();
   // Create the content
   ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
     .setPreviewPropertyName("bus")
     .setAction(action)
     .build(); 
接著再透過
ShareDialog.show(activityOrFragment, content);
或是
ShareApi.share(content, new FacebookCallback() {.......}); 
將ShareContent發佈出去

留言

  1. 請問你在facebook上建完object及action之後有做什麼其他動作嗎?
    例如送審核或update之類的,我建完依然無法再程式中使用= =,thx

    回覆刪除
    回覆
    1. 因為還是development mode,所以之後就建custom story並沒有再作其他的動作。 若app要公開的話,facebook會要先審核custom story

      刪除

張貼留言

這個網誌中的熱門文章

Texmaker XeLaTeX設定

Java ActionEvent getModifiers()

BibTex 欄位