#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, я изучу некоторые из них.