Ad

Laravel-notification-channels/apn Either Isn't Sending Notification Or My IPhone Isn't Receiving The Notification

- 1 answer

I am using this package to try and send apn notifications in my Laravel app. However, I have followed the documentation on the main page, and when I try to send an apn notification, I can log on the server that the constructor and via methods are called, but I can't figure out why my notification either isn't being sent or isn't being received. My logs have no info from the package either.

How do I troubleshoot this? What am I missing?

MyNotification.php

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Log;
use NotificationChannels\Apn\ApnChannel;
use NotificationChannels\Apn\ApnMessage;

class MyNotification extends Notification
{
    use Queueable;

    public function __construct()
    {
        Log::debug('MyNotification constructor called');
    }

    public function via($notifiable)
    {
        Log::debug('MyNotification via called');
        return [ApnChannel::class];
    }

    public function toApn($notifiable)
    {
        Log::debug('MyNotification toApn called');
        return ApnMessage::create()
            ->badge(1)
            ->title('My title')
            ->body('My body');
    }

    public function routeNotificationForApn($notifiable)
    {
        Log::debug('MyNotification routeNotificationForApn called');
        return $notifiable->token;
    }
}

usage code in MyController.php

    public function sendNotification(MyModel $model)
    {
    // authorization checks here...

        $devices = Device::where('user_id', $model->user_id)->get();
        Notification::send($devices, new MyNotification());

        return response()->json(null, 200);
    }

Here is what my broadcasting.php and .env files look like: enter image description hereenter image description here

Ad

Answer

The problem was that the function routeNotificationForApn() belongs in the notifiable model (in my instance, Device), not in the MyNotification class.

Removing the use Queueable; is required as well if you don't have a queue set up.

Ad
source: stackoverflow.com
Ad