您现在的位置是:首页 > 技术教程 正文

unipush2 php服务端调用推送

admin 阅读: 2024-03-18
后台-插件-广告管理-内容页头部广告(手机)

一、登陆开发者账号与配置unipush

1、注册登陆账号(使用Hbuilder登陆账号)

    unicloud后台:uniCloud控制台

    开发者中心:开发者中心       

   点击unipush的 菜单开通unipush服务(官方文档有完整的开通教程,一定要看,并且跟着完成配置,不然影响后边运行)         uni-push2统一推送 | uni-app官网

2、运行准备:

    2.1 配置app模块(如果测试在线的话就不用勾选离线推送)

     2.2打包基座(建议使用自定义调试基座)

        运行-》运行到手机或者模拟器-》制作自定义调试基座(打包时间可能有点长,要生成云端证书)

 3、验证在线推送

        在APP.vue

  1. onLaunch: function() {
  2. // uni-app客户端获取push客户端标记,代码可以实现在App.vue中
  3. uni.getPushClientId({
  4. success: (res) => {
  5. let push_clientid = res.cid
  6. console.log('客户端推送标识cid:',push_clientid)
  7. },
  8. fail(err) {
  9. console.log(err)
  10. }
  11. })
  12. }

点击运行,运行到手机或者手机模拟器,运行到自定义基座,选择数据线连接的自己的手机设备(开发者模式,允许usb调试)或者模拟器,如果控制台讲设备id打印出来说明可以推送成功

4、dcloud后台测试推送

     点击预览

 点击确认

 手机或者模拟器看到一下消息说明推送成功,

5、php服务器给App推送消息

     5.1创建云开发环境,关联云服务空间

 右键点击项目,带你关联云服务空间或者项目,选择自己的云服务空间

 

    云服务空间  uniCloud控制台

    有一个免费的云服务空间,只有一个月,开通包年包月也可以,测试的话用基础版就可以,时间可能有点长,耐心一点

    5.2新建云函数

        

         右键点击选择新建云函/云对象,点击创建

 

    5.3配置编写云函数

        package.json

  1. {
  2. "name": "unipush",
  3. "version": "1.0.0",
  4. "main": "index.js",
  5. "description": "消息推送",
  6. "extensions": {
  7. "uni-cloud-push": {}
  8. },
  9. "author": "vini123"
  10. }

index.js

  1. 'use strict';
  2. const uniPush = uniCloud.getPushManager({appId:"__UNI__"}) //注意这里需要传入你的应用appId
  3. exports.main = async (event, context) => {
  4. return await uniPush.sendMessage({
  5. //填写上一步在uni-app客户端获取到的客户端推送标识push_clientid
  6. "push_clientid": "自己的设备号",
  7. "force_notification":true, //填写true,客户端就会自动创建“通知栏消息”。
  8. "title": "您收到一条消息",
  9. "content": "请查看",
  10. "payload": {
  11. "text":"体验一下uni-push2.0"
  12. }
  13. })
  14. };

右击新建的云函数点击上传并运行,如果手机或者模拟器看到推送的消息,说明成功,没有成功啧查看一下是否有什么缺漏的步骤,可以后天查看一下云函数推送失败的日志,后台可以查看云函数 uniCloud控制台

 自定义推送消息 修改index.js,上传部署

  1. const uniPush = uniCloud.getPushManager({
  2. appId: "__UNI__" //z自己的appid
  3. })
  4. exports.main = async (event) => {
  5. let obj = JSON.parse(event.body)
  6. const res = await uniPush.sendMessage({
  7. "push_clientid": obj.clientid, // 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000
  8. "title": obj.title, // 标题
  9. "content": obj.content, // 内容
  10. "payload": obj.payload, // 数据
  11. "force_notification": true, // 服务端推送 需要加这一句
  12. "request_id": obj.request_id ,//请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失
  13. })
  14. };

先使用postman推送消息  ,后台查看云函数,点击详情,查看url,可以点击编辑修改自己的云函数访问名,点击复制路径到postman

 

 

 点击发送,注意,在编辑完云函数之后需要重新运行一下app,不然有可能收不到推送消息(卡了我好一会儿)

 返回数据是这样的就说明成功,没有收到推送的看一下是否修改content-type和是否重新运行

注:url是都可以访问的,所以一定要注意隐私

php给app推送消息

  1. function send_message(){
  2. $url = '自己的url';
  3. $data = [
  4. 'push_clientid'=>'自己的设备号',
  5. 'title'=>'测试title',
  6. 'content'=>'这是测试',
  7. 'payload'=>'{"text":"体验一下uni-push2.0"}'
  8. ];
  9. $rs = $this->httpcurl($url, json_encode($data),true, true);
  10. dump($rs);
  11. }
  12. /**
  13. * @param string $url 请求网址
  14. * @param bool $params 请求参数
  15. * @param bool $post 请求方式,是否是post
  16. * @param bool $https 请求http协议,是否是https
  17. * @return bool|mixed
  18. */
  19. public function httpcurl($url, $params = false, $post = false, $https = false){
  20. $httpInfo = array();
  21. $ch = curl_init();
  22. curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  23. 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');
  24. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
  25. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  26. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  27. if ($post === true) {
  28. curl_setopt($ch, CURLOPT_POST, true);
  29. curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
  30. curl_setopt($ch, CURLOPT_URL, $url);
  31. } else {
  32. if ($params === false) {
  33. curl_setopt($ch, CURLOPT_URL, $url);
  34. } else {
  35. if (is_array($params)) {
  36. $params = http_build_query($params);
  37. }
  38. curl_setopt($ch, CURLOPT_URL, $url . '?' . $params);
  39. }
  40. }
  41. if ($https === true) {
  42. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
  43. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
  44. }
  45. $response = curl_exec($ch);
  46. // if ($response === false) {
  47. // Illuminate\Support\Facades\Log::error(sprintf('curl 错误。 url:%s, error:%s', $url, curl_error($ch)));
  48. // return false;
  49. // }
  50. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  51. $httpInfo = array_merge($httpInfo, curl_getinfo($ch));
  52. curl_close($ch);
  53. return $response;
  54. }

直接调用send_message就可以实现给app推送消息了

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索