React Native上集成腾讯推送服务TPNS
2020-05-31 本文已影响0人
乱七八糟谈技术
在项目中需要用到推送服务,之前使用的是腾讯的信鸽推送,但今年腾讯的信鸽免费服务将不再维护,被逼需要升级到付费的腾讯云推送服务TPNS。在升级的过程中,由于项目很长时间没有维护,使用的React Native,Node和NPM版本比较低,在升级的过程中也遇到不少问题,总结出来给有需要的人。
准备环境
手机端依赖包
React Native 0.32
React-native-tencent-xg 0.1.0
TPNS-SDK-Android
TPNS-SDK-IOS
服务端依赖包
1. Tencent xg
api library
编译工具
gradle V2.14.1
npm V6.4.1
Node V8.16.0
开发工具
Android Studio
VS code
实现
设备注册
- 第一步,在React Native Tencent XG模块中完成设备注册,由于升级到TPNS SDK, 之前的库React Native Tencent XG模块作者已经不再维护,因此需要在此模块中实现对新的TPNS SDK的支持。
- 第二步,调用TPNS SDK注册设备
- 第三步,TPNS返回设备的token
- 第四步,在callback函数中获取TPNS返回的设备token,并调用React Native的DeviceEventManageModule来发送消息给JS程序
- 第五步,ReactJS中获取到设备token,并调用平台的设备注册服务来将用户信息和设备token信息绑定。
推送消息
- 第一步,从移动端或者web端或者其他程序需要发送消息,首先调用平台的消息推送服务
- 第二步,从数据库中根据业务推送规则获取设备token,也可以群发
- 第三步, 调用XG push API来推送消息
- 第四步,将消息推送到TPNS
通知消息
- 第一步,TPNS推送消息到Android或者IOS
- 第二步,React Native Tencent XG模块里定义的Receiver接收到此消息,同样由于这个模块作者没有维护,需要根据最新的TPNS Android和IOS SDK来重构此功能
- 第三步,Receiver接受到消息,调用React Native的Android DeviceEventManageModule或IOS里的消息模块来发送消息给JS程序
- 第四步,React JS收到此消息,并根据业务规则显示在应用程序里。比如透传消息,通知消息需要做不同的处理
遇到的问题
兼容问题
在开发中遇到的问题,首先是包的编译问题。由于这是一个没有定期维护的项目,因此NPM, Node,Gradle的版本都比较低,因此在项目的开发过程中遇到一些版本兼容导致的编译错误。因此对于这种项目在开发过程中,建议首先是不要升级版本,沿用原始的版本,等功能都稳定后,再依次升级工具版本,逐个问题解决。平台升级问题
由于Tencent XG平台之前的SDK有些代码问题,特别是接口命名的英文名错误,在新的TPNS的SDK中都修改了。刚开发时没有注意这些,导致一些问题。此外,Tencent的推送平台SDK3版本和4版本域名也发生了变化,刚开始没有注意,每次推送报403错误而不是404错误,这个错误很让人迷惑,一直以为是认证问题,尝试了签名认证和Basic认证,都是403错误,花费些时间才得以解决。