一、登陆开发者账号与配置unipush
1、注册登陆账号(使用Hbuilder登陆账号)
unicloud后台:uniCloud控制台
开发者中心:开发者中心
点击unipush的 菜单开通unipush服务(官方文档有完整的开通教程,一定要看,并且跟着完成配置,不然影响后边运行) uni-push2统一推送 | uni-app官网
2、运行准备:
2.1 配置app模块(如果测试在线的话就不用勾选离线推送)
2.2打包基座(建议使用自定义调试基座)
运行-》运行到手机或者模拟器-》制作自定义调试基座(打包时间可能有点长,要生成云端证书)
3、验证在线推送
在APP.vue
onLaunch: function() { // uni-app客户端获取push客户端标记,代码可以实现在App.vue中 uni.getPushClientId({ success: (res) => { let push_clientid = res.cid console.log('客户端推送标识cid:',push_clientid) }, fail(err) { console.log(err) } })}
点击运行,运行到手机或者手机模拟器,运行到自定义基座,选择数据线连接的自己的手机设备(开发者模式,允许usb调试)或者模拟器,如果控制台讲设备id打印出来说明可以推送成功
4、dcloud后台测试推送
点击预览
点击确认
手机或者模拟器看到一下消息说明推送成功,
5、php服务器给App推送消息
5.1创建云开发环境,关联云服务空间
右键点击项目,带你关联云服务空间或者项目,选择自己的云服务空间
云服务空间 uniCloud控制台
有一个免费的云服务空间,只有一个月,开通包年包月也可以,测试的话用基础版就可以,时间可能有点长,耐心一点
5.2新建云函数
右键点击选择新建云函/云对象,点击创建
5.3配置编写云函数
package.json
{ "name": "unipush", "version": "1.0.0", "main": "index.js", "description": "消息推送", "extensions": { "uni-cloud-push": {} }, "author": "vini123"}
index.js
'use strict';const uniPush = uniCloud.getPushManager({appId:"__UNI__"}) //注意这里需要传入你的应用appId exports.main = async (event, context) => { return await uniPush.sendMessage({ //填写上一步在uni-app客户端获取到的客户端推送标识push_clientid "push_clientid": "自己的设备号", "force_notification":true, //填写true,客户端就会自动创建“通知栏消息”。 "title": "您收到一条消息", "content": "请查看", "payload": { "text":"体验一下uni-push2.0" } }) };
右击新建的云函数点击上传并运行,如果手机或者模拟器看到推送的消息,说明成功,没有成功啧查看一下是否有什么缺漏的步骤,可以后天查看一下云函数推送失败的日志,后台可以查看云函数 uniCloud控制台
自定义推送消息 修改index.js,上传部署
const uniPush = uniCloud.getPushManager({ appId: "__UNI__" //z自己的appid }) exports.main = async (event) => { let obj = JSON.parse(event.body) const res = await uniPush.sendMessage({ "push_clientid": obj.clientid, // 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000 "title": obj.title, // 标题 "content": obj.content, // 内容 "payload": obj.payload, // 数据 "force_notification": true, // 服务端推送 需要加这一句 "request_id": obj.request_id ,//请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失 }) };
先使用postman推送消息 ,后台查看云函数,点击详情,查看url,可以点击编辑修改自己的云函数访问名,点击复制路径到postman
点击发送,注意,在编辑完云函数之后需要重新运行一下app,不然有可能收不到推送消息(卡了我好一会儿)
返回数据是这样的就说明成功,没有收到推送的看一下是否修改content-type和是否重新运行
注:url是都可以访问的,所以一定要注意隐私
php给app推送消息
function send_message(){ $url = '自己的url'; $data = [ 'push_clientid'=>'自己的设备号', 'title'=>'测试title', 'content'=>'这是测试', 'payload'=>'{"text":"体验一下uni-push2.0"}' ]; $rs = $this->httpcurl($url, json_encode($data),true, true); dump($rs); } public function httpcurl($url, $params = false, $post = false, $https = false){ $httpInfo = array(); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if ($post === true) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_URL, $url); } else { if ($params === false) { curl_setopt($ch, CURLOPT_URL, $url); } else { if (is_array($params)) { $params = http_build_query($params); } curl_setopt($ch, CURLOPT_URL, $url . '?' . $params); } } if ($https === true) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 } $response = curl_exec($ch); // if ($response === false) { // Illuminate\Support\Facades\Log::error(sprintf('curl 错误。 url:%s, error:%s', $url, curl_error($ch))); // return false; // } $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $httpInfo = array_merge($httpInfo, curl_getinfo($ch)); curl_close($ch); return $response; }
直接调用send_message就可以实现给app推送消息了
来源地址:https://blog.csdn.net/weixin_48393490/article/details/129981929