消息推送的实现:
1.打开应用的时候
2.通过plus.push.getClientInfo().clientid获取到clientid
3.接口传到服务器
4.进行判断表里是否存在该条数据,没有就插入,有则不插入,另外关联登录的companyid
5.在服务器进行轮询,如果有新的订单进入的时候,就调用消息接口,查询关联的companyid,推送消息到相应的门店的app
6.服务器集成phpsdk(使用composer安装https://packagist.org/?query=getui)
7.点击消息跳转到特定页面(在点击消息事件中进行跳转页面)
8.多进程处理
9.通过透传实现点餐语音提示
10.获取当前客户端的消息数据
11.设置当前客户端的消息配置
12.查询新消息的列表
13.扫码点餐下单后,获取到桌台号,进行md5加密,调用语音接口,生成语音文件,调用消息推送接口并传入文件路径,推送消息到前台,前台获取到消息的信息后,设置语音的路径,是否进行语音响铃的话,可以传入所有的client_id和sound的数组,进行循环,匹配到就进行sound的判断是否推送消息
14.扫码点餐和外卖,外卖通过小张的接口来实时的监听,扫码点餐
15.5+SDK获取client_id为null(https://blog.csdn.net/xiaomen417/article/details/76916390)
16.低版本的安卓机推送的消息的logo是空白的
17.低版本的安卓播放语音,遇到逗号会停止,部分文字无法播放,例如:(龙王阁有新的订单),而(龙王阁有新的扫码点餐订单)可以播放,而且还受到语音长度的限制
18.本来是想把plusready写在vue的组件里的,但是这样只会执行一次,没有办法使用receive事件实时监听,所以只能把plusready放在index.html里,这样就会导致vue的路由问题,只能重新通过script标签引入router,但是我发现没法使用,应该是页面main.js没有加载完成,然后我使用mui.plusReady先加载完页面后,再去调用还是不行,路由已经是我想跳转的页面,大概是页面没加载完,找不到组件,所以我只能使用location.href来拼接url来进行跳转
19.安卓5.1.1通知栏logo空白
20.http://ask.dcloud.net.cn/question/28840(html5+语音设置)
php透传模板代码
public static function IGtTransmissionTemplateDemo($attributes){extract($attributes);$template = new IGtTransmissionTemplate();$template->setAppId(APPID);//应用appid$template->setAppKey(APPKEY);//应用appkey$template->setTransmissionType(2);//透传消息类型$template->setTransmissionContent(json_encode(["url" => $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST']."/speech/".md5($tablename).".mp3","sound" => $sound,"title" => $title,"content" => $content,"table_id" => $table_id,"tablename"=> $tablename,"type" => $type,"time" => time()]));//透传内容//iOS推送需要设置的pushInfo字段//$template ->setPushInfo($actionLocKey,$badge,$message,$sound,$payload,$locKey,$locArgs,$launchImage);//$template ->setPushInfo('', 0, '', '', '', '', '', '');return $template;}
js代码
document.addEventListener( "plusready", function(){var messageList = [];var message = document.getElementById("message");// 监听点击消息事件plus.push.addEventListener( "click", function( msg ) {// alert(JSON.stringify(msg));// 判断是从本地创建还是离线推送的消息switch( msg.payload ) {case "LocalMSG":document.addEventListener("resume", function () {mui.plusReady(function(){// 循环清除通知栏var all_message = plus.push.getAllMessage();if(all_message.length > 0){for(var i = 0; i < all_message.length; i++){plus.push.remove(all_message[i]);}}// 进行跳转,使用vue-router跳转失败if(msg){location.href = window.location.href.split('#')[0]+'#/msgcenter';}// 需要销毁这个对象,要不然每次启动app都会跳转到指定页面msg = false;})}, false);outSet( "点击本地创建消息启动:" );break;default:outSet( "点击离线推送消息启动:");break;}// 处理其它数据logoutPushMsg( msg );}, false );// 监听在线消息事件plus.push.addEventListener( "receive", function( msg ) {// alert(JSON.stringify(msg));// 把监听到的消息添加数组messageList.push(JSON.parse(msg.payload));// 排队只有队伍执行完了,才再次调用排队函数if(messageList.length == 1){queue(messageList);}}, false );}, false );// 消息进行排队设置function queue(messageList){if(messageList.length > 0){var reponse = messageList[0];// 创建消息plus.push.createMessage(reponse['content'],'LocalMSG',{"title":reponse['title'],"sound":"none","cover":false});// 如果设置了响铃,就apend一个audio到id为app的标签里if(reponse['sound'] == 't'){// createAudio(reponse['url'],reponse['table_id']);createSpeech(reponse);}// 延迟8秒后,再播放下一条通知setTimeout(function(){messageList.splice(0,1);queue(messageList);},10000); }}// 创建audio标签(这块我之前是使用百度api的语音合成的phpSDK的,但是在5.1.1的安卓机没法完全播完(高版本的安卓机完全没有问题),老是播放一部分,实在没有找到解决的方案,感觉5+SDK可以解决,后来我就没有使用这块的代码了,我就改用科大讯飞的在线合成,hbuilder的html5+的speech)function createAudio(url,table_id) {var audio = document.createElement('audio');var app = document.getElementById('app');var oldAudio = document.getElementById(table_id.toString());// 如果已经存在这个id,就先移除掉if(oldAudio){app.removeChild(oldAudio);}audio.setAttribute('controls','controls');audio.setAttribute('autoplay','autoplay');audio.setAttribute('src',url);audio.setAttribute('id',table_id.toString());// audio.setAttribute('loop','loop');audio.style.display = 'none';app.appendChild(audio);}// 使用科大讯飞function createSpeech(reponse) {var main = plus.android.runtimeMainActivity();var SpeechUtility = plus.android.importClass('com.iflytek.cloud.SpeechUtility');var SpeechConstant = plus.android.importClass('com.iflytek.cloud.SpeechConstant');SpeechUtility.createUtility(main,"appid=5af2af41"); var SynthesizerPlayer = plus.android.importClass('com.iflytek.cloud.SpeechSynthesizer');var play = SynthesizerPlayer.createSynthesizer(main, null);play.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置发音人play.setParameter(SpeechConstant.SPEED, "10");//设置语速 play.setParameter(SpeechConstant.VOLUME, "90");//设置音量,范围0~100 // play.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端 if(reponse['type'] == 1){play.startSpeaking(reponse['tablename'] + '新的扫码点餐订单,' + reponse['tablename'] + '新的扫码点餐订单',null);}else if(reponse['type'] == 2){play.startSpeaking(reponse['tablename'] + '新的外卖订单' + reponse['tablename'] + '新的外卖订单',null);}else if(reponse['type'] == 3){play.startSpeaking(reponse['tablename'] + '请用餐,' + reponse['tablename'] + '请用餐',null);}}