該如何使用facebook sdk post 自己的塗鴨牆呢?
我們可以利用Request.newPostRequest以下是範例
public class FacebookPostMyWall {
public static class ObjectBuilder{
private GraphObject statusUpdate ;
public ObjectBuilder(){
statusUpdate = GraphObject.Factory.create();
}
public ObjectBuilder setMessage(String msg){
statusUpdate.setProperty("message", msg);
return this;
}
public ObjectBuilder setLink(String link){
statusUpdate.setProperty("link", link);
return this;
}
public ObjectBuilder setPicture(String url){
statusUpdate.setProperty("picture", url);
return this;
}
public ObjectBuilder setName(String name){
statusUpdate.setProperty("name", name);
return this;
}
public ObjectBuilder setDescription(String des){
statusUpdate.setProperty("description", des);
return this;
}
public GraphObject build(){
return statusUpdate;
}
}
public void post(ObjectBuilder builder,Callback callback) {
Request request = Request.newPostRequest(Session.getActiveSession(), "me/feed",
builder.build(), callback);
request.executeAsync();
}
}
利用上面的方法,我可以直接將我們需要的資料直接填入我們的塗鴉牆,注意到這裡,facebook禁止我們在使用者輸入message的地方輸入字串,也就是message的地方不應該預填任何資料,這部分的資料必須由使用者填入,否則facebook的演算法會將我們的app ban掉。
上面的方法不需要跳出dialog就可以將訊息傳遞出去,是個非常方便的api
注意到上面的方法只能post在自己的塗鴉牆,如果我們希望post在好友的塗鴉牆,那該怎麼做呢? 上面的方法並無法達到我們希望的功能,所以必須利用別的方法來完成我們希望的功能,
可以利用下方的方式。
FeedDialogBuilder builder = new WebDialog.FeedDialogBuilder(getActivity());
builder.setName(name)
.setCaption(caption)
.setLink(link)
.setTo(id)
.setDescription(Description)
.setPicture(FBshareHelper.createPicture());
builder.build().show();
這個方法其實是用來分享資料的預設是share到自己的塗鴉牆,但是當我們將setTo的Id帶成別人的塗鴉牆時,就會貼到朋友的塗鴉牆上,不過這個api有個非常大的壞處,當需要分享給多個好友時,就必須一個一個設,而且每次都會跳出dialog要使用者按下分享,應該說他本來的功能就是在分享文章的時候使用的api。
接著如果我們希望tag好友,我們可以使用下面的方法
首先我們必須先做setup
private UiLifecycleHelper uiHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(this, null);
uiHelper.onCreate(savedInstanceState);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
@Override
public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
Log.e("Activity", String.format("Error: %s", error.toString()));
}
@Override
public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
Log.i("Activity", "Success!");
}
});
}
@Override
protected void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
在設定時,很重要的一點要特別注意,如果你是在Nest Fragment(TabHost + viewPager) 裡面使用這種api 要非常注意,onActivityResult可能不會被呼叫到,這可能會造成功能異常。
在設定完成後接著只需要呼叫下面的code就行了
FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this)
.setLink("https://developers.facebook.com/android")
.build();
uiHelper.trackPendingDialogCall(shareDialog.present());
不過這樣並沒有tag到我們的好友所以必須加上一行
setFriends(List)
例如 setFriends(Arrays.asList("id1","id2");
這樣就可以將好友tag在我們的文章中
這個api的缺點也是在傳送的時候會跳出dialog,無法使用背景傳送。
facebook sdk有很多東西可以學習,不過也有很多坑啊,小弟真的花了很多時間在跳坑XDD