使用飞信SDK开发短信收发程序

 利用飞信的协议可以在线收发消息,或是向手机发送消息。由此,可以自己来完成一个IM工具。
本文即是对飞信SDK的使用方法,及如何开发作一个说明。

一、引用FetionSDK
飞信是采用C#开发的,所有的程序集均是.NET,因此我们也需要使用Delphi.NET/Chrome来进行相关的开发。在Chrome中,新建一个 工程,并引入FetionSDK.dll,当然您也可以使用Delphi2007 for .NET,开发出来结果一样。
其实我曾尝试过把FetionSDK.dll变成一个COM+程序,但是不巧的是这个dll没有strong name,无法转换。
引用完SDK后,在主窗体的uses下添加NullStudio.Fetion_SDK。

二、准备工作
准备工作很简单,在public区分符下,建立一个名为sdk的FetionSDK对象。然后为它创建一个实例。

三、用户登录
使用以下代码来填入用户名和密码:
sdk.AccountManager.FillUserIdAndPassword(UserID,Password,true);
三个参数分别是用户手机号,密码,是否自动登录,当选定了自动登录为True时,可以使用
       sdk.AccountManager.LoginOrLogout();
来自动的判断是登录或是注销,否则的话,就要使用
sdk.AccountManager.Login(); 来登录。

四、状态改变
用户登录或注销,或是改变自己当前的状态时,会触发状态改变的事件。如下:
procedure sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);
其中参数e中来自命名空间Imps.Client.Core。
然后我们绑定这个事件:
sdk.SDK_UserSatusChange += new FetionSDK.SDK_UserSatusChangedEventHandler(sdk_SDK_UserSatusChange);
这样SDK就能接收到状态改变的事件了。另外,还能针对各个状态,执行不同的指令,如下:
  1. case e.NewStatus of
  2. Imps.Client.UserAccountStatus.Disconnected: ;
  3. Imps.Client.UserAccountStatus.Initialized: ;
  4. Imps.Client.UserAccountStatus.Loginning: ;
  5. Imps.Client.UserAccountStatus.Logon:
  6. Imps.Client.UserAccountStatus.Logoff: ;
  7. Imps.Client.UserAccountStatus.Logouting: ;
  8. Imps.Client.UserAccountStatus.None: ;
  9. Imps.Client.UserAccountStatus.OfflineLogon: ;
  10. Imps.Client.UserAccountStatus.StandBy: ;
  11. Imps.Client.UserAccountStatus.WaitReconnect: ;
  12. else
  13. end;


五、获取好友列表
  1. var
  2. lst : List<Contact>;
  3. i: Integer;
  4. begin
  5. lstFriendLst.Items.Clear();
  6. lst := sdk.ContactControl.getAllContactList();
  7. for i := 0 to lst.Count - 1 do
  8. begin
  9. lstFriendLst.Items.Add(
  10. string.Format("{0} [Fetion: {1} Mobile: {2}]",
  11. lst[i].DisplayName, lst[i].Uri.Id,
  12. IfThen(lst[i].PersonalInfo.MobileNo = string.Empty, "Not Published", lst[i].PersonalInfo.MobileNo)));
  13. end;


六、发送消息
调用SDK的发送消息指令,传入的参数分别是对方手机号码和短信的内容。
sdk.ContactControl.SendIM.SendIM(edtPhoneNo.Text, edtSendMsg.Text);

七、接收消息
接收到消息时,会解发SDK的收到消息事件,如下:
procedure sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);
实现此方法后,绑定这个事件。
sdk.SDK_ReceiveMessage += new FetionSDK.SDK_ReceiveMessageEventHandler(sdk_SDK_ReceiveMessage);

八、发送手机短信
与发送消息一样,只不过使用的是另一个方法。
sdk.ContactControl.SendSMS.SendSMS(sdk.ContactControl.getMyself.Uri.Id,edtSendMsg.Text);
在这里需要注意SendIM与SendSMS的区别。
getMyself是SDK中的一个方法,用来获取当前用户的信息。

九、出错事件
当SDK因为某种原因出错后,会触发出错事件,如下:
procedure sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);
实现后绑定:
sdk.SDK_Error += new FetionSDK.SDK_ErrorEventHandler(sdk_SDK_Error);

十、编译,执行程序
现在可以编译并执行程序了。

十一、程序源码

  1. namespace FetionDemo;
  2. interface
  3. uses
  4. System.Windows.Forms,
  5. System.Drawing,
  6. Imps.Client.Core,
  7. NullStudio.Fetion_SDK,
  8. NullStudio.Fetion_SDK.Event,
  9. System.Collections.Generic;
  10. type
  11. /// <summary>
  12. /// Summary description for MainForm.
  13. /// </summary>
  14. MainForm = class(System.Windows.Forms.Form)
  15. {$REGION Windows Form Designer generated fields}
  16. private
  17.     btnSendSelf: System.Windows.Forms.Button;
  18.     edtPhoneNo: System.Windows.Forms.TextBox;
  19.     btnSend: System.Windows.Forms.Button;
  20.     edtSendMsg: System.Windows.Forms.TextBox;
  21.     sbMain: System.Windows.Forms.StatusStrip;
  22.     lblPassword: System.Windows.Forms.Label;
  23.     lblAccount: System.Windows.Forms.Label;
  24.     edtMsg: System.Windows.Forms.TextBox;
  25.     lblPhoneNo: System.Windows.Forms.Label;
  26.     gbMsg: System.Windows.Forms.GroupBox;
  27.     lstFriendLst: System.Windows.Forms.ListBox;
  28.     gbFriendLst: System.Windows.Forms.GroupBox;
  29.     edtPassword: System.Windows.Forms.TextBox;
  30.     edtUserID: System.Windows.Forms.TextBox;
  31.     lblError: System.Windows.Forms.ToolStripStatusLabel;
  32.     btnLogoff: System.Windows.Forms.Button;
  33.     btnLogin: System.Windows.Forms.Button;
  34.     lblStatus: System.Windows.Forms.ToolStripStatusLabel;
  35.     gbLogin: System.Windows.Forms.GroupBox;
  36.     components: System.ComponentModel.Container := nil;
  37.     method InitializeComponent;
  38. {$ENDREGION}
  39. private
  40.       method btnSendSelf_Click(sender: System.Object; e: System.EventArgs);
  41.       method btnSend_Click(sender: System.Object; e: System.EventArgs);
  42.       method btnLogoff_Click(sender: System.Object; e: System.EventArgs);
  43.       method btnLogin_Click(sender: System.Object; e: System.EventArgs);
  44.       method MainForm_Load(sender: System.Object; e: System.EventArgs);
  45. protected
  46.     method Dispose(aDisposing: boolean); override;
  47.     function IfThen(ABool: Boolean; AStr1, AStr2: String): String;
  48. public
  49.     sdk : FetionSDK;
  50.     bLogon: Boolean;
  51.     procedure sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);
  52.     procedure sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);
  53.     procedure sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);
  54.     constructor;
  55. end;
  56. implementation
  57. {$REGION Construction and Disposition}
  58. constructor MainForm;
  59. begin
  60. //
  61. // Required for Windows Form Designer support
  62. //
  63. InitializeComponent();
  64. //
  65. // TODO: Add any constructor code after InitializeComponent call
  66. //
  67. end;
  68. method MainForm.Dispose(aDisposing: boolean);
  69. begin
  70. if aDisposing then begin
  71.     if assigned(components) then
  72.       components.Dispose();
  73.     //
  74.     // TODO: Add custom disposition code here
  75.     //
  76. end;
  77. inherited Dispose(aDisposing);
  78. end;
  79. {$ENDREGION}
  80. {$REGION Windows Form Designer generated code}
  81. method MainForm.InitializeComponent;
  82. begin
  83. var resources: System.ComponentModel.ComponentResourceManager := new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
  84. self.sbMain := new System.Windows.Forms.StatusStrip();
  85. self.lblStatus := new System.Windows.Forms.ToolStripStatusLabel();
  86. self.lblError := new System.Windows.Forms.ToolStripStatusLabel();
  87. self.gbMsg := new System.Windows.Forms.GroupBox();
  88. self.lblPhoneNo := new System.Windows.Forms.Label();
  89. self.edtSendMsg := new System.Windows.Forms.TextBox();
  90. self.btnSend := new System.Windows.Forms.Button();
  91. self.edtPhoneNo := new System.Windows.Forms.TextBox();
  92. self.edtMsg := new System.Windows.Forms.TextBox();
  93. self.btnLogin := new System.Windows.Forms.Button();
  94. self.edtUserID := new System.Windows.Forms.TextBox();
  95. self.edtPassword := new System.Windows.Forms.TextBox();
  96. self.lblAccount := new System.Windows.Forms.Label();
  97. self.lblPassword := new System.Windows.Forms.Label();
  98. self.gbLogin := new System.Windows.Forms.GroupBox();
  99. self.btnLogoff := new System.Windows.Forms.Button();
  100. self.gbFriendLst := new System.Windows.Forms.GroupBox();
  101. self.lstFriendLst := new System.Windows.Forms.ListBox();
  102. self.btnSendSelf := new System.Windows.Forms.Button();
  103. self.sbMain.SuspendLayout();
  104. self.gbMsg.SuspendLayout();
  105. self.gbLogin.SuspendLayout();
  106. self.gbFriendLst.SuspendLayout();
  107. self.SuspendLayout();
  108. //
  109. // sbMain
  110. //
  111. self.sbMain.Items.AddRange(array of System.Windows.Forms.ToolStripItem([self.lblStatus,
  112.       self.lblError]));
  113. self.sbMain.Location := new System.Drawing.Point(0466);
  114. self.sbMain.Name := 'sbMain';
  115. self.sbMain.Size := new System.Drawing.Size(35822);
  116. self.sbMain.TabIndex := 9;
  117. self.sbMain.Text := 'statusStrip1';
  118. //
  119. // lblStatus
  120. //
  121. self.lblStatus.Name := 'lblStatus';
  122. self.lblStatus.Size := new System.Drawing.Size(4117);
  123. self.lblStatus.Text := 'Logoff';
  124. //
  125. // lblError
  126. //
  127. self.lblError.Name := 'lblError';
  128. self.lblError.Size := new System.Drawing.Size(5317);
  129. self.lblError.Text := 'No Error';
  130. //
  131. // gbMsg
  132. //
  133. self.gbMsg.Controls.Add(self.lblPhoneNo);
  134. self.gbMsg.Controls.Add(self.edtSendMsg);
  135. self.gbMsg.Controls.Add(self.btnSend);
  136. self.gbMsg.Controls.Add(self.edtPhoneNo);
  137. self.gbMsg.Controls.Add(self.edtMsg);
  138. self.gbMsg.Location := new System.Drawing.Point(12198);
  139. self.gbMsg.Name := 'gbMsg';
  140. self.gbMsg.Size := new System.Drawing.Size(337231);
  141. self.gbMsg.TabIndex := 8;
  142. self.gbMsg.TabStop := false;
  143. self.gbMsg.Text := 'Message';
  144. //
  145. // lblPhoneNo
  146. //
  147. self.lblPhoneNo.AutoSize := true;
  148. self.lblPhoneNo.Location := new System.Drawing.Point(11174);
  149. self.lblPhoneNo.Name := 'lblPhoneNo';
  150. self.lblPhoneNo.Size := new System.Drawing.Size(5312);
  151. self.lblPhoneNo.TabIndex := 6;
  152. self.lblPhoneNo.Text := 'Phone No';
  153. //
  154. // edtSendMsg
  155. //
  156. self.edtSendMsg.Location := new System.Drawing.Point(7198);
  157. self.edtSendMsg.Name := 'edtSendMsg';
  158. self.edtSendMsg.Size := new System.Drawing.Size(24921);
  159. self.edtSendMsg.TabIndex := 5;
  160. //
  161. // btnSend
  162. //
  163. self.btnSend.Location := new System.Drawing.Point(262196);
  164. self.btnSend.Name := 'btnSend';
  165. self.btnSend.Size := new System.Drawing.Size(6923);
  166. self.btnSend.TabIndex := 4;
  167. self.btnSend.Text := 'Send';
  168. self.btnSend.UseVisualStyleBackColor := true;
  169. self.btnSend.Click += new System.EventHandler(@self.btnSend_Click);
  170. //
  171. // edtPhoneNo
  172. //
  173. self.edtPhoneNo.Location := new System.Drawing.Point(68171);
  174. self.edtPhoneNo.Name := 'edtPhoneNo';
  175. self.edtPhoneNo.Size := new System.Drawing.Size(14521);
  176. self.edtPhoneNo.TabIndex := 3;
  177. //
  178. // edtMsg
  179. //
  180. self.edtMsg.Location := new System.Drawing.Point(520);
  181. self.edtMsg.Multiline := true;
  182. self.edtMsg.Name := 'edtMsg';
  183. self.edtMsg.ReadOnly := true;
  184. self.edtMsg.ScrollBars := System.Windows.Forms.ScrollBars.Vertical;
  185. self.edtMsg.Size := new System.Drawing.Size(326145);
  186. self.edtMsg.TabIndex := 1;
  187. //
  188. // btnLogin
  189. //
  190. self.btnLogin.Location := new System.Drawing.Point(27412);
  191. self.btnLogin.Name := 'btnLogin';
  192. self.btnLogin.Size := new System.Drawing.Size(7523);
  193. self.btnLogin.TabIndex := 6;
  194. self.btnLogin.Text := 'Login';
  195. self.btnLogin.UseVisualStyleBackColor := true;
  196. self.btnLogin.Click += new System.EventHandler(@self.btnLogin_Click);
  197. //
  198. // edtUserID
  199. //
  200. self.edtUserID.Location := new System.Drawing.Point(6917);
  201. self.edtUserID.Name := 'edtUserID';
  202. self.edtUserID.Size := new System.Drawing.Size(18021);
  203. self.edtUserID.TabIndex := 3;
  204. //
  205. // edtPassword
  206. //
  207. self.edtPassword.Location := new System.Drawing.Point(6944);
  208. self.edtPassword.Name := 'edtPassword';
  209. self.edtPassword.PasswordChar := '*';
  210. self.edtPassword.Size := new System.Drawing.Size(18021);
  211. self.edtPassword.TabIndex := 4;
  212. //
  213. // lblAccount
  214. //
  215. self.lblAccount.AutoSize := true;
  216. self.lblAccount.Location := new System.Drawing.Point(620);
  217. self.lblAccount.Name := 'lblAccount';
  218. self.lblAccount.Size := new System.Drawing.Size(4712);
  219. self.lblAccount.TabIndex := 1;
  220. self.lblAccount.Text := 'Accoumt';
  221. //
  222. // lblPassword
  223. //
  224. self.lblPassword.AutoSize := true;
  225. self.lblPassword.Location := new System.Drawing.Point(647);
  226. self.lblPassword.Name := 'lblPassword';
  227. self.lblPassword.Size := new System.Drawing.Size(5312);
  228. self.lblPassword.TabIndex := 2;
  229. self.lblPassword.Text := 'Password';
  230. //
  231. // gbLogin
  232. //
  233. self.gbLogin.Controls.Add(self.edtPassword);
  234. self.gbLogin.Controls.Add(self.edtUserID);
  235. self.gbLogin.Controls.Add(self.lblAccount);
  236. self.gbLogin.Controls.Add(self.lblPassword);
  237. self.gbLogin.Location := new System.Drawing.Point(116);
  238. self.gbLogin.Name := 'gbLogin';
  239. self.gbLogin.Size := new System.Drawing.Size(25580);
  240. self.gbLogin.TabIndex := 7;
  241. self.gbLogin.TabStop := false;
  242. self.gbLogin.Text := 'Login';
  243. //
  244. // btnLogoff
  245. //
  246. self.btnLogoff.Location := new System.Drawing.Point(27441);
  247. self.btnLogoff.Name := 'btnLogoff';
  248. self.btnLogoff.Size := new System.Drawing.Size(7523);
  249. self.btnLogoff.TabIndex := 10;
  250. self.btnLogoff.Text := 'Logoff';
  251. self.btnLogoff.UseVisualStyleBackColor := true;
  252. self.btnLogoff.Click += new System.EventHandler(@self.btnLogoff_Click);
  253. //
  254. // gbFriendLst
  255. //
  256. self.gbFriendLst.Controls.Add(self.lstFriendLst);
  257. self.gbFriendLst.Location := new System.Drawing.Point(1192);
  258. self.gbFriendLst.Name := 'gbFriendLst';
  259. self.gbFriendLst.Size := new System.Drawing.Size(338100);
  260. self.gbFriendLst.TabIndex := 11;
  261. self.gbFriendLst.TabStop := false;
  262. self.gbFriendLst.Text := 'Friend List';
  263. //
  264. // lstFriendLst
  265. //
  266. self.lstFriendLst.FormattingEnabled := true;
  267. self.lstFriendLst.ItemHeight := 12;
  268. self.lstFriendLst.Location := new System.Drawing.Point(818);
  269. self.lstFriendLst.Name := 'lstFriendLst';
  270. self.lstFriendLst.Size := new System.Drawing.Size(32476);
  271. self.lstFriendLst.TabIndex := 0;
  272. //
  273. // btnSendSelf
  274. //
  275. self.btnSendSelf.Location := new System.Drawing.Point(243435);
  276. self.btnSendSelf.Name := 'btnSendSelf';
  277. self.btnSendSelf.Size := new System.Drawing.Size(10623);
  278. self.btnSendSelf.TabIndex := 12;
  279. self.btnSendSelf.Text := 'Send To Self';
  280. self.btnSendSelf.UseVisualStyleBackColor := true;
  281. self.btnSendSelf.Click += new System.EventHandler(@self.btnSendSelf_Click);
  282. //
  283. // MainForm
  284. //
  285. self.ClientSize := new System.Drawing.Size(358488);
  286. self.Controls.Add(self.btnSendSelf);
  287. self.Controls.Add(self.gbFriendLst);
  288. self.Controls.Add(self.btnLogoff);
  289. self.Controls.Add(self.sbMain);
  290. self.Controls.Add(self.gbMsg);
  291. self.Controls.Add(self.btnLogin);
  292. self.Controls.Add(self.gbLogin);
  293. self.Icon := (resources.GetObject('$this.Icon'as System.Drawing.Icon);
  294. self.Name := 'MainForm';
  295. self.Text := 'Fetion';
  296. self.Load += new System.EventHandler(@self.MainForm_Load);
  297. self.sbMain.ResumeLayout(false);
  298. self.sbMain.PerformLayout();
  299. self.gbMsg.ResumeLayout(false);
  300. self.gbMsg.PerformLayout();
  301. self.gbLogin.ResumeLayout(false);
  302. self.gbLogin.PerformLayout();
  303. self.gbFriendLst.ResumeLayout(false);
  304. self.ResumeLayout(false);
  305. self.PerformLayout();
  306. end;
  307. {$ENDREGION}
  308. method MainForm.MainForm_Load(sender: System.Object; e: System.EventArgs);
  309. begin
  310. sdk := new FetionSDK;
  311. bLogon := false;
  312. sdk.SDK_UserSatusChange += new FetionSDK.SDK_UserSatusChangedEventHandler(sdk_SDK_UserSatusChange);
  313. sdk.SDK_ReceiveMessage += new FetionSDK.SDK_ReceiveMessageEventHandler(sdk_SDK_ReceiveMessage);
  314. sdk.SDK_Error += new FetionSDK.SDK_ErrorEventHandler(sdk_SDK_Error);
  315. end;
  316. procedure MainForm.sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);
  317. var
  318.     currStat: string;
  319.     i: Integer;
  320.     lst : List<Contact>;
  321. begin
  322.     currStat := e.NewStatus.ToString();
  323.     lblStatus.Text := currStat;
  324.    
  325.     case e.NewStatus of
  326.         Imps.Client.UserAccountStatus.Logon:
  327.         begin
  328.             bLogon := true;
  329.             lstFriendLst.Items.Clear();
  330.             lst := sdk.ContactControl.getAllContactList();
  331.             for i := 0 to lst.Count - 1 do
  332.             begin
  333.                 lstFriendLst.Items.Add(
  334.                     string.Format("{0} [Fetion: {1} Mobile: {2}]",
  335.                     lst[i].DisplayName, lst[i].Uri.Id,
  336.                     IfThen(lst[i].PersonalInfo.MobileNo = string.Empty, "Not Published", lst[i].PersonalInfo.MobileNo)));
  337.             end;
  338.         end;
  339.     else
  340.         begin
  341.             bLogon := false;
  342.             lstFriendLst.Items.Clear();
  343.         end;
  344.     {
  345.         Imps.Client.UserAccountStatus.Disconnected: ;
  346.         Imps.Client.UserAccountStatus.Initialized: ;
  347.         Imps.Client.UserAccountStatus.Loginning: ;
  348.        
  349.         Imps.Client.UserAccountStatus.Logoff: ;
  350.         Imps.Client.UserAccountStatus.Logouting: ;
  351.         Imps.Client.UserAccountStatus.None: ;
  352.         Imps.Client.UserAccountStatus.OfflineLogon: ;
  353.         Imps.Client.UserAccountStatus.StandBy: ;
  354.         Imps.Client.UserAccountStatus.WaitReconnect: ;
  355.     }
  356.     end;
  357.    
  358. end;
  359. method MainForm.btnLogin_Click(sender: System.Object; e: System.EventArgs);
  360. begin
  361.     if not bLogon then
  362.     begin
  363.         sdk.AccountManager.FillUserIdAndPassword(edtUserID.Text,edtPassword.Text,false);
  364.         sdk.AccountManager.LoginOrLogout();
  365.     end;
  366. end;
  367. procedure MainForm.sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);
  368. begin
  369.     lblError.Text := e.Message.Message;
  370. end;
  371. method MainForm.btnLogoff_Click(sender: System.Object; e: System.EventArgs);
  372. begin
  373.     if bLogon then
  374.        sdk.AccountManager.LoginOrLogout();
  375. end;
  376. function MainForm.IfThen(ABool: Boolean; AStr1, AStr2: String): String;
  377. begin
  378.     if ABool then
  379.         result := AStr1
  380.     else
  381.         result := AStr2;
  382. end;
  383. method MainForm.btnSend_Click(sender: System.Object; e: System.EventArgs);
  384. begin
  385.     sdk.ContactControl.SendIM.SendIM(edtPhoneNo.Text, edtSendMsg.Text);
  386.     edtMsg.Text := edtMsg.Text + 'Self: ' + edtSendMsg.Text + '/r/n';   
  387. end;
  388. procedure MainForm.sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);
  389. begin
  390.     edtMsg.Text := edtMsg.Text + e.Contact.DisplayName + ': '+e.Message;
  391. end;
  392. method MainForm.btnSendSelf_Click(sender: System.Object; e: System.EventArgs);
  393. begin
  394.     sdk.ContactControl.SendSMS.SendSMS(sdk.ContactControl.getMyself.Uri.Id,edtSendMsg.Text);
  395. end;
  396. end.



转自:http://hi.baidu.com/rarnu/blog/item/c365237f63b5db0e29388a31.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值