android 高度模块化,Android模块化

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

基于Nodejs+Koa搭建极光推送的用户服务端程序,RESTful接口、文件上传。

服务框架

使用 Koa脚手架 快速开发服务端程序,clone下来此项目,删除controller下的UserController.js、comomon/UploadController.js,新建PushController.js,编写处理请求的代码:1

2

3

4

5

6

7

8

9

10

11

12

13var pushNotice = async (ctx, next) => {

let param = ctx.request.body

console.log(param)

ctx.body = format({}, ERROR_CODE.OK)

await next()

}

module.exports = {

'POST /push/notice': pushNotice

}

先测试一下接口,用postman提交请求

d047f7f88059048f2d8e98fab9dec243.png

接收到的参数如下1

2{ alias: [ '17816118870', '18796221162' ],

content: { : '1232' } }

集成JPush SDK

参考极光推送官方文档,安装sdk依赖,1npm install jpush-async --save

在PushController.js中引入依赖1

2

3

4

5const JPush = require('jpush-async').JPushAsync

const jPushClient = JPush.buildClient(

'0a2*****************2ba',

'5e2*****************8dc'

)

buildClient()中 两个参数分别为为 极光推送的AppKey以及Master Secret,填写这两个参需要注意,不要复制错误或留有空格,这都会导致服务调用异常。

使用Alias方式发送自定义消息1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24* jpush send message

* @param {*} alias

* @param {*} notice

*/

var jPushSend = function(alias, notice){

jPushClient

.push()

.setPlatform('ios', 'android')

// 设置别名

.setAudience(JPush.alias(alias))

// .setNotification('NotificationContent')

// 设置推送内容

.setMessage(notice)

.setOptions(null, 60)

.send()

.then(function(result){

console.log(result)

})

.catch(function(err){

console.log(err)

})

}

alias格式为 ‘17816227765,18746578867’,所以需要将接收到的参数格式化,直接数组转字符串即可1

2

3

4

5

6

7

8

9var pushNotice = async (ctx, next) => {

let param = ctx.request.body

console.log(param)

let alias = param.alias.toString()

param.content.type = 'NOTICE'

jPushSend(alias, JSON.stringify(param.content))

ctx.body = format({}, ERROR_CODE.OK)

await next()

}

进行接口测试,移动端可正常接收推送消息。

推送媒体文件

实现思路为 接收客户端推送图片、视频、语音等媒体文件,保存成功后根据推送参数向指定客户端推送消息,附带上文件的url(多个文件则放入数组)以及其他的推送内容。

保存推送的媒体文件

使用文件上传接口的部分代码,将文件保存在服务端或第三方文件服务器,并获得文件的url,1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50* handle media push

* @param {} ctx

* @param {*} next

*/

var pushMedia = async (ctx, next) => {

// ctx.req.files contains files uploaded

// ctx.req.body contains fields property

console.log(ctx.req.files)

console.log(ctx.req.body)

if (!ctx.req.files || ctx.req.files.length == 0) {

ctx.body = format({}, ERROR_CODE.FILE_NULL)

await next()

return

}

// push param

let param = ctx.req.body

param.content = {}

param.content.type = 'MEDIA'

let alias = param.alias.toString()

let datas

// single file

if (ctx.req.files.length == 1) {

let file = ctx.req.files[0]

datas = await saveFile(file)

if (datas) {

ctx.body = format(datas, ERROR_CODE.OK)

} else {

ctx.body = format({}, ERROR_CODE.FILE_WRITE_ERROR)

}

} else {

// multi files

datas = []

for (let i = 0; i < ctx.req.files.length; i++) {

let file = ctx.req.files[i]

let res = await saveFile(file)

if (res) {

datas.push(res)

}

}

ctx.body = format({ datas }, ERROR_CODE.OK)

}

// push

param.content.media = datas

jPushSend(alias, JSON.stringify(param.content))

await next()

}

推送消息

param.content是完整的推送内容,param.content.media是媒体文件的url,jPushSend(alias, JSON.stringify(param.content))

调用SDK完成推送。

返回信息为文件上传结果1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16{

"code": 0,

"msg": "OK",

"data": {

"datas": [

{

"url": "/uploads/2018-10-21/9e0e8bde-2e22-4f8d-9ada-bbe74c6a6d8d.png",

"name": "study.png"

},

{

"url": "/uploads/2018-10-21/92b10c98-fc1e-4be0-ba48-9111069fc485.jpeg",

"name": "1_S7BwOWdiQNcL0HHG2fDL0w.jpeg"

}

]

}

}

至此,基于Nodejs+JPush搭建的推送服务基本完成。

多推送通道

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值