HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

利用uniapp+tailwindcss+uview搭建的一套基础模板

利用uniapp+tailwindcss+uview搭建的一套基础模板内置了

  1. tailwindcss以及flex布局的css工具拓展
  2. 基本的列表和表单demo
  3. 统一的request api请求处理,枚举与正则校验

背景:之前用uniapp+uview开发了一大一小两个小程序,css方案用的原子风格的,发现用的还是挺爽的,就在想能不能用上tailwindcss,研究之后发现用Hbuilder创建的自由度比较低,于是选择了用Vue-cli4搭建了一套。

要求:
1. Node.js > 12

项目地址

插件市场

github

预览

https://i0.hdslb.com/bfs/album/0eabcc1cbdead3a5a98662ef2757760af6280bc5.png

继续阅读 »

利用uniapp+tailwindcss+uview搭建的一套基础模板内置了

  1. tailwindcss以及flex布局的css工具拓展
  2. 基本的列表和表单demo
  3. 统一的request api请求处理,枚举与正则校验

背景:之前用uniapp+uview开发了一大一小两个小程序,css方案用的原子风格的,发现用的还是挺爽的,就在想能不能用上tailwindcss,研究之后发现用Hbuilder创建的自由度比较低,于是选择了用Vue-cli4搭建了一套。

要求:
1. Node.js > 12

项目地址

插件市场

github

预览

https://i0.hdslb.com/bfs/album/0eabcc1cbdead3a5a98662ef2757760af6280bc5.png

收起阅读 »

live-pusher

直播

this.liveContext = uni.createLivePusherContext('livePusher', this); 直接是没有此方法,用的nvue

<template>
<view>
<live-pusher
id="livePusher"
ref="livePusher"
class="livePusher"
url="livePushUrl" mode="SD"
muted="true"
enable-camera="true"
auto-focus="true"

beauty="1" whiteness="2"
aspect="9:16"
@statechange="statechange"
@netstatus="netstatus"
@error="error"
></live-pusher>
<button class="btn" @click="start">开始推流</button>
<button class="btn" @click="pause">暂停推流</button>
<button class="btn" @click="resume">resume</button>
<button class="btn" @click="stop">停止推流</button>
<button class="btn" @click="snapshot">快照</button>
<button class="btn" @click="startPreview">开启摄像头预览</button>
<button class="btn" @click="stopPreview">关闭摄像头预览</button>
<button class="btn" @click="switchCamera">切换摄像头</button>

        <view>  
            <video :src="livePushUrl" style="width: 100%;height: 400rpx;" :autoplay="true" controls></video>  
        </view>  

</view>
</template>

继续阅读 »

this.liveContext = uni.createLivePusherContext('livePusher', this); 直接是没有此方法,用的nvue

<template>
<view>
<live-pusher
id="livePusher"
ref="livePusher"
class="livePusher"
url="livePushUrl" mode="SD"
muted="true"
enable-camera="true"
auto-focus="true"

beauty="1" whiteness="2"
aspect="9:16"
@statechange="statechange"
@netstatus="netstatus"
@error="error"
></live-pusher>
<button class="btn" @click="start">开始推流</button>
<button class="btn" @click="pause">暂停推流</button>
<button class="btn" @click="resume">resume</button>
<button class="btn" @click="stop">停止推流</button>
<button class="btn" @click="snapshot">快照</button>
<button class="btn" @click="startPreview">开启摄像头预览</button>
<button class="btn" @click="stopPreview">关闭摄像头预览</button>
<button class="btn" @click="switchCamera">切换摄像头</button>

        <view>  
            <video :src="livePushUrl" style="width: 100%;height: 400rpx;" :autoplay="true" controls></video>  
        </view>  

</view>
</template>

收起阅读 »

HBuilder如何分栏?

icon

大家在设计网页时为了达到更好的显示效果,一般都会使用css3的属性来进行div标签分栏设计,一些新上手的小伙伴还不清楚具体的操作步骤,下面就跟着小编一起来看看实现方法吧。

你好李焕英下载地址:duan.kim

HBuilderX实现div标签分栏显示方法

第一步,打开 HBuilderX 工具,创建web项目,然后新建文件

第二步,在标签中,插入三个 div标签 ,分别设置不同的内容

第三步,利用 one和two ID选择器 ,设置对应的样式属性

第四步, 保存代码并运行页面文件 ,打开浏览器,查看界面效果

第五步,再次添加设置第三个div标签的样式,分别添加 background-color属性

第六步,再次保存代码并刷新浏览器,可以看到界面出现了 分栏

继续阅读 »

大家在设计网页时为了达到更好的显示效果,一般都会使用css3的属性来进行div标签分栏设计,一些新上手的小伙伴还不清楚具体的操作步骤,下面就跟着小编一起来看看实现方法吧。

你好李焕英下载地址:duan.kim

HBuilderX实现div标签分栏显示方法

第一步,打开 HBuilderX 工具,创建web项目,然后新建文件

第二步,在标签中,插入三个 div标签 ,分别设置不同的内容

第三步,利用 one和two ID选择器 ,设置对应的样式属性

第四步, 保存代码并运行页面文件 ,打开浏览器,查看界面效果

第五步,再次添加设置第三个div标签的样式,分别添加 background-color属性

第六步,再次保存代码并刷新浏览器,可以看到界面出现了 分栏

收起阅读 »

【建议】希望在打包 队列中 可以取消打包

云端打包 用户建议 优化建议 App打包

我们在打包中,显示XXXX队列中。是无法取消的!!


有时候 我们发现 点错了/需求更改了/不想打包了


都没有办法 取消 这个是一个超级弊端 浪费资源不说 还麻烦


  • [HBuilder] 14:52:06.798 项目 aw [UNI7608817]的打包状态:
    [HBuilder] 14:52:06.798 时间: 2021-04-03 14:38:14 类型: iOS越狱包 队列中

[HBuilder] 14:53:06.560 项目 aw [UNI7608817]的打包状态:
[HBuilder] 14:53:06.560 时间: 2021-04-03 14:38:21 类型: Android自有证书 队列中


  • 是无法取消的!!
继续阅读 »

我们在打包中,显示XXXX队列中。是无法取消的!!


有时候 我们发现 点错了/需求更改了/不想打包了


都没有办法 取消 这个是一个超级弊端 浪费资源不说 还麻烦


  • [HBuilder] 14:52:06.798 项目 aw [UNI7608817]的打包状态:
    [HBuilder] 14:52:06.798 时间: 2021-04-03 14:38:14 类型: iOS越狱包 队列中

[HBuilder] 14:53:06.560 项目 aw [UNI7608817]的打包状态:
[HBuilder] 14:53:06.560 时间: 2021-04-03 14:38:21 类型: Android自有证书 队列中


  • 是无法取消的!!
收起阅读 »

分享个自己开发的影视类APP,基于苹果CMS,独立对接APP的后台,完整度高

nvue

独立APP后台,对接苹果CMS。
完整度高,列举如下一下主要功能:

  1. 苹果CMS系统(系统自带了采集)
  2. 独立的APP对接系统,对接APP和苹果CMS网站
  3. 视频专题滚动
  4. m3u8流媒体文件缓存和播放
  5. 视频播放换源线路
  6. 一键投屏
  7. 追剧
  8. 弹幕+评论
    。。。

QQ:2701309467

继续阅读 »

独立APP后台,对接苹果CMS。
完整度高,列举如下一下主要功能:

  1. 苹果CMS系统(系统自带了采集)
  2. 独立的APP对接系统,对接APP和苹果CMS网站
  3. 视频专题滚动
  4. m3u8流媒体文件缓存和播放
  5. 视频播放换源线路
  6. 一键投屏
  7. 追剧
  8. 弹幕+评论
    。。。

QQ:2701309467

收起阅读 »

uni-app下微信小程序自动埋点

由于公司运营需求,需要给代码埋点,而埋点并不是一个和业务强相关的代码,各个页面的埋点工作量也非常的大,一直琢磨能不能自动埋点呢,于是就有了下面的探索

公司通过uni-app开发的主要是微信小程序,所以本文主要是以开发微信小程序的自动化埋点为主

诸如市面上各种统计代码,需要上报埋点事件时,以百度移动统计为例
getApp().mtj.trackEvent(event, args);就可以上报事件和参数

代码虽然很简单,但每个页面统计的点少的三四个,多的上十个,各个地方的统计代码加起来,数量比较大,而且不方便统一管理。
于是,我想到了方案一

  1. 在main.js中加入方法

2.在每一个page和component最外层的<view>标签中加入click方法,此时点击页面中的所有任意元素,都会有事件传输到elementTracker方法中,通过判断clickInfo.target是不是目标统计元素,从而决定是否上报,数据也可以从dataset中取到

但这个方法有个不好的地方就是


在这种嵌套结构的view当中时,只有target只会有你点击的对象,也就是你点的是image就只能取image的dataset,点击的是外层的view取外层view的dataset,情况往往是点击view和点击image触发的是同一事件,可能在这里你需要重复写两遍

有没有更好的解决方案呢,答案是有的,利用的是微信的wx.createSelectorQuery,通过点击时计算点击的x,y计算是否落在需要统计的元素上,于是就产生了下面这段代码


通过计算点击区域是否落在需要统计的元素上,这样解决了点击父组件需要统计,点击子组件统计不到的问题

这时,我们的统计代码合元素可以写到一个统一的配置文件里


但是这个方法也不是完美的,有两个bug,一是触发wx.createSelectorQuery返回的异步的结果需要时间,可能页面跳走,元素隐藏或不渲染导致找不到需要统计的元素了,二就是如果元素有重叠,如何知道哪个是在上面的元素
第二个问题我用了一个stop参数标识只要这个元素上报了,那这次点击接下来就停止上报。

参考项目 https://github.com/zhengguorong/xbosstrack-wechat

继续阅读 »

由于公司运营需求,需要给代码埋点,而埋点并不是一个和业务强相关的代码,各个页面的埋点工作量也非常的大,一直琢磨能不能自动埋点呢,于是就有了下面的探索

公司通过uni-app开发的主要是微信小程序,所以本文主要是以开发微信小程序的自动化埋点为主

诸如市面上各种统计代码,需要上报埋点事件时,以百度移动统计为例
getApp().mtj.trackEvent(event, args);就可以上报事件和参数

代码虽然很简单,但每个页面统计的点少的三四个,多的上十个,各个地方的统计代码加起来,数量比较大,而且不方便统一管理。
于是,我想到了方案一

  1. 在main.js中加入方法

2.在每一个page和component最外层的<view>标签中加入click方法,此时点击页面中的所有任意元素,都会有事件传输到elementTracker方法中,通过判断clickInfo.target是不是目标统计元素,从而决定是否上报,数据也可以从dataset中取到

但这个方法有个不好的地方就是


在这种嵌套结构的view当中时,只有target只会有你点击的对象,也就是你点的是image就只能取image的dataset,点击的是外层的view取外层view的dataset,情况往往是点击view和点击image触发的是同一事件,可能在这里你需要重复写两遍

有没有更好的解决方案呢,答案是有的,利用的是微信的wx.createSelectorQuery,通过点击时计算点击的x,y计算是否落在需要统计的元素上,于是就产生了下面这段代码


通过计算点击区域是否落在需要统计的元素上,这样解决了点击父组件需要统计,点击子组件统计不到的问题

这时,我们的统计代码合元素可以写到一个统一的配置文件里


但是这个方法也不是完美的,有两个bug,一是触发wx.createSelectorQuery返回的异步的结果需要时间,可能页面跳走,元素隐藏或不渲染导致找不到需要统计的元素了,二就是如果元素有重叠,如何知道哪个是在上面的元素
第二个问题我用了一个stop参数标识只要这个元素上报了,那这次点击接下来就停止上报。

参考项目 https://github.com/zhengguorong/xbosstrack-wechat

收起阅读 »

打安卓包,打包失败,包错误日志https://service.dcloud.net.cn/build/errorLog/f1452b50-92b2-11eb-a333-d744a281b21a

不是bug

首先,更新 manifest.json 中的版本号。
比如之前是 1.0.0,那么新版本应该是 1.0.1 或 1.1.0 这样。

你要的解决打包失败原因来了:

然后,在 HBuilderX 中生成升级包(wgt)。
菜单->发行->原生App-制作移动App资源升级包
生成结束会在控制台告知升级包的输出位置。

就成功了!希望能帮助到你。

继续阅读 »

首先,更新 manifest.json 中的版本号。
比如之前是 1.0.0,那么新版本应该是 1.0.1 或 1.1.0 这样。

你要的解决打包失败原因来了:

然后,在 HBuilderX 中生成升级包(wgt)。
菜单->发行->原生App-制作移动App资源升级包
生成结束会在控制台告知升级包的输出位置。

就成功了!希望能帮助到你。

收起阅读 »

uniapp H5端不能够定位当前位置的问题

uniapp

H5 端获取定位信息,需要部署在 https 服务上,本地预览(localhost)仍然可以使用 http 协议。(照搬官方文档)

参考文章链接
这篇文章里面提到需要配置腾讯地图的key,我配置上之后地图列表加载不出来,不知道是不是申请的步骤不对,我只用了https服务就ok了。

继续阅读 »

H5 端获取定位信息,需要部署在 https 服务上,本地预览(localhost)仍然可以使用 http 协议。(照搬官方文档)

参考文章链接
这篇文章里面提到需要配置腾讯地图的key,我配置上之后地图列表加载不出来,不知道是不是申请的步骤不对,我只用了https服务就ok了。

收起阅读 »

关于个推getui,服务端发送推送,在线可以收到,离线永远收不到的问题解决。

个推SDK

1.检查参数是否正确。

  1. 可以先不要使用透传方式。
  2. 是否设置了厂商通道消息内容
  3. 设置为打开应用内特定页面就是intent参数。
  4. intent参数是否正确 intent:#Intent;component=包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=".urlencode(标题).";S.content=".urlencode($内容).";S.payload=".json_encode(你的自定义参数).";end

6.PHP端参考代码。

 $api = new \GTClient("https://restapi.getui.com/","", "","");  
        $stt = ['default'=>1];  
        //设置推送参数  
        $push = new \GTPushRequest();  
        $push->setRequestId(time());  
        $message = new \GTPushMessage();  
        $notify = new \GTNotification();  
        $channel = new \GTPushChannel();  

        //配置推送条件  
        $str = new \GTStrategy();  
        $str->setDefault(1);  
        $str->setHw(1);  
        $setting = new \GTSettings();  //定时推送暂无  
        $setting->setStrategy($str);  
        $push->setSettings($setting);  
        $setting->setTtl(3600000); ////消息有效期,走厂商消息需要设置该值  

       //推送苹果离线通知标题内容  
        $alert = new \GTAlert();  
         $alert->setTitle($title);  
       $alert->setBody($content);  
        $aps = new \GTAps();  
        //1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。  
        //苹果建议1小时最多推送3条静默消息  
        $aps->setContentAvailable(0);  
       $aps->setSound("default");  
       $aps->setAlert($alert);  
       $iosDto = new \GTIos();  
       $iosDto->setAps($aps);  
        $iosDto->setType("notify");  
        $pushChannel = new \GTPushChannel();  
        $pushChannel->setIos($iosDto);  

        //安卓离线厂商通道推送消息体  
        $pushChannel = new \GTPushChannel();  
        $androidDTO = new \GTAndroid();  
        $ups = new \GTUps();  
        $notification1 = new \GTThirdNotification();;  
        $notification1->setTitle($title);  
        $notification1->setBody($content);  
        $ups->setNotification($notification1);  
        if($clickType == 'none')  //设置推送类型  
        {  
            $notification1->setClickType($clickType);  
        }else if($clickType == 'payload' || $clickType == 'payload_custom'){ //自定义消息 打开APP和不打开APP  
            $notification1->setClickType($clickType);  
            $notification1->setPayload(json_encode($data));  
        }else if($clickType == 'url'){  //打开URL  
            $notification1->setClickType($clickType);  
            $notification1->setUrl($url);  
        }else if($clickType == 'intent'){  //打开特定页面  
            $notification1->setClickType($clickType);  
            $notification1->setIntent("intent:#Intent;component=com.hqtwtq.y8/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=".urlencode($title).";S.content=".urlencode($content).";S.payload=".json_encode($data).";end");  
        }else{  
            $notification1->setClickType($clickType);  
        }  
            //各厂商自有功能单项设置  
        if($time){  
            $message->setDuration($time);  //设置推送时间  
            $data = json_encode(array('title'=>$title,'content'=>$content,'duration'=>$time,'importance'=>'HIGH','payload'=>json_encode($data)));  
        }else{  
            $data = json_encode(array('title'=>$title,'content'=>$content,'payload'=>json_encode($data)));  
        }  
        //$ups->setTransmission($data);  
        $androidDTO->setUps($ups);  
        $pushChannel->setAndroid($androidDTO);  
        $push->setPushChannel($pushChannel);  

        //个推在线通道  
        $notify->setTitle($title);  
        $notify->setBody($content);  
        if($img) $notify->setBigImage($img); //推送图片  
        //1、intent:打开应用内特定页面 2、url:打开网页地址。3、payload:自定义消息内容启动应用。4、payload_custom:自定义消息内容不启动应用。5、startapp:打开应用首页。6、none:纯通知,无后续动作  
        if($clickType == 'none')  //设置推送类型  
        {  
            $notify->setClickType($clickType);  
        }else if($clickType == 'payload' || $clickType == 'payload_custom'){ //自定义消息 打开APP和不打开APP  
            $notify->setClickType($clickType);  
            $notify->setPayload(json_encode($data));  
        }else if($clickType == 'url'){  //打开URL  
            $notify->setClickType($clickType);  
            $notify->setUrl($url);  
        }else if($clickType == 'intent'){  //打开特定页面  
            $notify->setClickType($clickType);  
            $notify->setIntent("intent:#Intent;component=com.hqtwtq.y8/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=".urlencode($title).";S.content=".urlencode($content).";S.payload=".json_encode($data).";end");  
        }else{  
            $notify->setClickType($clickType);  
        }  
        $message->setNotification($notify);  
        $push->setPushMessage($message);  
      /*  if($time){  
            $message->setDuration($time);  //设置推送时间  
            $data = json_encode(array('title'=>$title,'body'=>$content,'duration'=>$time,'importance'=>'HIGH','payload'=>json_encode($data)));  
        }else{  
            $data = json_encode(array('title'=>$title,'body'=>$content,'payload'=>json_encode($data)));  
        }  
        $ups->setTransmission($data);  //  
        $android->setUps($ups);  
        $channel->setAndroid($android);  
        $push->setPushChannel($channel);  
        $push->setPushMessage($message);*/  
        if($cid)  //推送给某个用户  
        {  
            $push->setCid($cid);  
            //处理返回结果  
            $result = $api->pushApi()->pushToSingleByCid($push);  
        }else{  
            $result = $api->pushApi()->pushAll($push);  
        }  
        Log::info('推送数据:【推送】'.json_encode($result)); //写入日志  
        return $result;
继续阅读 »

1.检查参数是否正确。

  1. 可以先不要使用透传方式。
  2. 是否设置了厂商通道消息内容
  3. 设置为打开应用内特定页面就是intent参数。
  4. intent参数是否正确 intent:#Intent;component=包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=".urlencode(标题).";S.content=".urlencode($内容).";S.payload=".json_encode(你的自定义参数).";end

6.PHP端参考代码。

 $api = new \GTClient("https://restapi.getui.com/","", "","");  
        $stt = ['default'=>1];  
        //设置推送参数  
        $push = new \GTPushRequest();  
        $push->setRequestId(time());  
        $message = new \GTPushMessage();  
        $notify = new \GTNotification();  
        $channel = new \GTPushChannel();  

        //配置推送条件  
        $str = new \GTStrategy();  
        $str->setDefault(1);  
        $str->setHw(1);  
        $setting = new \GTSettings();  //定时推送暂无  
        $setting->setStrategy($str);  
        $push->setSettings($setting);  
        $setting->setTtl(3600000); ////消息有效期,走厂商消息需要设置该值  

       //推送苹果离线通知标题内容  
        $alert = new \GTAlert();  
         $alert->setTitle($title);  
       $alert->setBody($content);  
        $aps = new \GTAps();  
        //1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。  
        //苹果建议1小时最多推送3条静默消息  
        $aps->setContentAvailable(0);  
       $aps->setSound("default");  
       $aps->setAlert($alert);  
       $iosDto = new \GTIos();  
       $iosDto->setAps($aps);  
        $iosDto->setType("notify");  
        $pushChannel = new \GTPushChannel();  
        $pushChannel->setIos($iosDto);  

        //安卓离线厂商通道推送消息体  
        $pushChannel = new \GTPushChannel();  
        $androidDTO = new \GTAndroid();  
        $ups = new \GTUps();  
        $notification1 = new \GTThirdNotification();;  
        $notification1->setTitle($title);  
        $notification1->setBody($content);  
        $ups->setNotification($notification1);  
        if($clickType == 'none')  //设置推送类型  
        {  
            $notification1->setClickType($clickType);  
        }else if($clickType == 'payload' || $clickType == 'payload_custom'){ //自定义消息 打开APP和不打开APP  
            $notification1->setClickType($clickType);  
            $notification1->setPayload(json_encode($data));  
        }else if($clickType == 'url'){  //打开URL  
            $notification1->setClickType($clickType);  
            $notification1->setUrl($url);  
        }else if($clickType == 'intent'){  //打开特定页面  
            $notification1->setClickType($clickType);  
            $notification1->setIntent("intent:#Intent;component=com.hqtwtq.y8/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=".urlencode($title).";S.content=".urlencode($content).";S.payload=".json_encode($data).";end");  
        }else{  
            $notification1->setClickType($clickType);  
        }  
            //各厂商自有功能单项设置  
        if($time){  
            $message->setDuration($time);  //设置推送时间  
            $data = json_encode(array('title'=>$title,'content'=>$content,'duration'=>$time,'importance'=>'HIGH','payload'=>json_encode($data)));  
        }else{  
            $data = json_encode(array('title'=>$title,'content'=>$content,'payload'=>json_encode($data)));  
        }  
        //$ups->setTransmission($data);  
        $androidDTO->setUps($ups);  
        $pushChannel->setAndroid($androidDTO);  
        $push->setPushChannel($pushChannel);  

        //个推在线通道  
        $notify->setTitle($title);  
        $notify->setBody($content);  
        if($img) $notify->setBigImage($img); //推送图片  
        //1、intent:打开应用内特定页面 2、url:打开网页地址。3、payload:自定义消息内容启动应用。4、payload_custom:自定义消息内容不启动应用。5、startapp:打开应用首页。6、none:纯通知,无后续动作  
        if($clickType == 'none')  //设置推送类型  
        {  
            $notify->setClickType($clickType);  
        }else if($clickType == 'payload' || $clickType == 'payload_custom'){ //自定义消息 打开APP和不打开APP  
            $notify->setClickType($clickType);  
            $notify->setPayload(json_encode($data));  
        }else if($clickType == 'url'){  //打开URL  
            $notify->setClickType($clickType);  
            $notify->setUrl($url);  
        }else if($clickType == 'intent'){  //打开特定页面  
            $notify->setClickType($clickType);  
            $notify->setIntent("intent:#Intent;component=com.hqtwtq.y8/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=".urlencode($title).";S.content=".urlencode($content).";S.payload=".json_encode($data).";end");  
        }else{  
            $notify->setClickType($clickType);  
        }  
        $message->setNotification($notify);  
        $push->setPushMessage($message);  
      /*  if($time){  
            $message->setDuration($time);  //设置推送时间  
            $data = json_encode(array('title'=>$title,'body'=>$content,'duration'=>$time,'importance'=>'HIGH','payload'=>json_encode($data)));  
        }else{  
            $data = json_encode(array('title'=>$title,'body'=>$content,'payload'=>json_encode($data)));  
        }  
        $ups->setTransmission($data);  //  
        $android->setUps($ups);  
        $channel->setAndroid($android);  
        $push->setPushChannel($channel);  
        $push->setPushMessage($message);*/  
        if($cid)  //推送给某个用户  
        {  
            $push->setCid($cid);  
            //处理返回结果  
            $result = $api->pushApi()->pushToSingleByCid($push);  
        }else{  
            $result = $api->pushApi()->pushAll($push);  
        }  
        Log::info('推送数据:【推送】'.json_encode($result)); //写入日志  
        return $result;
收起阅读 »