背景
有项目需要使用uniapp的unipush功能,由于第一次开发,网上查了好多教程,最终完美实现,这里记录一下流程。
相关文档
这里是一些官方的文档,有兴趣的可以去学习一下。
uni-app官方文档入口
https://uniapp.dcloud.io/api/plugins/push
uniPush官方使用指南
https://ask.dcloud.net.cn/article/35622
个推官方文档入口
https://docs.getui.com/
推送H5+API接口:
https://www.html5plus.org/doc/zh_cn/push.html
一、流程
1.UNIAPP已经集成了第三方应用个推SDK,APP运行后获取CID返回给服务器并保存;
2.服务器端调用个推的API进行消息推送,个推SDK将接收到的推送消息回调给App进行处理。
二、推送方式
个推提供JAVA、C#、PHP、Python等多种语言版本的服务端API SDK,可以和各种第三方应用服务器技术架构进行对接。为了最大程度提高消息推送性能,第三方开发者需要根据业务需求合理选择消息推送形式。本次记录是利用Thinkphp为后台框架的对接,实现单推、多推和群推的功能。详细更多介绍请参考官方文档:http://docs.getui.com/
三、基础环境准备
1. 平台配置
UNIPUSH开通申请,这部分不是难点参考官方教程在dcloud中配置各个厂商的api和secret。官方申请开通教程传送门:https://ask.dcloud.net.cn/article/35716
这里要说一下为啥要配置厂商呢?APP用户不可能实时在线,第三方的消息推送会被阻挡,最好的方式就是按照厂商的要求接入各个推送服务。这样做在app关闭的时候,可以通过厂商的服务器推送消息给手机通知系统。非常方便,这部分DCLOUD已经帮你做好了。你只需要注册下各个厂商的开发平台,填写到unipush的配置中就可以。
2. uni-app权限配置
Hbuilder的基座配置的信息都是dcloud的,所以用别人的app是没办法测试推送服务的。可以通过以下两种方式解决这个问题:
- 云打包时打包成为自己的app后测试
- 制作自定义的基座(很简单),这个基座的信息都是自己的,所以可以测试运行的时候选择自定制基座,或者直接云打包后的的apk安装到手机测试。
温馨提示: 可以先体验 uni push 后台界面推送(帮助理解推送的过程)
相要在APP中正确收到推送信息,还需要配置应用信息,android包名和应用的签名必须要和应用的一样不然收不到,签名生成可参考我的另外一片文章:
uniapp开发Android平台签名证书(.keystore)生成全流程
3、获取应用配置
uniPush配置好后查看应用的配置,包含appid、AppKey、MasterSecret等信息。
记录应用的appid、AppKey、MasterSecret,会在服务端开发中用到。具体代码请继续往下阅读吧
四、APP端代码
注意:代码位置只能在app.vue的onLaunch中,其他地方可能会有问题。
//#ifdef APP-PLUS
/* 客户端的基本信息,可以获取到客户端的CID 测试的时候会用到*/
var info = plus.push.getClientInfo();
var client_id = info.clientid;
console.log( JSON.stringify( info ) );
console.log( 'CID:'+client_id );
/* 使用:H5+的方式监听,实现推送 */
plus.push.addEventListener("click", function(msg) {
console.log("click:"+JSON.stringify(msg));
console.log(msg.payload);
console.log(JSON.stringify(msg));
//这里可以写跳转业务代码
uni.navigateTo({
url: 'pages/user/user?参数'
})
}, false);
// 监听在线消息事件
plus.push.addEventListener("receive", function(msg) {
//这里可以写跳转业务代码
console.log("recevice:"+JSON.stringify(msg))
}, false);
//#endif
这里listener监听的两种事件:
- “click”:从系统消息中心点击消息启动应用事件;
- “receive”:应用从推送服务器接收到推送消息事件。
五、后端代码(PHP)
本实例中后端代码是整合Thinkphp+RestAPI V2的代码。
- 下载个推SDK,下载地址:https://docs.getui.com/getui/server/rest_v2/service_sdk/,SDK支持Composer项目依赖。
composer require getuilaboratory/getui-pushapi-php-client-v2
本次项目并未使用Composer依赖安装,下载安装到extend目录下。在extend目录下新建目录getui/sdk,并解压文件到getui/sdk目录下。
- 创建GeTui.php文件
在目录extend/getui/下创建GeTui.php文件,代码如下:
<?php
namespace getui;
use think\Loader;
class GeTui
{
private $host = 'https://restapi.getui.com';
//测试
private $appkey = '';
private $appid = '';
private $mastersecret = '';
private $token = null;
private $taskId = null;
private $api = null;
private $pakename ='你的APP包名';
/**
* 初始化
*/
public function __construct($appid=null,$appkey=null,$mastersecret=null){
$this->init($appid,$appkey,$mastersecret);
$this->__loader();
}
/**
* 加载SDK文件,只需引入GTClient.php文件即可
* 实例化个推api接口
*/
private function __loader()
{
require_once(dirname(__FILE__) . '/' . 'sdk/GTClient.php');
$this->api = new \GTClient($this->host,$this->appkey,$this->appid,$this->mastersecret);
}
private function init($appid=null,$appkey