前文,我们介绍了在kbmMW服务端集成DPush,实现kbmMWServer向DPush代理服务器发送消息,由于DPush优美的封装,代码量已经非常少了,实现起来非常方便与简洁。这个实现后,我们就可以在App客户端调用kbmMWServer封装的方法,轻松实现App推送消息给其他的用户。现在来看一下具体调用的代码:
procedure TTestForm.Button4Click(Sender: TObject); var s:string; begin s:=kbmMWSimpleClient.Request(‘MyQueryService‘,‘1.0‘,‘SendPush‘,[‘用户的ID‘,‘消息的标题‘,‘消息的摘要!‘,‘{“Data”:"消息的内容"}‘]); ShowMessage(s); end;
如果你熟悉kbmMW,那很容易就看懂上面代码,就是用SimpleClient实现客户端调用服务端的SendPush方法。
好了,我们已经知道在App中发送消息,现在我们来看如何集成DPush,实现App离线接收消息。
第一步,我们要在项目中发布各个厂商推送消息SDK的中客户端Jar。如下图:
在项目管理器中,增加上面6个Jar.
第二步:发布hmsrootcas.bks文件
这两步的文件,都在 XXX:\DPush\Client\res目录下。
第三步,去各个厂家的开发平台去申请推送
这一步是最麻烦的,要有心理准备,各个厂家的申请过程中需要的资料是不一样的,申请好以后呢,就可以做下一步了。
我准备用单独的文章来介绍这复杂的申请过程以及申请过程中的注意事项。
第四步,修改AndroidManifest.template.xml
这一步比较麻烦,改的地方很多,不过,DPush Client Demo中已经给我们做好了例子,直接复制过来,然后按从各厂商申到的推送的参数来配置。
第五步,用代码来联接DPush代理服务器
uses Leo.Enum.Helper, Leo.FMX.Log, Leo.PushService.Consts, Leo.PushService.DPush, ... private FPushService: TLeoDPushService; ... //以下代码从ClientDemo中复制的: const AppName = ‘xxxxx‘; AppKey = ‘xxxxx‘; ServerUrl = ‘dpush.yseas.com/mydemo‘; procedure TMainFrm_DPush.InitPushService; begin if FPushService = nil then begin FPushService := TLeoDPushService.Create(ServerUrl, AppName, AppKey); FPushService.OnPushError := DoPushError; FPushService.OnLogEvent := OnPushLog; FPushService.OnGetPushDataEvent := DoObservePushNotfiy; FPushService.OnSuccRegistDevice := DoSuccRegistDevice; FPushService.Connect(); // Connect后正常应该会收到获取到业务Token的回调DoGetToken(可以通过OnLogEvent观察),表示业务推送库已经连接成功,如果没有需要检查 log日志 // 搜6003错误,表示华为的Sdk,后台是是否配置了指纹,请参见华为推送申请说明 end; end;
ServerUrl,AppName,AppKey:这三个值跟服务端用到的是相同的,都是在申请DPush服务时得到的。用这三个参数,就可以建立一个TLeoDPushService实例,上面的代码中是FPushService。
TLeoDPushService实现了四个事件:
OnPushError:执行Connect方法时出现错误触发
OnLogEvent:接收推送的日志,用这个事件,可以跟踪TLeoDPushService执行过程情况
OnGetPushDataEvent:App收到消息,用户在点击时启动App并触发,在这个事件中,我们可以根据收到的消息处理自己的业务逻辑。
OnSuccRegisDevice:执行Connect成功时触发。
万事大吉,假设第三、四步正确完成,那么编译程序到手机上并运行,就可以收到离线消息了!
如果你也想使用DPush实现自己的App离线推送,请加入官方QQ群513637288,以了解更多情况。