今天要公司要給移動分公司開發一款飛信機器人,來提高飛信使用者活躍,自己去分析協議太麻煩了,前幾個月就有朋友在研究飛信協議,我相信網上也應該有現成的吧,google一下,果然找到自己想要的資料了.
利用飛信的協議可以線上收發訊息,或是向手機發送訊息。由此,可以自己來完成一個IM工具。
[圖片]
本文即是對飛信SDK的使用方法,及如何開發作一個說明。
FetionSDK下載:http://sites.google.com/site/allwealthshare/software/FetionSDK.dll.rar?attredirects=0
貼一下核心代碼:
private FetionSDK sdk = new FetionSDK();//執行個體化飛信sdk
sdk.SDK_ReceiveMessage += new FetionSDK.SDK_ReceiveMessageEventHandler(sdk_SDK_ReceiveMessage);//訊息接收事件
sdk.SDK_UserSatusChange += new FetionSDK.SDK_UserSatusChangedEventHandler(Sdk_SDK_UserSatusChange);//使用者狀態事件
sdk.SDK_Error += new FetionSDK.SDK_ErrorEventHandler(Sdk_SDK_Error);//sdk錯誤事件
/// <summary>
/// 登陸飛信
/// </summary>
private bool FetionLogin(string userName,string pwd)
{
sdk.AccountManager.FillUserIdAndPassword(userName, pwd, false);//第三個參數為是否自動登陸
bool isOk=sdk.AccountManager.Login();//登陸
return isOk;
}
/// <summary>
/// 發送訊息
/// </summary>
private bool SendFetionMsg(string userName, string msg)
{
bool isOk = false;
try
{
int state = sdk.ContactControl.SendIM.SendIM(userName, msg);
}
catch { isOk = false; }
return isOk;
}
/// <summary>
/// 發送手機訊息
/// </summary>
private bool SendFetionMobileMsg(string userName, string msg)
{
bool isOk = false;
try
{
int state = sdk.ContactControl.SendSMS.SendSMS(userName, msg);
}
catch { isOk = false; }
return isOk;
}
/// <summary>
/// 載入好友名單
/// </summary>
/// <param name="psSdk">飛信sdk對象</param>
/// <returns>返回飛信好友資訊集合</returns>
private List<FetionFriend> GetFetionFriendList(FetionSDK psSdk)
{
List<FetionFriend> fetionFriends = new List<FetionFriend>();
try
{
List<Imps.Client.Core.Contact> list = psSdk.ContactControl.getAllContactList();
for (int i = 0; i < list.Count; i++)
{
try
{
FetionFriend fetionFriend = new FetionFriend();//自訂飛信使用者實體資訊類
fetionFriend.UserId = int.Parse(list[i].Uri.Id);
fetionFriend.Nickname = list[i].DisplayName;
fetionFriend.Mobile = list[i].PersonalInfo.MobileNo;
fetionFriends.Add(fetionFriend);
}
catch { }
}
}
catch { fetionFriends = new List<FetionFriend>(); }
return fetionFriends;
}
/// <summary>
/// 飛信sdk出現錯誤
/// </summary>
private void Sdk_SDK_Error(object sender, NullStudio.Fetion_SDK.Event.SDK_ErrorEventArgs fe)
{
this.txtBox.Text += "錯誤:"+fe.Message.Message+"\r\n";
}
/// <summary>
/// 當前飛訊號狀態
/// </summary>
private void Sdk_SDK_UserSatusChange(object sender, Imps.Client.Core.UserSatusChangedEventArgs e)
{
switch (e.NewStatus.ToString())
{
case "Disconnected"://斷開了網路
FetionLogin(userName, userPwd);//重新登陸
break;
case "Initialized"://已初始化
break;
case "Loginning"://登陸中
break;
case "Logon"://已登陸
sdk.AccountManager.CurrentUser.Presence.AsyncChangeMainPresence(Imps.Common.MainPresence.Online, Imps.Common.MainPresence.Online.ToString());//設定PC線上
break;
case "Logoff"://離開網路
break;
case "Logouting"://登出中
break;
case "None"://無狀態
break;
case "OfflineLogon"://離線
break;
case "StandBy"://待機
break;
case "WaitReconnect"://等待
break;
}
this.txtBox.Text += "狀態"+e.NewStatus.ToString() + "\r\n";
}
/// <summary>
/// 接收到的訊息
/// </summary>
private void sdk_SDK_ReceiveMessage(object sender, NullStudio.Fetion_SDK.Event.SDK_ReceiveMessageEventArgs fe)
{
this.txtBox.Text += "" + string.Format(fe.Message, fe.Contact.PersonalInfo.Nickname +"("+ fe.Contact.Uri.Sid.ToString()+")") + "\r\n";
}
有幾點需要注意的就是:
1、登陸後顯示簡訊線上狀態?
需要用sdk.AccountManager.CurrentUser.Presence.AsyncChangeMainPresence(Imps.Common.MainPresence.Online, Imps.Common.MainPresence.Online.ToString());啟用一次,顯示PC線上,更改使用者狀態。
2、為什麼會經常掉線?
解決辦法:間隔一段時間更改一次使用者狀態,讓伺服器知道我還線上呢。
/Files/angells/FetionSDK.rar