2014年7月2日 星期三

Android 開發 (五十一) facebook SDK 傳送 xmpp訊息 v1.0 facebook before 3.14

要使用facebook 傳送訊息是一個災難,因為能參考的資料非常少,facebook也只說明要使用xmpp來傳送訊息,所以在這邊提供一些Sample給大家參考。

首先先提供 相關檔案
https://drive.google.com/file/d/0B7nu3f_AuGWEM3l3WGJBQXp3R0E/edit?usp=sharing

裡面有三個檔案

這兩個檔案是跟xmpp相關的設定,不需要做修改,直接丟進workspace裡就行了
FacebookChatManager.java
SASLXFacebookPlatformMecha.java

第三個檔案
SendMessageIntentService.java

我這邊是使用background service來傳送 message 如果有仔細去看code會發現在傳送訊息之間我有使用sleep,這是因為我發現不間斷的傳送會讓訊息loss掉,所以使用這個方式(算是暫時可用的解法)

要使用這個功能,首先必須login 並且擁有"xmpp_login"的權限 如果已經login的話可以使用
newPermission來增加擁有的權限

  Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
    (Activity)context, newPermission);
  newPermissionsRequest.setCallback(statusCallback);
  Session.getActiveSession().requestNewPublishPermissions(newPermissionsRequest);

只需要在newPermission裡面塞入 "xmpp_login"即可

接著稍微看一下 service裡面做的事情


 @Override
 protected void onHandleIntent(Intent intent) {
  // TODO Auto-generated method stub
  nameList = getNameList(intent);
  if(nameList.size()>0){
   message = intent.getStringExtra(MSG_EXTRA);
   FacebookChatManager facebookChatManager = FacebookChatManager.getInstance(this);

   if (facebookChatManager.connect()) {    
    if (facebookChatManager.logIn(getString(R.string.fb_app_id), Session
      .getActiveSession().getAccessToken())) {

     List<String> resultList = facebookChatManager.findSendMessageList(nameList);    
     facebookChatManager.sendBatchMessage(resultList, message);     
    }

    facebookChatManager.disConnect();

   }
  } 
 }

我將message 以及 friend Id 傳進來在connect 完成之後就使用sendbatch的方式將訊息傳遞出去

facebook目前已經有提供新的做法,但是該做法必須安裝facebook messager 詳細的內容可以參考 http://tedforum.blogspot.tw/2014/05/android-facebook-v20314sdk-chat-api.html

沒有留言:

張貼留言