红鱼儿

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微信群,以了解更多情况!


 

posted on 2021-05-14 11:13  红鱼儿  阅读(505)  评论(1编辑  收藏  举报