博客
关于我
Laravel5.5集成极光推送_解决推送失败重推问题
阅读量:792 次
发布时间:2023-01-30

本文共 2813 字,大约阅读时间需要 9 分钟。

针对现场互动产品开发中的极光推送问题,我们从以下几个方面进行了解决方案设计和实现:

一、项目背景

之前的产品采用微信小程序作为用户端,电视盒子APP作为显示端。用户在小程序端通过发送弹幕和霸屏信息,服务端将消息推送至安卓端(电视盒子APP)显示。为实现这一功能,我们选择了极光推送 SDK 处理第三方推送任务。在实际运行过程中,发现极光推送返回的状态可能与实际结果不符,因此我们需要通过观察电视盒子APP的接收情况来判断推送是否成功。

二、实现极光推送功能

为了确保推送的可靠性,我们采用以下方法:

  • 极光推送类实现
  • 在项目根目录下添加极光推送依赖包:

    "require": {    "jpush/jpush": "*"}

    安装依赖:

    composer install

    开发极光推送类:

    $deviceId, 'app_id' => $appId])->value('register_id'); $jpushConfig = JpushAppConfig::find($appId); $client = new JPush($jpushConfig->app_key, $jpushConfig->master_secret, null); return $client->push() ->setPlatform('android') ->addRegistrationId($registerId) ->message('jpush', array('extras' => $data)) ->options(array('time_to_live' => 10)) ->send(); }}

    在控制器中调用推送功能:

    jpush = new JpushSend(); } public function deviceRegister(Request $request) { $data = $request->validate([ 'app_id' => 'required', 'device_code' => 'required', 'register_id' => 'required' ]); $device_id = Device::where('device_code', $data['device_code'])->find(['id']); DeviceJpush::insert([ 'app_id' => $data['app_id'], 'device_id' => $device_id, 'register_id' => $data['register_id'] ]); return responseOk(); } public function push(Request $request) { $data = $request->validate([ 'app_id' => 'required', 'device_id' => 'required', 'data' => 'required' ]); PushRecord::insert([ 'app_id' => $data['app_id'], 'device_id' => $data['device_id'], 'data' => json_encode($data['data']) ]); event(new JpushMsg($pushRecord)); return responseOk(); }}

    完成数据库设计:

    device(    id,    device_code,    device_name,    ...)jpush_app_config(    id,    app_key,    master_secret,    package_name,    ...)device_jpush(    id,    device_id,    app_id,    register_id)

    三、应对推送失败的解决方案

    为了确保每条推送能够成功接收,我们采取以下措施:

  • 建立推送记录表
  • push_record(    id,    device_id,    app_id,    data,    push_status)
    1. 通过事件系统处理推送
    2. pushRecord = $pushRecord; } public function broadcastOn() { return new PrivateChannel('channel-name'); }}
      1. delayed任务机制处理
      2. recordId = $recordId; } public function handle() { $num = Cache::get('record'.$this->recordId); if ($num > 10) return; $pushRecord = PushRecord::find($this->recordId); if ($pushRecord->push_status === 1) return; event(new JpushMsg($pushRecord)); }}
        1. 推送状态更新控制器
        2. validate(['record_id' => 'required']); PushRecord::where('id', $data['record_id'])->update(['push_status' => 1]); return responseOk(); }}

          通过以上方法,我们实现了对极光推送的可靠性监控和异常处理,确保每条推送能够在电视盒子APP中正确接收,并在出现问题时采用延迟重新推送机制,避免因推送失败导致用户体验下降。

    转载地址:http://sfgyk.baihongyu.com/

    你可能感兴趣的文章
    leaflet图标跳动(leaflet篇.45)
    查看>>
    leaflet图标闪烁(leaflet篇.20)
    查看>>
    leaflet圆采集与圆编辑(leaflet篇.8)
    查看>>
    leaflet地图无级别缩放(移动端)(leaflet篇.76)
    查看>>
    leaflet多边形空间查询(ElasticSearch技术实现)(leaflet篇.52)
    查看>>
    leaflet实现wms服务面要素可点击(leaflet篇.30)
    查看>>
    leaflet实现反向匹配查询(ElasticSearch技术实现)(输入坐标查询距离最近的地址信息)(leaflet篇.49)
    查看>>
    leaflet实现四色预警(仿echarts气泡图)(leaflet篇.41)
    查看>>
    Leaflet快速入门与加载OSM显示地图
    查看>>
    leaflet态势标绘-细直线箭头采集(leaflet篇.83)
    查看>>
    leaflet接入geoserver发布的wms服务(leaflet篇.28)
    查看>>
    leaflet接入geoserver发布的热力图服务(leaflet篇.29)
    查看>>
    leaflet接入土地资源(leaflet篇.55)
    查看>>
    leaflet接入天地图(经纬度投影256)(leaflet篇.24)
    查看>>
    leaflet接入百度午夜蓝地图、深色地图(leaflet篇.27)
    查看>>
    leaflet接入百度地图服务时只有北半球的解决方案(leaflet篇.54)
    查看>>
    leaflet接入百度影像地图(leaflet篇.34)
    查看>>
    leaflet散点图(leaflet篇.13)
    查看>>
    leaflet暗色系地图样式地图(获取滤镜值)(leaflet篇.44)
    查看>>
    leaflet柱状图(leaflet篇.75)
    查看>>