甩你一身大鼻涕 發表於 2024-3-23 10:06:00

Uni-app 之uni-push1.0服务端推送

<h2>一、配置</h2>
<p>1、uni-push1.0文档</p>
<p>https://uniapp.dcloud.net.cn/unipush-v1.html</p>
<p>2、服务端推送文档</p>
<p>https://docs.getui.com/getui/server/rest_v2/push/</p>
<h2>二、客户端</h2>
<p>1、App.vue</p>
<div class="cnblogs_code">
<pre>import phoneInfo from '@/common/js/phone-info.js'<span style="color: rgba(0, 0, 0, 1)">;
import uniPushListener from </span>'@/common/js/unipush.js'<span style="color: rgba(0, 0, 0, 1)">;
import updateApp from </span>'@/common/js/update.js';</pre>
</div>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> #ifdef APP-PLUS</span>
<span style="color: rgba(0, 0, 0, 1)">uniPushListener.getInfo();
plus.push.setAutoNotification(</span><span style="color: rgba(0, 0, 255, 1)">true</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置通知栏显示通知 //必须设置</span>
plus.screen.lockOrientation('portrait-primary'); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">锁定屏幕方向</span>
uni.setStorageSync('cancelUpdate', 'false'); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 进来APP 重置更新弹窗</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> 获取App 当前版本号</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (Object.keys(uni.getStorageSync('widgetInfo')).length == 0<span style="color: rgba(0, 0, 0, 1)">) {
    plus.runtime.getProperty(plus.runtime.appid, widgetInfo </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      phoneInfo.manifestInfo </span>=<span style="color: rgba(0, 0, 0, 1)"> widgetInfo;
      uni.setStorageSync(</span>'widgetInfo'<span style="color: rgba(0, 0, 0, 1)">, widgetInfo);
    });
}
uniPushListener.getClientInfoLoop(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 循环获取cid</span>
<span style="color: rgba(0, 0, 0, 1)">
uniPushListener.pushListener(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 监听通知栏信息</span>
<span style="color: rgba(0, 0, 0, 1)">
plus.runtime.setBadgeNumber(</span>0); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除app角标</span>
plus.runtime.setBadgeNumber(-1<span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">检查版本更新</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> platform =<span style="color: rgba(0, 0, 0, 1)"> phoneInfo.systemInfo.platform;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> version =<span style="color: rgba(0, 0, 0, 1)"> phoneInfo.systemInfo.appWgtVersion.toLowerCase();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> _this = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
updateApp.checkUpdate(version, platform, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
_this.$showModal({
      title: </span>'提示'<span style="color: rgba(0, 0, 0, 1)">,
      content: res.data.msg,
      confirmText: </span>'立即更新'<span style="color: rgba(0, 0, 0, 1)">,
    showCancel: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
}).then(ret </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    plus.runtime.openURL(res.data.path);
})
})
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">#endif</span></pre>
</div>
<p>2、phone-info.js</p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
    systemInfo: {}, </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 系统设备信息</span>
    manifestInfo: "" || uni.getStorageSync("widgetInfo"), <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> manifest.json 应用信息</span>
}</pre>
</div>
<p>3、unipush.js</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 监听push消息 以及 后台数据回复</span>
import phoneInfo from '@/common/js/phone-info.js'<span style="color: rgba(0, 0, 0, 1)">;
let timer </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
let numloop </span>= 0<span style="color: rgba(0, 0, 0, 1)">;
import {
    doRequest
} from </span>"@/common/js/request.js"

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 消息推送 应用配置(这些给后端用的)</span>
const uniPushObj =<span style="color: rgba(0, 0, 0, 1)"> {
    cid: </span>""<span style="color: rgba(0, 0, 0, 1)">,
    AppID: </span>""<span style="color: rgba(0, 0, 0, 1)">,
    AppKey: </span>""<span style="color: rgba(0, 0, 0, 1)">,
    AppSecret: </span>""<span style="color: rgba(0, 0, 0, 1)">,
    MasterSecret: </span>""<span style="color: rgba(0, 0, 0, 1)">,
}

export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
    getInfo() {
      uni.getSystemInfo({
            success: res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                phoneInfo.systemInfo </span>=<span style="color: rgba(0, 0, 0, 1)"> res;
            }
      });
    },
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 开启监听推送 </span>
<span style="color: rgba(0, 0, 0, 1)">    pushListener() {
      const platform </span>=<span style="color: rgba(0, 0, 0, 1)"> phoneInfo.systemInfo.platform.toLowerCase();
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 点击推送信息</span>
      plus.push.addEventListener('click', res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            const token </span>= uni.getStorageSync("userid"<span style="color: rgba(0, 0, 0, 1)">);
            console.log(</span>"(click):" +<span style="color: rgba(0, 0, 0, 1)"> JSON.stringify(res));
            
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 其实在这里就可以根据你自己的业务去写了</span>
            plus.push.clear(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清空通知栏</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (token) {
                messageClick(res);
            } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里跳登录页了</span>
<span style="color: rgba(0, 0, 0, 1)">                uni.navigateTo({
                  url: `</span>/pages/login/index`
<span style="color: rgba(0, 0, 0, 1)">                })
            }
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接收推送信息在线</span>
      plus.push.addEventListener('receive', res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            console.log(</span>"(receive):" +<span style="color: rgba(0, 0, 0, 1)"> JSON.stringify(res));

            const messageTitle </span>=<span style="color: rgba(0, 0, 0, 1)"> res.title;
            const messageContent </span>=<span style="color: rgba(0, 0, 0, 1)"> res.content;
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (platform == 'android'<span style="color: rgba(0, 0, 0, 1)">) {
                </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">**
                  安卓监听不到因为安卓这个格式被封装了,做成了通知栏展示
                  换个格式就行(比如里面多个字段,或换个字段名)
                </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
                <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">**
                  此格式的透传消息由 unipush 做了特殊处理, 会自动展示通知栏
                  开发者也可自定义其它格式, 在客户端自己处理
                </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   "push_message": {</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   "transmission": "{</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">       title:\"标题\",</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">       content:\"内容\",</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">       payload:\"自定义数据\"</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   }"</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   },</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Hbulidx 版本大于 ## 3.4.18,安卓不再通知栏展示, 需要自行创建通知</span>
<span style="color: rgba(0, 0, 0, 1)">                plus.push.createMessage(messageContent, res.payload, {
                  title: messageTitle
                });
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 或者在 onlaunch 写入</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> plus.push.setAutoNotification(true);</span>
            } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                const type </span>=<span style="color: rgba(0, 0, 0, 1)"> res.type
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">【APP离线】收到消息,但没有提醒(发生在一次收到多个离线消息时,只有一个有提醒,但其他的没有提醒)</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">【APP在线】收到消息,不会触发系统消息,需要创建本地消息,但不能重复创建</span>
                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须加msg.type验证去除死循环      </span>
                <span style="color: rgba(0, 0, 255, 1)">if</span> (res.aps == <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; type == "receive"<span style="color: rgba(0, 0, 0, 1)">) {
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建本地消息,发送的本地消息也会被receive方法接收到,但没有type属性,且aps是null</span>
<span style="color: rgba(0, 0, 0, 1)">                  plus.push.createMessage(messageContent, res.payload, {
                        title: messageTitle
                  });
                }
            }
      });

      </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> messageClick(msg) {
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">typeof</span>(msg.payload) == 'string') { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果是字符串,表示是ios创建的要转换一下</span>
                msg.payload =<span style="color: rgba(0, 0, 0, 1)"> JSON.parse(msg.payload)
            }
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!msg) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                </span><span style="color: rgba(0, 0, 255, 1)">var</span> page =<span style="color: rgba(0, 0, 0, 1)"> msg.payload.page;
                </span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (msg.payload.type) {
                  </span><span style="color: rgba(0, 0, 255, 1)">case</span> 'switchTab'<span style="color: rgba(0, 0, 0, 1)">:
                        uni.switchTab({
                            url: page
                        })
                        </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                  </span><span style="color: rgba(0, 0, 255, 1)">case</span> 'navigateTo'<span style="color: rgba(0, 0, 0, 1)">:
                        uni.navigateTo({
                            url: page
                        })
                        </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                  </span><span style="color: rgba(0, 0, 255, 1)">case</span> 'redirectTo'<span style="color: rgba(0, 0, 0, 1)">:
                        uni.redirectTo({
                            url: page
                        })
                        </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                }
            } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (e) {
                console.log(e)
            }
      }
    },
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 循环获取clientid信息,直到获取到为止</span>
<span style="color: rgba(0, 0, 0, 1)">    getClientInfoLoop() {
      plus.push.getClientInfoAsync(info </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 如果info不存在,或者info存在,cid不存在则再次获取cid</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span> (!info || !<span style="color: rgba(0, 0, 0, 1)">info.clientid) {
                console.log(</span>"cid为空========================================="<span style="color: rgba(0, 0, 0, 1)">);
                let infoTimer </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
                infoTimer </span>= setInterval(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
                  </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (cid) {
                        clearInterval(infoTimer); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清定时器</span>
<span style="color: rgba(0, 0, 0, 1)">                        uni.showModal({
                            content: cid
                        })
                        uni.setStorageSync(</span>'cid'<span style="color: rgba(0, 0, 0, 1)">, cid);
                        uniPushObj.cid </span>=<span style="color: rgba(0, 0, 0, 1)"> cid
                  }
                }, </span>50<span style="color: rgba(0, 0, 0, 1)">);
            } </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (info &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> info.clientid) {
                let cid </span>=<span style="color: rgba(0, 0, 0, 1)"> info.clientid;
                uni.setStorageSync(</span>'cid'<span style="color: rgba(0, 0, 0, 1)">, cid);
                uniPushObj.cid </span>=<span style="color: rgba(0, 0, 0, 1)"> cid
            }
      }, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
            console.log(</span>'Failed'<span style="color: rgba(0, 0, 0, 1)">, JSON.stringify(e));
            let pinf </span>=<span style="color: rgba(0, 0, 0, 1)"> plus.push.getClientInfo();
            let cid </span>= pinf.clientid; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">客户端标识 </span>
            <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (cid) {
                uni.setStorageSync(</span>'cid'<span style="color: rgba(0, 0, 0, 1)">, cid);
                uniPushObj.cid </span>=<span style="color: rgba(0, 0, 0, 1)"> cid
            }
      })
    },
    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 向后台传送cid,绑定别名
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    passCid() {
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> params =<span style="color: rgba(0, 0, 0, 1)"> {
            action: </span>'app_bind_cid'<span style="color: rgba(0, 0, 0, 1)">,
            appid: uniPushObj.AppID,
            cid: uniPushObj.cid,
            userid: uni.getStorageSync(</span>'userid'<span style="color: rgba(0, 0, 0, 1)">)
      };
      console.log(params)
      doRequest(params).then(response </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            console.log(</span>'----------&gt; cid 绑定别名成功'<span style="color: rgba(0, 0, 0, 1)">, response);
      })
    },
}</span></pre>
</div>
<p>4、update.js</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">import {
    doRequest
} from </span>"@/common/js/request.js"<span style="color: rgba(0, 0, 0, 1)">

export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取已登陆用户信息</span>
    checkUpdate(version, platform, callback=<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){}) {
      doRequest({
            action: </span>'app_version'<span style="color: rgba(0, 0, 0, 1)">,
            version: version,
            platform: platform
      }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (res.code == 0<span style="color: rgba(0, 0, 0, 1)">) {
                callback(res)
            }
      })
    }
}</span></pre>
</div>
<p>&nbsp;</p>
<h2>三、服务端示例</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">0:站内信,1:消息</span>
<span style="color: rgba(128, 0, 128, 1)">$type</span> = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$type</span>) ? <span style="color: rgba(128, 0, 128, 1)">$type</span> : 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$clickType</span> = 'intent'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$payload</span> = <span style="color: rgba(0, 0, 255, 1)">array</span>('type' =&gt; 'switchTab', 'page' =&gt; <span style="color: rgba(128, 0, 128, 1)">$type</span> == 1 ? '/pages/chat/index' : '/pages/message/index'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$url</span> = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$data</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
    </span>'cid' =&gt; <span style="color: rgba(128, 0, 128, 1)">$cid</span>,
    'title' =&gt; <span style="color: rgba(128, 0, 128, 1)">$title</span>,
    'content' =&gt; <span style="color: rgba(128, 0, 128, 1)">$content</span>,
    'clickType' =&gt; <span style="color: rgba(128, 0, 128, 1)">$clickType</span>,
    'payload_data' =&gt; json_encode(<span style="color: rgba(128, 0, 128, 1)">$payload</span>),
    'url' =&gt; <span style="color: rgba(128, 0, 128, 1)">$url</span>,
    'intent_data' =&gt; "intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;component=com.boyuan.ycd.app/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=".<span style="color: rgba(0, 128, 128, 1)">urlencode</span>(<span style="color: rgba(128, 0, 128, 1)">$title</span>).";S.content=".<span style="color: rgba(0, 128, 128, 1)">urlencode</span>(<span style="color: rgba(128, 0, 128, 1)">$content</span>).";S.payload=".json_encode(<span style="color: rgba(128, 0, 128, 1)">$payload</span>).";end"<span style="color: rgba(0, 0, 0, 1)">
);

write_log(json_encode(</span><span style="color: rgba(128, 0, 128, 1)">$data</span>,<span style="color: rgba(0, 0, 0, 1)"> JSON_UNESCAPED_UNICODE));

pushToSingleByCid(</span><span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 发送透传消息
* @param $data
* @return bool
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span> pushToSingleByCid(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">){
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建API,APPID等配置参考 环境要求 进行获取</span>
    <span style="color: rgba(128, 0, 128, 1)">$api</span> = <span style="color: rgba(0, 0, 255, 1)">new</span> GTClient(URL,APPKEY, APPID,<span style="color: rgba(0, 0, 0, 1)">MS);
    </span><span style="color: rgba(128, 0, 128, 1)">$setting</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTSettings();
    </span><span style="color: rgba(128, 0, 128, 1)">$setting</span>-&gt;setTtl(3600000<span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置推送参数</span>
    <span style="color: rgba(128, 0, 128, 1)">$push</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTPushRequest();
    </span><span style="color: rgba(128, 0, 128, 1)">$push</span>-&gt;setRequestId(<span style="color: rgba(0, 128, 128, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">());
    </span><span style="color: rgba(128, 0, 128, 1)">$message</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTPushMessage();
    </span><span style="color: rgba(128, 0, 128, 1)">$notify</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTNotification();
    </span><span style="color: rgba(128, 0, 128, 1)">$pushChannel</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTPushChannel();

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">配置推送条件</span>
    <span style="color: rgba(128, 0, 128, 1)">$push</span>-&gt;setSettings(<span style="color: rgba(128, 0, 128, 1)">$setting</span><span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置个推</span>
    <span style="color: rgba(128, 0, 128, 1)">$notify</span>-&gt;setTitle(<span style="color: rgba(128, 0, 128, 1)">$data</span>['title'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(128, 0, 128, 1)">$notify</span>-&gt;setBody(<span style="color: rgba(128, 0, 128, 1)">$data</span>['content'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(128, 0, 128, 1)">$notify</span>-&gt;setChannelLevel(3<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">点击通知后续动作,目前支持以下后续动作:
    //1、intent:打开应用内特定页面url:打开网页地址。2、payload:自定义消息内容启动应用。3、payload_custom:自定义消息内容不启动应用。4、startapp:打开应用首页。5、none:纯通知,无后续动作</span>
    <span style="color: rgba(128, 0, 128, 1)">$notify</span>-&gt;setClickType(<span style="color: rgba(128, 0, 128, 1)">$data</span>['clickType'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$data</span>['clickType'] == 'payload'<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(128, 0, 128, 1)">$notify</span>-&gt;setPayload(<span style="color: rgba(128, 0, 128, 1)">$data</span>['payload_data'<span style="color: rgba(0, 0, 0, 1)">]);
    }
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$data</span>['clickType'] == 'url'<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(128, 0, 128, 1)">$notify</span>-&gt;setUrl(<span style="color: rgba(128, 0, 128, 1)">$data</span>['url'<span style="color: rgba(0, 0, 0, 1)">]);
    }
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$data</span>['clickType'] == 'intent'<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(128, 0, 128, 1)">$notify</span>-&gt;setIntent(<span style="color: rgba(128, 0, 128, 1)">$data</span>['intent_data'<span style="color: rgba(0, 0, 0, 1)">]);
    }
    </span><span style="color: rgba(128, 0, 128, 1)">$message</span>-&gt;setNotification(<span style="color: rgba(128, 0, 128, 1)">$notify</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$push</span>-&gt;setPushMessage(<span style="color: rgba(128, 0, 128, 1)">$message</span><span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置安卓离线厂商通道推送消息体</span>
    <span style="color: rgba(128, 0, 128, 1)">$androidDTO</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTAndroid();
    </span><span style="color: rgba(128, 0, 128, 1)">$ups</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTUps();
    </span><span style="color: rgba(128, 0, 128, 1)">$ups</span>-&gt;addOption("VV", "/category", "SUBSCRIPTION"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$ups</span>-&gt;addOption("XM", "/extra.channel_id", "通道id"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$ups</span>-&gt;addOption("OP", "/channel_id", "通道id"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$ups</span>-&gt;addOption("HW", "/message/android/category", "CATEGORY_REMINDER"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$ups</span>-&gt;addOption("HW", "/message/android/notification/badge/class", "io.dcloud.PandoraEntry"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$ups</span>-&gt;addOption("HW", "/message/android/notification/badge/add_num", 1<span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(128, 0, 128, 1)">$notification1</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTThirdNotification();
    </span><span style="color: rgba(128, 0, 128, 1)">$notification1</span>-&gt;setTitle(<span style="color: rgba(128, 0, 128, 1)">$data</span>['title'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(128, 0, 128, 1)">$notification1</span>-&gt;setBody(<span style="color: rgba(128, 0, 128, 1)">$data</span>['content'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(128, 0, 128, 1)">$notification1</span>-&gt;setClickType(<span style="color: rgba(128, 0, 128, 1)">$data</span>['clickType'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$data</span>['clickType'] == 'payload'<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(128, 0, 128, 1)">$notification1</span>-&gt;setPayload(<span style="color: rgba(128, 0, 128, 1)">$data</span>['payload_data'<span style="color: rgba(0, 0, 0, 1)">]);
    }
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$data</span>['clickType'] == 'url'<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(128, 0, 128, 1)">$notification1</span>-&gt;setUrl(<span style="color: rgba(128, 0, 128, 1)">$data</span>['url'<span style="color: rgba(0, 0, 0, 1)">]);
    }
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$data</span>['clickType'] == 'intent'<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(128, 0, 128, 1)">$notification1</span>-&gt;setIntent(<span style="color: rgba(128, 0, 128, 1)">$data</span>['intent_data'<span style="color: rgba(0, 0, 0, 1)">]);
    }
    </span><span style="color: rgba(128, 0, 128, 1)">$ups</span>-&gt;setNotification(<span style="color: rgba(128, 0, 128, 1)">$notification1</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$androidDTO</span>-&gt;setUps(<span style="color: rgba(128, 0, 128, 1)">$ups</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$pushChannel</span>-&gt;setAndroid(<span style="color: rgba(128, 0, 128, 1)">$androidDTO</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$push</span>-&gt;setPushChannel(<span style="color: rgba(128, 0, 128, 1)">$pushChannel</span><span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">推送苹果离线通知标题内容</span>
    <span style="color: rgba(128, 0, 128, 1)">$alert</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTAlert();
    </span><span style="color: rgba(128, 0, 128, 1)">$alert</span>-&gt;setTitle(<span style="color: rgba(128, 0, 128, 1)">$data</span>['title'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(128, 0, 128, 1)">$alert</span>-&gt;setBody(<span style="color: rgba(128, 0, 128, 1)">$data</span>['content'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(128, 0, 128, 1)">$aps</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTAps();
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。
    //苹果建议1小时最多推送3条静默消息</span>
    <span style="color: rgba(128, 0, 128, 1)">$aps</span>-&gt;setContentAvailable(0<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$aps</span>-&gt;setSound("default"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$aps</span>-&gt;setAlert(<span style="color: rgba(128, 0, 128, 1)">$alert</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$aps</span>-&gt;setCategory('ACTIONABLE'<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$iosDto</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GTIos();
    </span><span style="color: rgba(128, 0, 128, 1)">$iosDto</span>-&gt;setAps(<span style="color: rgba(128, 0, 128, 1)">$aps</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$iosDto</span>-&gt;<span style="color: rgba(0, 128, 128, 1)">setType</span>("notify"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$iosDto</span>-&gt;setPayload(<span style="color: rgba(128, 0, 128, 1)">$data</span>['payload_data'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(128, 0, 128, 1)">$iosDto</span>-&gt;setAutoBadge("+1"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(128, 0, 128, 1)">$pushChannel</span>-&gt;setIos(<span style="color: rgba(128, 0, 128, 1)">$iosDto</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">var_dump($iosDto-&gt;getApiParam());</span>
    <span style="color: rgba(128, 0, 128, 1)">$push</span>-&gt;setPushChannel(<span style="color: rgba(128, 0, 128, 1)">$pushChannel</span><span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(128, 0, 128, 1)">$push</span>-&gt;setCid(<span style="color: rgba(128, 0, 128, 1)">$data</span>['cid'<span style="color: rgba(0, 0, 0, 1)">]);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">处理返回结果</span>
    <span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$api</span>-&gt;pushApi()-&gt;pushToSingleByCid(<span style="color: rgba(128, 0, 128, 1)">$push</span><span style="color: rgba(0, 0, 0, 1)">);
    write_log(json_encode(</span><span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 0, 1)"> JSON_UNESCAPED_UNICODE));
    write_log(</span>'----'<span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(0, 128, 128, 1)">var_dump</span>(<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 128, 0, 1)">//
</span>    <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span>['code'] == 0<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/yang-2018/p/18090831
頁: [1]
查看完整版本: Uni-app 之uni-push1.0服务端推送