|
|

android消息推送服务,做了接近一个月时间吧,以前写的代码,也忘记了许多,先看下推送的效果吧!
(小米手机截图,三星机器也测试过了)
大体说一下,如果不借助第三方实现android推送服务吧!!!!原理,就是长连接
.net写的服务,没有用java一些服务框架。
先说下功能:
1:能够按照设备ID,别名,类别去推送消息提,能够定时延时推送消息,
2:能够读取离线消息,数据库储存了发送成功和离线的消息记录
3:数据库定时器,自动删除垃圾消息。
4:能够显示消息的角标。
附上以前写的存储过程吧!
- -- =============================================
- -- Author: <itsvse>
- -- Create date: <2016.06.12>
- -- Descrip{过滤}tion: <添加发送消息记录>
- -- =============================================
- ALTER PROCEDURE [dbo].[pAddPushMessage]
- @MessageType tinyint, --MessageType 1代表 即时 2代表 延时 3代表 定时 (这个主要是标识,没有多大意义)
- @Audience XML, --发送对象
- @Content nvarchar(4000), --消息内容
- @Extras nvarchar(400)=null,
- @StartTime datetime=null,
- @EndTime datetime=null
- AS
- BEGIN
- SET XACT_ABORT ON --使用存储过程执行事物,需要开启XACT_ABORT参数(默认值为Off),将该参数设置为On,表示当执行事务时,如果出错,会将transcation设置为uncommittable状态,那么在语句块批处理结束后将回滚所有操作;如果该参数设置为Off,表示当执行事务时,如果出错,出错的语句将不会执行,其他正确的操作继续执行。
- BEGIN transaction --事务开始
- IF(@StartTime IS NULL AND @EndTime IS NULL)
- BEGIN
- SET @StartTime=GETDATE()
- SET @EndTime=GETDATE()+30
- END
- --插入消息表
- DECLARE @BEID INT
- INSERT INTO [PushMessage]([MessageType],[Audience],[Content],[Extras],[StartTime],[EndTime],[State]) VALUES(@MessageType,@Audience,@Content,@Extras,@StartTime,@EndTime,'1');
- SET @BEID= SCOPE_IDENTITY() --返回插入的主键ID
- --插入临时表
- DECLARE @TYPE INT --发送对象类别,0代表所有 1代表设备 2代表 别名 3代表自定义规则
- -- 0 1 都是代表设备 2代表别名
- SET @TYPE = @audience.value('(//audience//type/text())[1]','int')
- IF(@TYPE=0)
- BEGIN
- --即时发送全部
- INSERT INTO [TemporaryMessage]([MessageType],[Audience],[Content],[StartTime],[EndTime],[Extras],[PushMessageID]) SELECT 0,DeviceID,@Content,@StartTime,@EndTime,@Extras,@BEID FROM DeviceInfo WHERE State='1'
- END
- IF(@TYPE=1)
- BEGIN
- --发送指定设备
- INSERT INTO [TemporaryMessage]([MessageType],[Audience],[Content],[StartTime],[EndTime],[Extras],[PushMessageID]) SELECT 1,Temp.items,@Content,@StartTime,@EndTime,@Extras,@BEID FROM splitl(@audience.value('(//audience//device/text())[1]','VARCHAR(MAX)'),',') as Temp
- END
- IF(@TYPE=2)
- BEGIN
- --发送指定别名
- INSERT INTO [TemporaryMessage]([MessageType],[Audience],[Content],[StartTime],[EndTime],[Extras],[PushMessageID]) SELECT 2,Temp.items,@Content,@StartTime,@EndTime,@Extras,@BEID FROM splitl(@audience.value('(//audience//alias/text())[1]','VARCHAR(MAX)'),',') as Temp
- END
- IF(@TYPE=3)
- BEGIN
- --自定义规则tag
- INSERT INTO [TemporaryMessage]([MessageType],[Audience],[Content],[StartTime],[EndTime],[Extras],[PushMessageID]) VALUES(3,@audience.value('(//audience//tag/text())[1]','VARCHAR(MAX)'),@Content,@StartTime,@EndTime,@Extras,@BEID)
- END
- COMMIT transaction --提交事务
- END
复制代码
开启android推送服务,我们就可以实现android消息推送了
然后,post一条json数据到我们的webapi接口,剩下的事就交个消息推送服务吧!!!!
结束,大体说了下流程,
其实,不借助极光,百度云推送,阿里移动推送,一样可以自己做推送!
|
上一篇:asp.net 用redis实现sso单点登录方案下一篇:类是一种构造是什么意思啊?
|