【问题标题】:How to get real time notification with sound using laravel pusher?如何使用 laravel pusher 获得实时声音通知?
【发布时间】:2021-10-20 06:38:36
【问题描述】:

我想在我的应用下订单时获得实时的声音通知。我正在使用 laravel 8 和推送器。我收到实时警报,但声音无法正常工作。当第一次下订单时声音不播放,之后声音完美播放。这是我的代码结构...

我的活动课

  <?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class MyEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $message;

    public function __construct($message)
    {
        $this->message = $message;
    }

    public function broadcastOn()
    {
        return ['my-channel'];
    }

    public function broadcastAs()
    {
        return 'my-event';
    }
}

这里是js代码

Pusher.logToConsole = true;
  var pusher = new Pusher('***pusher key***', {
      cluster: 'ap2'
  });

  var channel = pusher.subscribe('my-channel');

  channel.bind('my-event', function(data) {
      alert(data.message)
      playAudio();

  });

  function playAudio() {
      var x = new Audio('http://127.0.0.1:8000/backend/assets/notification.mp3');
      // Show loading animation.
      var playPromise = x.play();

      if (playPromise !== undefined) {
          playPromise.then(_ => {
                  x.play();.
              })
              .catch(error => {
              });

      }
  }

这是我的控制器

public function store(){
    event(new MyEvent('1 new order has been placed'));
    return 'Success';

}

当我第一次到达这条路线时,会显示实时警报消息,但不会播放声音。它显示了这个错误

DOMException: play() failed because the user didn't interact with the document first. 
https://some link

第一次之后就完美了

如果下订单,我想向管理员发出声音通知,现在我该怎么做?

【问题讨论】:

    标签: javascript laravel push-notification pusher-js


    【解决方案1】:

    随着浏览器的最新更新,现在在用户不点击按钮的情况下无法使用代码启动声音。

    【讨论】:

    • 我想在下单后向管理员发出声音通知,现在我该怎么做?
    • 这种预防措施有充分的理由:用户不希望来自网站的音频。当他们加载网站时,他们会非常生气,并且音频广告会以最大音量向他们发出声音。如果他们打开多个选项卡并且不确定哪个是负责的,则情况会更糟。这就是为什么所有浏览器供应商都阻止网站播放音频,除非用户与之交互。是的,我了解您希望将此功能用于善意而不是作恶,但如果有变通方法,广告商也可以使用该变通方法。所以很高兴这样的解决方法不存在。
    • 因此,唯一真正的解决方案是找出玩家在加载游戏 HTML 文档后需要执行某种形式的交互的某些原因。一个很好的借口是某种带有版权信息和其他法律术语的初始屏幕,在用户单击它后就会消失。您还可以将此初始屏幕用作登录屏幕所需资产的预加载器。这样可以确保在低带宽连接的用户看到背景音乐时实际加载它。
    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多