IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> laravel对接onesignal -> 正文阅读

[PHP知识库]laravel对接onesignal

一 获取关键参数

ONESIGNAL_APP_ID
ONESIGNAL_REST_API_KEY

二 laravel-notification-channels/onesignal简介

安装

composer require laravel-notification-channels/onesignal

基本使用

  1. 添加配置文件config/services.php
// config/services.php
'onesignal' => [
    'app_id' => env('ONESIGNAL_APP_ID'),
    'rest_api_key' => env('ONESIGNAL_REST_API_KEY')
],
  1. 用法
use NotificationChannels\OneSignal\OneSignalChannel;
use NotificationChannels\OneSignal\OneSignalMessage;
use NotificationChannels\OneSignal\OneSignalWebButton;
use Illuminate\Notifications\Notification;

class AccountApproved extends Notification
{
    public function via($notifiable)
    {
        return [OneSignalChannel::class];
    }

    public function toOneSignal($notifiable)
    {
        return OneSignalMessage::create()
            ->setSubject("Your {$notifiable->service} account was approved!")
            ->setBody("Click here to see details.")
            ->setUrl('http://onesignal.com')
            ->webButton(
                OneSignalWebButton::create('link-1')
                    ->text('Click here')
                    ->icon('https://upload.wikimedia.org/wikipedia/commons/4/4f/Laravel_logo.png')
                    ->url('http://laravel.com')
            );
    }
}

为了让您的通知知道您的目标是哪个 OneSignal 用户,请将routeNotificationForOneSignal方法添加到您的 Notifiable 模型中。

  • 您可以返回单个玩家 ID,或者如果您想通知多个玩家 ID,只需返回包含所有 ID 的数组。
   public function routeNotificationForOneSignal()
	{
	    return 'ONE_SIGNAL_PLAYER_ID';
	}
  • 如果要基于 OneSignal“syncHashedEmail”功能发送通知,只需返回索引为“email”的数组。由于 OneSignal API 的限制,不可能在一个过滤器上使用多个电子邮件。
	public function routeNotificationForOneSignal()
	{
	    return 'ONE_SIGNAL_PLAYER_ID';
	}
  • 如果您想基于 OneSignal“标签”功能发送通知,只需返回一个索引为“标签”的数组。
	public  function  routeNotificationForOneSignal () 
	{ 
	return [ 'tags' => [ 'key' => 'device_uuid' , 'relation' => '=' , 'value' => '1234567890-abcdefgh-1234567' ]]; 
	}
  • setExternalUserId如果您想根据您使用该功能设置的外部用户 ID 发送通知。这使得根据 Laravel 用户 ID 定位用户变得非常容易。
	public function routeNotificationForOneSignal()
	{
	    return ['include_external_user_ids' => $this->id];
	}

三 使用案列

使用背景介绍:
给不同的用户(user)推送不同场景下的消息通知

  • 模型返回用户的唯一ID(此次用的是user_sn)
	public function routeNotificationForOneSignal()
    {
        return ['include_external_user_ids' => [$this->attributes['user_sn']]];
    }
  • 封装消息推送模板类
<?php

namespace App\Notifications;

use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Log;
use NotificationChannels\OneSignal\OneSignalChannel;
use NotificationChannels\OneSignal\OneSignalMessage;

class OnesignalNotify extends Notification
{
    use Queueable;


    protected $title;  // 消息标题
    protected $body;   // 消息内容
    protected $data;   // 自定义字段
    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($events,$data)
    {
        try{
            $this->data = $data;
            $this->messageTemplate($events);
        }catch(Exception $e){
            Log::info('onesignal '.$events.' 错误:',[$e->getMessage()]);
        }
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return [OneSignalChannel::class];
    }

    public function toOneSignal($notifiable)
    {
        return OneSignalMessage::create()
            ->subject($this->title)
            ->body($this->body);
    }
    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->line('The introduction to the notification.')
                    ->action('Notification Action', url('/'))
                    ->line('Thank you for using our application!');
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
 	/**
    * 自定义模板类型和内容
    *
    * @param [type] $events
    * @return void
    */
    public function messageTemplate($events)
    {
        switch ($events){
            case '自定义消息类型':
                $title = array(
                    'en'=>'标题(英文版)',
                    'zh-Hans'=>'标题(中文版)'
                );
                $body = array(
                    "en" => '内容(英文版)',
                    "zh-Hans"=>'内容(中文版)',
                );
                break;
            default : 
                break;
        }
        
        $this->title = $title;
        $this->body = $body;
    }
}

  • 封装外部调用方法
	/**
	* onesignal 消息推送
	 *
	 * @param string $events 要推送的消息类型
	 * @param string $user_sn 推送用户的唯一标识
	 * @param array $data 消息推送的参数
	 * @return void
	 */
	public function sendMessage($events,$user_sn,$data = [])
	{
	    $user = User::where('user_sn',$user_sn)->first(); //实例化用户模型
	    if($user)
	    {
	        $user->notify(new OnesignalNotify($events,$data));
	    }else{
	        Log::info('onesignal '.$events.' 外部错误: '.'推送人为空');
	    }
	}
  • 使用
	$this->sendMessage($events,$user_sn,$data);

参考文档

OneSignal文档
laravel-notification-channels/onesignal

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 20:53:46  更:2022-02-14 20:55:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 11:31:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码