Как отправлять/получать мобильные уведомления с помощью Django и React Native?

Я реализую уведомления для мобильного устройства.

Я успешно настроил Firebase в своем проекте и могу отправлять push-уведомления пользователям. Но моя проблема заключается в том, что на iOS, когда пользователь отказывается от прав на уведомление, мне все еще нужен способ, чтобы уведомление появлялось, когда пользователь открывает приложение.

После небольшого исследования я обнаружил, что могу сделать это с помощью Django Channel Layers, но все еще немного не понимаю, как именно это работает.

Насколько я понимаю, на стороне клиента я настраиваю WebSockets, открываю WebSocket-соединение и отправляю данные, что я и могу сделать.

Затем на стороне сервера я настраиваю Django Channels, слушаю открытое соединение и получаю данные, что мне также удается сделать.

Мой вопрос в том, как мне отправить данные целевому пользователю?

Вот мой код:

Реакция нативная:

const ws = new WebSocket('ws://ws/notif-socket/');

useEffect(() => {
    ws.onopen = () => {
      console.log('Connected!');
    };
    ws.onerror = e => {
      console.log(e.message);
    };
  }, []);

const data = {
   to_user: user_id.toString(),
   title: 'Notification',
   body: 'User_2 liked your post',
   image: imageURL,
};

ws.send(JSON.stringify(data));

Django:

# models.py
class Notification(models.Model):
    from_user = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='from_user')
    to_user = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='to_user')
    title = models.CharField(max_length=100)
    body = models.TextField(default=None, blank=True)
    image = models.CharField(max_length=300, default=None, blank=True)
    date = models.DateTimeField(auto_now_add=True)

# consumers.py
class NotificationConsumer(WebsocketConsumer):

    def connect(self):
        self.accept()

    def receive(self, text_data):
        data = json.loads(text_data)
        print(data)

Следует ли мне использовать Django Channels для этого случая использования?

Оцените любую помощь, спасибо!!!

Вернуться на верх