kbmMW Server服务端集成DPush推送
当一个业务app没有启动,处于离线状态,这时候,有另外的用户提交了一笔业务,需要当前的用户得到通知,进行审核,这对于用户来说,是一个非常方便的功能!说起来美好,但对于Delphi来说,实现离线的消息推送,一直没有好的方案,也别说没有,谁让Goolgle的推送咱用不上呢?
现在好了,有DPush推送方案,前后端统一解决,即解决了手机端离线接收推送消息,同时,也实现了服务端,支持各个厂家的推送系统。象市面上的华为、小米、Oppo、Vivo等。怎么样,对于有推送需求的Delphi开发者,是不是很开心!
接下来,我将介绍,如何使用这一方案,在自己的系统中实现手机推送,先感谢作者大力支持与快速反应,目前,我已经完成了 kbmMW Server与DPush集成。
首先呢,需要向DPush购买推送服务,没多少钱的,一年2K多,(个推按日活量收费,1000之内的日活量,是一个月2K)。然后呢,作者会给你先处理好后台的数据,给你如下内容:
1.推送服务器的地址,及后台的用户名与密码,你可以登录到后台,管理你的推送。这个服务器地址,写码时也要用到。我得到的是这样的:http://dpush.yseas.com/我的名子
上图,是我登录后的样子,
2.进入推送配置,见下图,在这里,你得到AppName,AppKey,Api账号,Api加密密钥等,注意这四个参数代码中也要用到。
现在,利用上面得到的信息,我们就可以在kbmMWServer集成DPush服务端代码了。这里你可能要问,DPush服务端代码是干什么的?一句话来说,DPush服务端代码就是向DPush代理服务器注册及发送推送消息。现在配一张图来说明:
kbmMWServer首先向DPush代理服务器注册,然后就可以向他发送消息。DPush代理服务器把收到的消息,再发送给各厂商的推送服务器。各厂商推送服务器就会与他旗下的手机联系,保证手机App能离线收到推送消息。我们在kbmMWServer集成DPush服务端代码,就是实现kbmMWServer向DPush代理服务器注册。
接下来看代码:
首先,要引用Leo.PushServer.DPush.App单元,然后调用下面的代码,就完成了向DPush代理服务器注册任务。
TLeoDPushServerAppGroup.GetAddApp(AParam.ReadParam('PushAppName'), AParam.ReadParam('PushServerURL'), AParam.ReadParam('PushAppName'), AParam.ReadParam('PushAppKey'), AParam.ReadParam('PushAccount'), AParam.ReadParam('PushPassWord'));
GetAddApp原型:
class function GetAddApp(const AKey: string; const AServerUrl, aAppName, aAppKey, aAccount, APwd: string): TLeoDPushServerAppProxy; overload;
GetAddApp参数说明:
AKey:一个字符型的Key值,用于你标记注册的PushServer名称,通过这个Key值,可以查到一个注册过的Server,并用他来发送消息。
AServerUrl:推送服务器的地址,你购买服务时得到的
AAppName:App Name,也是购买服务时得到的,作者说这是一个全局唯一的,我上面的代码用他作为AKey值了
AAppKey:同上,购买服务时得到的
AAccount:账号名,同上购买服务时得到的
APwd:账号的加密密钥,同上购买服务时得到的
GetAddApp会按AKey去查找一个PushServer,如果没有,则建立一个并返回TLeoDPushServerAppProxy。
通过TLeoDPushServerAppProxy,我们就可以发送推送的消息了!
注意,GetAddApp是一个类方法,可以直接调用。关于TLeoDPushServerAppGroup类,可以查看源码进一步了解用法。
好了,现在我们注册了一个PushServer,接下来看看如何发送消息:
下面是我生产项目中集成的代码:
function TQueryService.SendPush(const Args: array of Variant): Variant; var vAcceptAccount, vTitle, vSubject, vSeriaNetJsonText, vErrorMsg: string; begin vAcceptAccount:=Args[0]; //业务账号 vTitle:=Args[1]; //消息标题 VSubject:=Args[2]; // vSeriaNetJsonText:=Args[3]; //JSON内容 try if TLeoDPushServerAppGroup.FindApp(GetPushServerKey).SendPush(vAcceptAccount, vTitle, vSubject, SO(vSeriaNetJsonText), vErrorMsg) then begin kbmMWLog.Log.Info('成功添加推送记录'); Exit('OK'); end else begin kbmMWLog.Log.Error('添加推送记录出错:' + vErrorMsg); Exit(vErrorMsg); end; except on E: Exception do begin kbmMWLog.Log.Error('添加推送记录出错:' + E.Message); Exit(E.Message); end; end; end;
上面的代码,通过TLeoDPushServerAppGroup.FindApp查到的下PushServer,然后调用SendPush方法,发送消息。
看一下SendPush的原型:
function TLeoDPushServerAppProxy.SendPush(const aAccount, ATitle, ASubject: string; const ASeriaNetData: ILeoSuperObject; out AErrorMsg: string): Boolean;
参数说明:
aAccount:业务账号,指你app应用中的一个具体用户,可以是用户ID
ATitle:消息的标题
ASubject:消息的摘要
ASeriaNetData:消息内容
AErrorMsg:返回的错误消息
对于我们Delphi开发者来说,只管用SendPush向DPush代理服务器发送消息,DPush代理服务器如何工作,就和我们没有关系了,反正能让咱的App能接收到具体的消息,是不是要有爽歪歪的感觉了!
总结来说,在服务端集成DPush,就分两步:
1.注册代理服务器
2.实现发送消息的方法,供客户端调用。
写到这里,你也会体会到,服务端的集成,因为DPush都为我们准备好了,所以才让我们两步完成。怎么样?有没有心动,也想基于DPush实现App的推送,那么扫描下图中的二维码,加入DPush微信群,以了解更多情况!