Отправлять Push-уведомления с помощью Flutter OneSignal для идентификатора игрока

#php #flutter #cakephp-3.0 #onesignal

#php #flutter #cakephp-3.0 #onesignal

Вопрос:

Я создаю push-систему в стиле календаря. Мне нужно, чтобы при создании расписания для пользователя система отправляла уведомление только ему, я создал систему для управления этим PHP, кто-нибудь знает, как мне помочь?

Ответ №1:

Если вы используете OneSignal. Вы можете отправлять на это отдельное устройство с помощью идентификатора игрока, однако вам необходимо сохранить идентификатор игрока на сервере, чтобы вы знали, на какое устройство отправлять. Я лично делаю это в состоянии инициализации и выполняю http.post в моем api, чтобы сохранить идентификатор игрока в моей базе данных для этого конкретного пользователя.

Вы, конечно, можете добиться того же, используя теги OneSignal (полезно, если у одного и того же пользователя несколько учетных записей на одном устройстве).

Для отправки уведомлений используйте curl в php.

 <?php
function sendMessage(){
    $content = array(
        "en" => 'English Message'
        );

    $fields = array(
        'app_id' => "your-app-id",
        'include_player_ids' => array("playerid-you-want-to-send-to"),
        'data' => array("foo" => "bar"),
        'contents' => $content
    );

    $fields = json_encode($fields);
    print("nJSON sent:n");
    print($fields);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

$response = sendMessage();
$return["allresponses"] = $response;
$return = json_encode( $return);

print("nnJSON received:n");
print($return);
print("n");
?>
  

В Flutter получите пакет, импортируйте его и:

 void oneSignal() {
OneSignal.shared.init("app-id");

OneSignal.shared.setNotificationReceivedHandler((OSNotification notification) 

   {
     //do what you need to do with upcoming notification, get title for example
     print(notification.payload.title);
   }
}
  

Ответ №2:

Я далек от эксперта по мобильным приложениям, поэтому кто-нибудь должен это исправить / подтвердить.

Для выполнения push-уведомлений в вашем приложении вы могли бы использовать «живое» соединение (например, websocket) или вы могли бы использовать опрос.

Я не очень разбираюсь в websockets и не думаю, что это возможно с CakePHP (не уверен). РЕДАКТИРОВАТЬ: Определенно невозможно из коробки, но существуют плагины.

При использовании опроса вы время от времени повторяете запрос GET (раз в час, раз в минуту, в зависимости от потребностей) и проверяете, есть ли новая информация.
Например, ваша страница CakePHP может быть действием, принимающим lastUpdated аргумент, который возвращает новую информацию с момента этой временной метки. Затем приложение запрашивает эту страницу каждые x минуты, каждый раз устанавливая lastUpdated параметр. При появлении новой информации ответ не будет пустым, и приложение сможет его обработать.

Это означает, что приложение должно всегда работать в фоновом режиме, и количество запросов может стать значительным (в зависимости от интервала опроса).

Комментарии:

1. Я собираюсь попробовать работать таким образом, в основном я должен анализировать данные и отправлять уведомления тем, кто попадает в условия, веб-сокеты — лучшее или единственное решение, которое я вижу. В CakePHP 3 есть несколько плагинов для websocket, я изучу некоторые из них.