Laravel5.5集成极光推送_解决推送失败重推问题
发布日期:2025-04-04 05:00:17 浏览次数:9 分类:精选文章

本文共 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中正确接收,并在出现问题时采用延迟重新推送机制,避免因推送失败导致用户体验下降。

    上一篇:Laravel5多应用修改
    下一篇:Laravel5.5集成七牛云上传、管理(删除、查询)

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月26日 11时06分30秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章