當一個業務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微信群,以了解更多情況!