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> </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>=><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>=><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>=><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 =><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 =><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> && 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>=><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 &&<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>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'----------> 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>=><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> </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' => 'switchTab', 'page' => <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' => <span style="color: rgba(128, 0, 128, 1)">$cid</span>,
'title' => <span style="color: rgba(128, 0, 128, 1)">$title</span>,
'content' => <span style="color: rgba(128, 0, 128, 1)">$content</span>,
'clickType' => <span style="color: rgba(128, 0, 128, 1)">$clickType</span>,
'payload_data' => json_encode(<span style="color: rgba(128, 0, 128, 1)">$payload</span>),
'url' => <span style="color: rgba(128, 0, 128, 1)">$url</span>,
'intent_data' => "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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->addOption("VV", "/category", "SUBSCRIPTION"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$ups</span>->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>->addOption("OP", "/channel_id", "通道id"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$ups</span>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->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>->setContentAvailable(0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$aps</span>->setSound("default"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$aps</span>->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>->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>->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>-><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>->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>->setAutoBadge("+1"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$pushChannel</span>->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->getApiParam());</span>
<span style="color: rgba(128, 0, 128, 1)">$push</span>->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>->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>->pushApi()->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> </p><br><br>
来源:https://www.cnblogs.com/yang-2018/p/18090831
頁:
[1]