gpt4 book ai didi

Laravel Expo 推送通知 - 在 Android 上未收到通知

转载 作者:行者123 更新时间:2023-12-04 10:31:54 24 4
gpt4 key购买 nike

我对 Laravel 很陌生,找不到图书馆的任何实际示例 https://github.com/Alymosul/laravel-exponent-push-notifications .
我想创建一个简单的欢迎通知。

我的通知如下所示:

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use NotificationChannels\ExpoPushNotifications\ExpoChannel;
use NotificationChannels\ExpoPushNotifications\ExpoMessage;

class WelcomeNotification extends Notification
{
use Queueable;

public function __construct(){
}

public function via($notifiable)
{
return [ExpoChannel::class];
}

public function toExpoPush($notifiable)
{
return ExpoMessage::create()
->badge(1)
->title("Hello World!")
->enableSound()
->body("Hello World!");
}

public function toArray($notifiable)
{
return [
];
}
}

我已经在订阅路线的帮助下订阅了一个用户(成功创建了一个数据库条目)。

现在我想向用户发送通知:
public function sendNotification(Request $request)
{
$getUserByEmail = User::where('email', 'user@email.com')->first();
$getUserByEmail->notify(new WelcomeNotification());
}

我没有收到通知。使用博览会通知工具时,它按预期工作。

你能向我解释一下我做错了什么吗?

最佳答案

我想到了。问题是,库 laravel-exponent-push-notifications 将所有没有消息 channel 的通知发送到 channel “默认”。

因此,如果我创建 它将起作用消息 channel “默认”设备 .

或者,还有两个选择:

选项 1:
在设备上创建消息 channel 。

import { Notifications } from 'expo';

if (Platform.OS === 'android') {
await Notifications.createChannelAndroidAsync('chat-messages', {
name: 'Chat messages',
sound: true,
});
}
  • 发送通知
  • $getUserByEmail = User::where('email', 'user@email.com')->first();
    $getUserByEmail->notify(new WelcomeNotification());
  • 通知应包含在设备上注册的消息 channel :
  • public function toExpoPush($notifiable){
    return ExpoMessage::create()
    ->badge(1)
    ->title("Hello World!")
    ->enableSound()
    ->body("Hello World!")
    ->setChannelId("chat-messages");
    }

    选项 2:
    更改文件中的 toArray() 方法 NotificationChannels\ExpoPushNotifications\
    ExpoMessage.php
    像这样:
        public function toArray()
    {

    $returnArray = [
    'title' => $this->title,
    'body' => $this->body,
    'sound' => $this->sound,
    'badge' => $this->badge,
    'ttl' => $this->ttl,
    'channelId' => $this->channelId,
    'data' => $this->jsonData,
    ];

    if (strtolower($this->channelId) == 'default' || $this->channelId == '') {
    unset($returnArray['channelId']);
    }

    return $returnArray;
    }

    发送通知时世博会没有 channel 的申请,expo是 自动创建 channel 您将收到通知。

    更新

    另外不要忘记在 Laravel 中注册用户以便能够接收推送通知。您可以在自定义方法或提供的方法中执行此操作。

    可以在以下文件中找到(也可以更改)该路线: vendor\alymosul\laravel-exponent-push-notifications\src\Http\routes.php .

    关于Laravel Expo 推送通知 - 在 Android 上未收到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60383164/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com