laravel — push-уведомление OneSignal с переполнением стека

я использую onesignal первый раз. Я уже провел слишком много времени на R&D. Но выход практически равен нулю. Итак, здесь я иду с моими требованиями.

  • У меня есть сайт. iOS-приложение сайта и Android-приложение тоже. Так же, как WhatsApp или Facebook.
  • Когда пользователь вошел в любой из вышеперечисленных, пользователь должен получить уведомление webpush или уведомление iOS, в зависимости от вошедшего в систему устройства.
  • Если пользователь одновременно заходит на веб-сайт, а также в приложение iOS, пользователь должен получить уведомление об обоих.
  • Если пользователь выходит из iOS, он не должен получать уведомления на устройстве iOS, пока он не войдет снова.
  • Если другой пользователь входит в то же приложение iOS, он не должен получать уведомления о последнем вошедшем в систему пользователе. Он должен получать только уведомления, связанные с ним.
  • То же самое и для веб-сайта.

Я успешно разработал демо. Но это не зависит от пользователя. Если я запускаю уведомление, все устройство получает уведомление. Итак, вот мои вопросы.

  • Я работал над GCM (я из PHP фона). Так что, насколько мне известно, push-уведомление работает на идентификатор устройства. Так нужно ли хранить несколько идентификаторов устройств для одного пользователя в базе данных MySQL (для Chrome, iOS, Android и т. Д.)?
  • Как я получу этот идентификатор устройства? Помните, что если пользователь не вошел в систему, я не хочу отправлять уведомления.
  • Как сохранить его в моей базе данных? Я передам этот идентификатор устройства на свой сервер, вызвав API, и мой сервер сохранит его в базе данных. Но когда я должен отправить? Потому что, если пользователь не вошел в систему, то как узнать, для какого пользователя мне нужно сохранить идентификатор устройства?
  • Как проверить, изменился ли пользователь на устройстве или он такой же или вышел из системы?

Если кто-нибудь может показать мне базовый пример, это будет оценено. Я со стороны PHP. Это будет хорошо для меня, если я получу ответ с точки зрения разработчика PHP. Я уже спрашивал этот вопрос на стеке потока Но ответ был с точки зрения Android. Но я думаю, что он не знает, что на стороне сервера мы должны управлять всеми устройствами. Так что я не получил намного больше от этого ответа.

-1

Решение

Onesignal — это хорошая платформа для отправки push-уведомлений на различные типы устройств. Я использую то же самое в моем проекте. Что я делаю, так это то, что всякий раз, когда пользователь входит в систему, я получаю токен устройства от клиента и создаю пользователя в сигнале с помощью его API. (Я полагаю, вы знаете, как настроить сигнал с номером проекта Google & ключ API Google для Android, P12 файлы для IOS, и т.д …)

Перспектива Android:

  • Мы должны помнить одну вещь: токен gcm устройства всегда будет оставаться неизменным, пока номер проекта Google и ключ API Google не изменятся.
  • Если в том же проекте используется другое приложение, такое как b2b, b2c и т. Д. (С той же БД и бэкэндом), ваш ключ API Google изменится, равно как и токен gcm, а также идентификатор игрока с одним сигналом.

Таким образом, для одного и того же ключа API Google onesignal всегда будет возвращать один и тот же идентификатор игрока, даже если вы снова удалите и создадите пользователя.
В большом проекте разработчики должны ожидать, что пользователь может войти в систему на разных устройствах (Android, IOS и т. Д.). Таким образом, пользователь может иметь несколько токенов, как и идентификатор игрока. Еще одно требование, которое вы предъявляете, заключается в том, что пользователь не хочет получать уведомления, если он не вошел в систему.

Поэтому, учитывая все ваши требования, я могу предложить вам одну структуру таблиц MySQL для хранения пользовательских данных.

  1. Одна таблица для хранения типа устройства (необязательно)

      -id
    -device_type
    
  2. Один для хранения токенов и идентификаторов игроков

      -token_id
    -user_id
    -device_id
    -device_token
    -onesignal_player_id
    -subscription
    

Эти две таблицы необходимы для работы с сигналом.

Случай 1:

Всякий раз, когда пользователь пытается войти в систему, сначала проверьте таблицу токенов. Выясните, есть ли другой пользователь с таким же данным токеном (что означает, что другой пользователь вошел в систему с того же устройства). Удалите такой токен, если он есть. Затем создайте нового игрока в onesignal и сохраните детали в таблице токенов. Пометить подписку как 1, которая подписана на уведомление. Всякий раз, когда пользователь выходит из системы, пометьте подписку на 0, которая не подписана на уведомление.

Дело 2:

Всякий раз, когда пользователь входит в систему, проверьте токен, присутствует ли он уже в таблице. Если да, и владелец токена такой же, просто пометьте подписку как 1. Чтобы он получал дальнейшие уведомления.

Дело 3:

Когда пользователь использует другое устройство для входа (несколько устройств одновременно), токен gcm наверняка будет другим. Поэтому сохраните его как еще один токен для того же пользователя и отметьте подписку как 1. Итак, оба устройства получат уведомление.

В конце, перед отправкой уведомлений, извлеките все токены того конкретного пользователя, на которого подписана, и отправьте уведомление всем за один раз. Это решит вашу проблему.

Я знаю, что это может быть немного запутанным. Но не волнуйтесь, мы можем это исправить.

введите описание изображения здесь

5

Другие решения

  • Для хранения нескольких устройств для одного пользователя вы должны идентифицировать их на
    каким-то образом. Вы можете включить веб-хуки, и когда новый пользователь подписался, вы
    можете отправить свою идентификационную информацию (идентификатор, адрес электронной почты и т. д.). С этими данными
    вы получите его новый идентификатор устройства. Тогда вы должны хранить его так, как вам
    лайк.
  • Для отслеживания является логин пользователя или нет, вы можете использовать идентификатор
    информация: отправка запроса в API при входе и выходе.
    Обратите внимание, что пользователь может войти в систему на одном устройстве и выйти на
    Другой.
  • Вот почему я хотел бы также отправить идентификатор устройства и сохранить зарегистрированный статус в паре, но вы можете сделать это так, как вам нравится.
-1

Этот урок поможет вам, которые отправляют уведомления с PHP.

-1
По вопросам рекламы [email protected]